From c30e740be11163ed59865d58e9d46b012712b09a Mon Sep 17 00:00:00 2001 From: Ray Milkey Date: Tue, 1 Dec 2020 11:27:04 -0800 Subject: [PATCH 001/235] bumping to version 2.5 Change-Id: I10c2968b88c7d42bcec28c2e74945fc82929a98d --- .gitreview | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitreview b/.gitreview index 328aec64cad..2fa2f86fbc9 100644 --- a/.gitreview +++ b/.gitreview @@ -3,4 +3,4 @@ host=gerrit.onosproject.org port=29418 project=onos.git defaultremote=origin -defaultbranch=master +defaultbranch=onos-2.5 From 67a3dcc261e39c507f50c470a5e30257109ed6ee Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Tue, 1 Dec 2020 22:36:26 +0000 Subject: [PATCH 002/235] Tagging 2.5.0-rc2 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 72eb841612a..814c3cac387 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.0-SNAPSHOT"); + private static Version version = Version.version("2.5.0-rc2"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 744df59aba7..e26b97684d0 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.0-SNAPSHOT" +ONOS_VERSION = "2.5.0-rc2" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 89eba4606d9..eb691c15953 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.0-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.0.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.0-rc2" +export ONOS_VERSION=${ONOS_VERSION:-2.5.0-rc2.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 8d7033609f4..1855f4f933a 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 9fe225a5e6c..324d746e3b0 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index dc32a7c2897..969c234fbf4 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 2fd1b77ed55..2de8b8b6a7b 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 77df4963aac..bde3c44aa86 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index efa25098122..4b72373fd42 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index f78ada57e55..5c6c17ec511 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 601b5a97dd7..301d0d44e7d 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index a8a3fffb66c..b5467caabe4 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 4f94d6a9d2e..80d00ceb4b3 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index beca1893b23..4238d0cc442 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 5212c9f77db..67b74dc3375 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 5fe62076d0a..5964d9706d2 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index d400e0afcef..1181017b020 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a579ea71778..4dcd3e0f394 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 9a248b83b84..8df9e0f6121 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0-rc2 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index be4d2d9e206..e0231b29b74 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-SNAPSHOT + 2.5.0-rc2 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 0a476c719ed..3ba12ec6603 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0-rc2" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From ab12330c351a75cfe21080d9531700146d270ab7 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Tue, 1 Dec 2020 22:36:31 +0000 Subject: [PATCH 003/235] Starting snapshot 2.5.0-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 814c3cac387..72eb841612a 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.0-rc2"); + private static Version version = Version.version("2.5.0-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index e26b97684d0..744df59aba7 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.0-rc2" +ONOS_VERSION = "2.5.0-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index eb691c15953..89eba4606d9 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.0-rc2" -export ONOS_VERSION=${ONOS_VERSION:-2.5.0-rc2.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.0-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.0.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 1855f4f933a..8d7033609f4 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 324d746e3b0..9fe225a5e6c 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 969c234fbf4..dc32a7c2897 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 2de8b8b6a7b..2fd1b77ed55 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index bde3c44aa86..77df4963aac 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 4b72373fd42..efa25098122 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 5c6c17ec511..f78ada57e55 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 301d0d44e7d..601b5a97dd7 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index b5467caabe4..a8a3fffb66c 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 80d00ceb4b3..4f94d6a9d2e 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 4238d0cc442..beca1893b23 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 67b74dc3375..5212c9f77db 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 5964d9706d2..5fe62076d0a 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 1181017b020..d400e0afcef 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 4dcd3e0f394..a579ea71778 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 8df9e0f6121..9a248b83b84 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-rc2 + 2.5.0-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index e0231b29b74..be4d2d9e206 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-rc2 + 2.5.0-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 3ba12ec6603..0a476c719ed 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0-rc2" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 496c1d3ae868db0919ccb248b4947d75510ad51e Mon Sep 17 00:00:00 2001 From: Lakshya Thakur Date: Sun, 29 Nov 2020 23:54:24 +0530 Subject: [PATCH 004/235] Implemented HttpResponseHeadersFilter to set the CSP frame ancestors header to prevent iframe embedding Change-Id: Ib58e452e291c4df407d30e8b914ab6aa20ae77bc (cherry picked from commit de3e6f52c814f50d6696bf84d363f762e8ee6fab) --- .../impl/gui2/HttpResponseHeadersFilter.java | 29 +++++++++++++++++++ .../ui/impl/gui2/MainIndexResource.java | 7 +---- web/gui2/src/main/webapp/WEB-INF/web.xml | 10 +++++++ 3 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 web/gui2/src/main/java/org/onosproject/ui/impl/gui2/HttpResponseHeadersFilter.java diff --git a/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/HttpResponseHeadersFilter.java b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/HttpResponseHeadersFilter.java new file mode 100644 index 00000000000..68e4ac2bf38 --- /dev/null +++ b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/HttpResponseHeadersFilter.java @@ -0,0 +1,29 @@ +package org.onosproject.ui.impl.gui2; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; + + +public class HttpResponseHeadersFilter implements Filter { + + @Override + public void init(FilterConfig filterconfig){} + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletResponse resp = (HttpServletResponse) response; + resp.setHeader("Content-Security-Policy", "frame-ancestors 'none'"); + chain.doFilter(request, resp); + } + + @Override + public void destroy(){} + +} \ No newline at end of file diff --git a/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/MainIndexResource.java b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/MainIndexResource.java index 3441cbfb45c..64c4f2864ce 100644 --- a/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/MainIndexResource.java +++ b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/MainIndexResource.java @@ -52,9 +52,6 @@ public class MainIndexResource extends AbstractInjectionResource { private static final String INDEX = "index.html"; private static final String NOT_READY = "not-ready.html"; - private static final String CONTENT_SECURITY_POLICY = "Content-Security-Policy"; - private static final String FRAME_ANCESTORS_NONE = "frame-ancestors 'none'"; - private static final String INJECT_USER_START = ""; private static final String INJECT_USER_END = ""; @@ -117,9 +114,7 @@ public Response getMainIndex() throws IOException { new ByteArrayInputStream(SCRIPT_END), stream(index, p0e, p3s))); - return Response.ok(new SequenceInputStream(streams)) - .header(CONTENT_SECURITY_POLICY, FRAME_ANCESTORS_NONE) - .build(); + return Response.ok(new SequenceInputStream(streams)).build(); } private InputStream userConsoleLog(String userName) { diff --git a/web/gui2/src/main/webapp/WEB-INF/web.xml b/web/gui2/src/main/webapp/WEB-INF/web.xml index 2543df830ae..fdcd4220ed7 100644 --- a/web/gui2/src/main/webapp/WEB-INF/web.xml +++ b/web/gui2/src/main/webapp/WEB-INF/web.xml @@ -21,6 +21,16 @@ id="ONOS" version="2.5"> ONOS GUI 2 + + Http Response Headers Filter + org.onosproject.ui.impl.gui2.HttpResponseHeadersFilter + + + + Http Response Headers Filter + /* + + index.html From 5971ae11f8bb0cda8d92d58ee571382ea16adffa Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Fri, 4 Dec 2020 14:06:18 +0100 Subject: [PATCH 005/235] [ONOS-8130] Correct and cosistent access to message-id counter in NetconfSessionMinaImpl Change-Id: If27435c5ff9e1855696246326243eabe92a20335 (cherry picked from commit fb362174e130f6882d3682eaa26f2a46c2108f3d) --- .../onosproject/netconf/ctl/impl/NetconfSessionMinaImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionMinaImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionMinaImpl.java index 22bb2b8ed03..f45c877f351 100644 --- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionMinaImpl.java +++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionMinaImpl.java @@ -580,7 +580,7 @@ public CompletableFuture rpc(String request) { String rpc = request; // - assign message-id - int msgId = messageIdInteger.incrementAndGet(); + int msgId = messageIdInteger.getAndIncrement(); // - re-write request to insert message-id // FIXME avoid using formatRequestMessageId rpc = formatRequestMessageId(rpc, msgId); From 51996034853e96aea9be1829aeeb44c288225af8 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Fri, 4 Dec 2020 18:41:22 +0000 Subject: [PATCH 006/235] Tagging 2.5.0 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 72eb841612a..23a4275b4f3 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.0-SNAPSHOT"); + private static Version version = Version.version("2.5.0"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 744df59aba7..2f52f34a0b6 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.0-SNAPSHOT" +ONOS_VERSION = "2.5.0" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 89eba4606d9..e4e8fcd30c1 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.0-SNAPSHOT" +export ONOS_POM_VERSION="2.5.0" export ONOS_VERSION=${ONOS_VERSION:-2.5.0.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 8d7033609f4..7eb7d94785f 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 9fe225a5e6c..404fef07d11 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index dc32a7c2897..6608d4a1138 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 2fd1b77ed55..72c0002dde9 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 77df4963aac..bc8bae5cd58 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index efa25098122..08c09b4fec1 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index f78ada57e55..09727f734cd 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 601b5a97dd7..5b3303b1903 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index a8a3fffb66c..14143b18e5f 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 4f94d6a9d2e..05354e37fa8 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index beca1893b23..82944fa7b87 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 5212c9f77db..b14a2773f6c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 5fe62076d0a..901d8cb008b 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index d400e0afcef..2b52baa630a 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a579ea71778..8b2c9f7e578 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 9a248b83b84..730732fc8cf 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0-SNAPSHOT + 2.5.0 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index be4d2d9e206..12b9a065e27 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0-SNAPSHOT + 2.5.0 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 0a476c719ed..b08e1a05b64 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 8caf975a590d1284cfcd7bc9d03cd492cf12a3c9 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Fri, 4 Dec 2020 18:41:27 +0000 Subject: [PATCH 007/235] Starting snapshot 2.5.1-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 23a4275b4f3..42c4e934e24 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.0"); + private static Version version = Version.version("2.5.1-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 2f52f34a0b6..af652726fbd 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.0" +ONOS_VERSION = "2.5.1-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index e4e8fcd30c1..d6c35b9335e 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.0" -export ONOS_VERSION=${ONOS_VERSION:-2.5.0.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.1-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 7eb7d94785f..be57a9d01fe 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 404fef07d11..c74936371d0 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 6608d4a1138..03b88df797e 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 72c0002dde9..0f20d61e54d 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index bc8bae5cd58..3fcf109f060 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 08c09b4fec1..49a790e230e 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 09727f734cd..894819fda35 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 5b3303b1903..c569317c458 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 14143b18e5f..0d05037043e 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 05354e37fa8..56166076bae 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 82944fa7b87..a70a02a5cc5 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index b14a2773f6c..a570d4f4b76 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 901d8cb008b..6eab333ae67 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 2b52baa630a..4d4703f9970 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 8b2c9f7e578..c99fa82e622 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 730732fc8cf..bc945d79103 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.0 + 2.5.1-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 12b9a065e27..86a21097f15 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.0 + 2.5.1-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index b08e1a05b64..dfc6e180563 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.0" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From b9df9b1478228c046ca2985b03543919b6c36cd4 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 12 Jun 2020 12:26:32 -0700 Subject: [PATCH 008/235] Extract and publish p4runtime protocol utils in separate artifact For consumption by third-party apps built via mvn Change-Id: Ic9c1eccb2519b2952cdb632e1f07ccefbba00396 --- protocols/p4runtime/BUILD | 1 + protocols/p4runtime/ctl/BUILD | 1 + protocols/p4runtime/utils/BUILD | 8 ++++++++ .../onosproject/p4runtime/ctl/codec/AbstractCodec.java | 0 .../p4runtime/ctl/codec/AbstractEntityCodec.java | 0 .../org/onosproject/p4runtime/ctl/codec/ActionCodec.java | 0 .../p4runtime/ctl/codec/ActionProfileGroupCodec.java | 0 .../p4runtime/ctl/codec/ActionProfileMemberCodec.java | 0 .../p4runtime/ctl/codec/CloneSessionEntryCodec.java | 0 .../onosproject/p4runtime/ctl/codec/CodecException.java | 0 .../java/org/onosproject/p4runtime/ctl/codec/Codecs.java | 0 .../p4runtime/ctl/codec/CounterEntryCodec.java | 0 .../p4runtime/ctl/codec/DirectCounterEntryCodec.java | 0 .../p4runtime/ctl/codec/DirectMeterEntryCodec.java | 0 .../org/onosproject/p4runtime/ctl/codec/EntityCodec.java | 0 .../onosproject/p4runtime/ctl/codec/FieldMatchCodec.java | 0 .../org/onosproject/p4runtime/ctl/codec/HandleCodec.java | 0 .../onosproject/p4runtime/ctl/codec/MeterEntryCodec.java | 0 .../p4runtime/ctl/codec/MulticastGroupEntryCodec.java | 0 .../org/onosproject/p4runtime/ctl/codec/P4DataCodec.java | 0 .../onosproject/p4runtime/ctl/codec/PacketInCodec.java | 0 .../p4runtime/ctl/codec/PacketMetadataCodec.java | 0 .../onosproject/p4runtime/ctl/codec/PacketOutCodec.java | 0 .../onosproject/p4runtime/ctl/codec/PreReplicaCodec.java | 0 .../onosproject/p4runtime/ctl/codec/TableEntryCodec.java | 0 .../java/org/onosproject/p4runtime/ctl/codec/Utils.java | 0 .../org/onosproject/p4runtime/ctl/codec/package-info.java | 0 .../onosproject/p4runtime/ctl/utils/P4InfoBrowser.java | 0 .../onosproject/p4runtime/ctl/utils/PipeconfHelper.java | 0 .../org/onosproject/p4runtime/ctl/utils/package-info.java | 0 tools/build/publish-target-list | 1 + 31 files changed, 11 insertions(+) create mode 100644 protocols/p4runtime/utils/BUILD rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractEntityCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileGroupCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileMemberCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/CloneSessionEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/CodecException.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/Codecs.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/CounterEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectCounterEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/EntityCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/HandleCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/MulticastGroupEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/P4DataCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketInCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketOutCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/TableEntryCodec.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/codec/package-info.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/utils/PipeconfHelper.java (100%) rename protocols/p4runtime/{ctl => utils}/src/main/java/org/onosproject/p4runtime/ctl/utils/package-info.java (100%) diff --git a/protocols/p4runtime/BUILD b/protocols/p4runtime/BUILD index 39f640312fb..5db0ebea4cd 100644 --- a/protocols/p4runtime/BUILD +++ b/protocols/p4runtime/BUILD @@ -3,6 +3,7 @@ BUNDLES = [ "//protocols/p4runtime/ctl:onos-protocols-p4runtime-ctl", "//protocols/p4runtime/model:onos-protocols-p4runtime-model", "//protocols/p4runtime/proto:onos-protocols-p4runtime-proto", + "//protocols/p4runtime/utils:onos-protocols-p4runtime-utils", ] onos_app( diff --git a/protocols/p4runtime/ctl/BUILD b/protocols/p4runtime/ctl/BUILD index 5fbbd6896a2..dca5f38eec8 100644 --- a/protocols/p4runtime/ctl/BUILD +++ b/protocols/p4runtime/ctl/BUILD @@ -4,6 +4,7 @@ COMPILE_DEPS = CORE_DEPS + KRYO + [ "//protocols/grpc/ctl:onos-protocols-grpc-ctl", "//protocols/p4runtime/api:onos-protocols-p4runtime-api", "//protocols/p4runtime/proto:onos-protocols-p4runtime-proto", + "//protocols/p4runtime/utils:onos-protocols-p4runtime-utils", "//deps:com_google_protobuf_protobuf_java", "//deps:io_grpc_grpc_api_context", "//deps:io_grpc_grpc_netty", diff --git a/protocols/p4runtime/utils/BUILD b/protocols/p4runtime/utils/BUILD new file mode 100644 index 00000000000..a521bbbf8bf --- /dev/null +++ b/protocols/p4runtime/utils/BUILD @@ -0,0 +1,8 @@ +COMPILE_DEPS = CORE_DEPS + [ + "//protocols/p4runtime/proto:onos-protocols-p4runtime-proto", + "//deps:com_google_protobuf_protobuf_java", +] + +osgi_jar_with_tests( + deps = COMPILE_DEPS, +) diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractEntityCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractEntityCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractEntityCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/AbstractEntityCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileGroupCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileGroupCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileGroupCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileGroupCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileMemberCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileMemberCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileMemberCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionProfileMemberCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CloneSessionEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CloneSessionEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CloneSessionEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CloneSessionEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CodecException.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CodecException.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CodecException.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CodecException.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/Codecs.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Codecs.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/Codecs.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Codecs.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CounterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CounterEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/CounterEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/CounterEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectCounterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectCounterEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectCounterEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectCounterEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/EntityCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/EntityCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/EntityCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/EntityCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/HandleCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/HandleCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/HandleCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/HandleCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/MulticastGroupEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MulticastGroupEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/MulticastGroupEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MulticastGroupEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/P4DataCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/P4DataCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/P4DataCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/P4DataCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketInCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketInCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketInCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketInCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketOutCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketOutCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketOutCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketOutCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/TableEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/TableEntryCodec.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/TableEntryCodec.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/TableEntryCodec.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/package-info.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/package-info.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/codec/package-info.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/package-info.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/PipeconfHelper.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/PipeconfHelper.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/PipeconfHelper.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/PipeconfHelper.java diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/package-info.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/package-info.java similarity index 100% rename from protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/utils/package-info.java rename to protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/package-info.java diff --git a/tools/build/publish-target-list b/tools/build/publish-target-list index 50d46f8acdb..09490fb200b 100644 --- a/tools/build/publish-target-list +++ b/tools/build/publish-target-list @@ -26,6 +26,7 @@ //protocols/bgp/bgpio:onos-protocols-bgp-bgpio //protocols/grpc/api:onos-protocols-grpc-api //protocols/p4runtime/api:onos-protocols-p4runtime-api + //protocols/p4runtime/utils:onos-protocols-p4runtime-utils //protocols/p4runtime/model:onos-protocols-p4runtime-model //protocols/p4runtime/proto:onos-protocols-p4runtime-proto //protocols/grpc/utils:onos-protocols-grpc-utils From b1f5cfd9c89bbe3a126eb3a413641cbd70680f9e Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 4 Dec 2020 16:54:24 -0800 Subject: [PATCH 009/235] Fabric.p4 cherry-picks from onos-2.2 Publish fabric.p4 constants with fabric-api artifact For consumption by third-party apps who wish to operate directly on fabric.p4 tables and other entities. (cherry picked from commit 8f6b5cdabf7828f6f7c017f288aad87c7bd0911a) Backport fabric-tna dbuf support to v1model (cherry picked from commit 4d1d67fa3abb4d7517e5836fbb82c899acffa951) Update SPGW p4 namespace to match fabric-tna (cherry picked from commit 35e4d196eb61104e7f96c62361a100bb454ee1cf) Change-Id: I3230a508a601180060e1041d4369a54f519658e1 --- .../pipelines/fabric}/FabricConstants.java | 62 +- .../impl/behaviour/FabricCapabilities.java | 1 + .../impl/behaviour/FabricIntProgrammable.java | 1 + .../impl/behaviour/FabricInterpreter.java | 1 + .../FabricPortStatisticsDiscovery.java | 1 + .../behaviour/FabricTreatmentInterpreter.java | 1 + .../behaviour/bng/FabricBngProgrammable.java | 2 +- .../bng/PuntCpuCriterionFactory.java | 2 +- .../FilteringObjectiveTranslator.java | 2 +- .../ForwardingObjectiveTranslator.java | 2 +- .../pipeliner/NextObjectiveTranslator.java | 2 +- .../fabric/impl/src/main/resources/Makefile | 2 +- .../fabric/impl/src/main/resources/fabric.p4 | 8 +- .../main/resources/include/control/spgw.p4 | 327 +- .../impl/src/main/resources/include/define.p4 | 12 +- .../impl/src/main/resources/include/header.p4 | 4 +- .../p4c-out/fabric-bng/bmv2/default/bmv2.json | 24 +- .../fabric-full/bmv2/default/bmv2.json | 5169 ++++++++++------- .../fabric-full/bmv2/default/p4info.txt | 172 +- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 8 +- .../fabric-spgw-int/bmv2/default/bmv2.json | 4640 +++++++++------ .../fabric-spgw-int/bmv2/default/p4info.txt | 172 +- .../fabric-spgw/bmv2/default/bmv2.json | 3995 ++++++++----- .../fabric-spgw/bmv2/default/p4info.txt | 167 +- .../p4c-out/fabric/bmv2/default/bmv2.json | 4 +- .../impl/behaviour/FabricInterpreterTest.java | 1 + .../FabricFilteringPipelinerTest.java | 2 +- .../FabricForwardingPipelineTest.java | 2 +- .../pipeliner/FabricNextPipelinerTest.java | 2 +- 29 files changed, 9119 insertions(+), 5669 deletions(-) rename pipelines/fabric/{impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour => api/src/main/java/org/onosproject/pipelines/fabric}/FabricConstants.java (90%) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java similarity index 90% rename from pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java rename to pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index b8a3143e97c..05bf7cfa7c4 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java +++ b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.onosproject.pipelines.fabric.impl.behaviour; +package org.onosproject.pipelines.fabric; import org.onosproject.net.pi.model.PiActionId; import org.onosproject.net.pi.model.PiActionParamId; @@ -111,24 +111,22 @@ private FabricConstants() { PiTableId.of("FabricIngress.next.hashed"); public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_T_LINE_MAP = PiTableId.of("FabricIngress.bng_ingress.t_line_map"); - public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_FAR_LOOKUP = - PiTableId.of("FabricIngress.spgw_ingress.far_lookup"); public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT = PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_insert"); + public static final PiTableId FABRIC_INGRESS_SPGW_UPLINK_PDRS = + PiTableId.of("FabricIngress.spgw.uplink_pdrs"); + public static final PiTableId FABRIC_INGRESS_SPGW_INTERFACES = + PiTableId.of("FabricIngress.spgw.interfaces"); public static final PiTableId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER = PiTableId.of("FabricIngress.filtering.fwd_classifier"); public static final PiTableId FABRIC_INGRESS_NEXT_XCONNECT = PiTableId.of("FabricIngress.next.xconnect"); public static final PiTableId FABRIC_INGRESS_NEXT_NEXT_VLAN = PiTableId.of("FabricIngress.next.next_vlan"); - public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_DOWNLINK_PDR_LOOKUP = - PiTableId.of("FabricIngress.spgw_ingress.downlink_pdr_lookup"); public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE = PiTableId.of("FabricIngress.next.simple"); public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST = PiTableId.of("FabricIngress.next.multicast"); - public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_UPLINK_PDR_LOOKUP = - PiTableId.of("FabricIngress.spgw_ingress.uplink_pdr_lookup"); public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE = PiTableId.of("FabricEgress.process_int_main.process_int_source.tb_int_source"); public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V6 = @@ -151,8 +149,8 @@ private FabricConstants() { PiTableId.of("FabricIngress.forwarding.bridging"); public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_LINE_SESSION_MAP = PiTableId.of("FabricIngress.bng_ingress.downstream.t_line_session_map"); - public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_INTERFACE_LOOKUP = - PiTableId.of("FabricIngress.spgw_ingress.interface_lookup"); + public static final PiTableId FABRIC_INGRESS_SPGW_FARS = + PiTableId.of("FabricIngress.spgw.fars"); public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN = PiTableId.of("FabricEgress.egress_next.egress_vlan"); public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK = @@ -165,13 +163,15 @@ private FabricConstants() { PiTableId.of("FabricIngress.bng_ingress.downstream.t_qos_v6"); public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_QOS_V4 = PiTableId.of("FabricIngress.bng_ingress.downstream.t_qos_v4"); + public static final PiTableId FABRIC_INGRESS_SPGW_DOWNLINK_PDRS = + PiTableId.of("FabricIngress.spgw.downlink_pdrs"); // Indirect Counter IDs - public static final PiCounterId FABRIC_EGRESS_SPGW_EGRESS_PDR_COUNTER = - PiCounterId.of("FabricEgress.spgw_egress.pdr_counter"); - public static final PiCounterId FABRIC_INGRESS_SPGW_INGRESS_PDR_COUNTER = - PiCounterId.of("FabricIngress.spgw_ingress.pdr_counter"); + public static final PiCounterId FABRIC_EGRESS_SPGW_PDR_COUNTER = + PiCounterId.of("FabricEgress.spgw.pdr_counter"); public static final PiCounterId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_C_LINE_TX = PiCounterId.of("FabricEgress.bng_egress.downstream.c_line_tx"); + public static final PiCounterId FABRIC_INGRESS_SPGW_PDR_COUNTER = + PiCounterId.of("FabricIngress.spgw.pdr_counter"); public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER = PiCounterId.of("FabricIngress.port_counters_control.egress_port_counter"); public static final PiCounterId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_C_DROPPED = @@ -216,8 +216,6 @@ private FabricConstants() { public static final PiCounterId FABRIC_INGRESS_FORWARDING_MPLS_COUNTER = PiCounterId.of("FabricIngress.forwarding.mpls_counter"); // Action IDs - public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 = - PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_NEXT_ID_XCONNECT = PiActionId.of("FabricIngress.next.set_next_id_xconnect"); public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4 = @@ -236,6 +234,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.next.set_double_vlan"); public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA = PiActionId.of("FabricEgress.process_int_main.process_int_transit.init_metadata"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR = + PiActionId.of("FabricIngress.spgw.load_dbuf_far"); public static final PiActionId FABRIC_INGRESS_ACL_DROP = PiActionId.of("FabricIngress.acl.drop"); public static final PiActionId FABRIC_INGRESS_ACL_SET_CLONE_SESSION_ID = @@ -244,14 +244,12 @@ private FabricConstants() { PiActionId.of("FabricIngress.bng_ingress.upstream.punt_to_cpu"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_DROP = PiActionId.of("FabricIngress.bng_ingress.downstream.drop"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_SET_PDR_ATTRIBUTES = - PiActionId.of("FabricIngress.spgw_ingress.set_pdr_attributes"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR = + PiActionId.of("FabricIngress.spgw.load_normal_far"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN = PiActionId.of("FabricIngress.next.set_vlan"); public static final PiActionId FABRIC_INGRESS_ACL_NOP_ACL = PiActionId.of("FabricIngress.acl.nop_acl"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_LOAD_NORMAL_FAR_ATTRIBUTES = - PiActionId.of("FabricIngress.spgw_ingress.load_normal_far_attributes"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_SET_LINE = PiActionId.of("FabricIngress.bng_ingress.set_line"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_DISABLED = @@ -260,20 +258,20 @@ private FabricConstants() { PiActionId.of("FabricIngress.acl.set_next_id_acl"); public static final PiActionId FABRIC_INGRESS_FILTERING_PERMIT = PiActionId.of("FabricIngress.filtering.permit"); + public static final PiActionId FABRIC_INGRESS_SPGW_IFACE_MISS = + PiActionId.of("FabricIngress.spgw.iface_miss"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4 = PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v4"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6 = PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v6"); public static final PiActionId FABRIC_INGRESS_NEXT_ROUTING_SIMPLE = PiActionId.of("FabricIngress.next.routing_simple"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_DECAP_INNER_TCP = - PiActionId.of("FabricIngress.spgw_ingress.decap_inner_tcp"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_DECAP_INNER_ICMP = - PiActionId.of("FabricIngress.spgw_ingress.decap_inner_icmp"); + public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 = + PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_HASHED = PiActionId.of("FabricIngress.next.output_hashed"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_DECAP_INNER_UDP = - PiActionId.of("FabricIngress.spgw_ingress.decap_inner_udp"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_IFACE = + PiActionId.of("FabricIngress.spgw.load_iface"); public static final PiActionId FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT = PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next"); public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V6 = @@ -284,6 +282,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.acl.punt_to_cpu"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_PRIO = PiActionId.of("FabricIngress.bng_ingress.downstream.qos_prio"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_PDR = + PiActionId.of("FabricIngress.spgw.load_pdr"); public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = PiActionId.of("FabricEgress.egress_next.pop_vlan"); public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK = @@ -294,17 +294,15 @@ private FabricConstants() { PiActionId.of("FabricIngress.bng_ingress.upstream.term_enabled_v6"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_ENABLED_V4 = PiActionId.of("FabricIngress.bng_ingress.upstream.term_enabled_v4"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_DECAP_INNER_UNKNOWN = - PiActionId.of("FabricIngress.spgw_ingress.decap_inner_unknown"); public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE = PiActionId.of("FabricIngress.process_set_source_sink.int_set_source"); public static final PiActionId NOP = PiActionId.of("nop"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE = PiActionId.of("FabricIngress.next.output_simple"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_SET_SOURCE_IFACE = - PiActionId.of("FabricIngress.spgw_ingress.set_source_iface"); public static final PiActionId FABRIC_INGRESS_FILTERING_DENY = PiActionId.of("FabricIngress.filtering.deny"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR = + PiActionId.of("FabricIngress.spgw.load_tunnel_far"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_SET_SESSION = PiActionId.of("FabricIngress.bng_ingress.downstream.set_session"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP_ID = @@ -316,8 +314,6 @@ private FabricConstants() { public static final PiActionId NO_ACTION = PiActionId.of("NoAction"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_XCONNECT = PiActionId.of("FabricIngress.next.output_xconnect"); - public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_LOAD_TUNNEL_FAR_ATTRIBUTES = - PiActionId.of("FabricIngress.spgw_ingress.load_tunnel_far_attributes"); // Action Param IDs public static final PiActionParamId DMAC = PiActionParamId.of("dmac"); public static final PiActionParamId MON_PORT = @@ -339,16 +335,12 @@ private FabricConstants() { PiActionParamId.of("tunnel_src_port"); public static final PiActionParamId LABEL = PiActionParamId.of("label"); public static final PiActionParamId SRC_IP = PiActionParamId.of("src_ip"); - public static final PiActionParamId SKIP_SPGW = - PiActionParamId.of("skip_spgw"); public static final PiActionParamId MON_MAC = PiActionParamId.of("mon_mac"); public static final PiActionParamId NEXT_ID = PiActionParamId.of("next_id"); public static final PiActionParamId INS_CNT = PiActionParamId.of("ins_cnt"); public static final PiActionParamId SRC_MAC = PiActionParamId.of("src_mac"); public static final PiActionParamId INNER_VLAN_ID = PiActionParamId.of("inner_vlan_id"); - public static final PiActionParamId DIRECTION = - PiActionParamId.of("direction"); public static final PiActionParamId PPPOE_SESSION_ID = PiActionParamId.of("pppoe_session_id"); public static final PiActionParamId CTR_ID = PiActionParamId.of("ctr_id"); diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java index 19b32068640..2eb947d0a53 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java @@ -17,6 +17,7 @@ package org.onosproject.pipelines.fabric.impl.behaviour; import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.pipelines.fabric.FabricConstants; import org.slf4j.Logger; import java.io.BufferedReader; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java index c5fa272908c..7f9e35efe06 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java @@ -42,6 +42,7 @@ import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; +import org.onosproject.pipelines.fabric.FabricConstants; import org.onosproject.pipelines.fabric.impl.FabricPipeconfLoader; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java index 816c0dd9265..9d19e00b8ab 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java @@ -40,6 +40,7 @@ import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiPacketMetadata; import org.onosproject.net.pi.runtime.PiPacketOperation; +import org.onosproject.pipelines.fabric.FabricConstants; import java.nio.ByteBuffer; import java.util.Collection; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java index b461ad39338..219e3707827 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java @@ -19,6 +19,7 @@ import org.onosproject.net.pi.model.PiCounterId; import org.onosproject.pipelines.basic.PortStatisticsDiscoveryImpl; +import org.onosproject.pipelines.fabric.FabricConstants; /** * Implementation of the PortStatisticsBehaviour for fabric.p4. diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java index 78ef9a740de..21ff675b012 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java @@ -31,6 +31,7 @@ import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.List; import java.util.stream.Collectors; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/FabricBngProgrammable.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/FabricBngProgrammable.java index 1a08e735060..219107154dd 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/FabricBngProgrammable.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/FabricBngProgrammable.java @@ -46,7 +46,7 @@ import org.onosproject.net.pi.runtime.PiExactFieldMatch; import org.onosproject.p4runtime.api.P4RuntimeWriteClient; import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.Collection; import java.util.List; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/PuntCpuCriterionFactory.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/PuntCpuCriterionFactory.java index ff405632413..8f63fe4db3e 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/PuntCpuCriterionFactory.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/bng/PuntCpuCriterionFactory.java @@ -19,7 +19,7 @@ import com.google.common.collect.ImmutableList; import org.onosproject.net.flow.criteria.Criterion; import org.onosproject.net.flow.criteria.PiCriterion; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.Set; import java.util.stream.Collectors; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java index ae97a549810..162bb1e5ebc 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java @@ -40,7 +40,7 @@ import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils; import java.util.Collection; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java index 2cb7ba57fbf..0ab5beba73b 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java @@ -48,7 +48,7 @@ import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.List; import java.util.Map; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java index fb08d07481d..1e0e52d1667 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java @@ -47,7 +47,7 @@ import org.onosproject.net.pi.runtime.PiActionProfileGroupId; import org.onosproject.net.pi.runtime.PiGroupKey; import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils; import java.util.Collection; diff --git a/pipelines/fabric/impl/src/main/resources/Makefile b/pipelines/fabric/impl/src/main/resources/Makefile index 5353342eda4..11cdba97fef 100644 --- a/pipelines/fabric/impl/src/main/resources/Makefile +++ b/pipelines/fabric/impl/src/main/resources/Makefile @@ -26,7 +26,7 @@ ifndef ONOS_ROOT endif docker run -v $(ONOS_ROOT):/onos -w /onos/tools/dev/bin \ --entrypoint ./onos-gen-p4-constants opennetworking/p4mn:stable \ - -o /onos/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java \ + -o /onos/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java \ fabric /onos/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt clean: diff --git a/pipelines/fabric/impl/src/main/resources/fabric.p4 b/pipelines/fabric/impl/src/main/resources/fabric.p4 index 9f6b27d489d..ad3857d05b1 100644 --- a/pipelines/fabric/impl/src/main/resources/fabric.p4 +++ b/pipelines/fabric/impl/src/main/resources/fabric.p4 @@ -56,14 +56,14 @@ control FabricIngress (inout parsed_headers_t hdr, PortCountersControl() port_counters_control; #endif // WITH_PORT_COUNTER #ifdef WITH_SPGW - SpgwIngress() spgw_ingress; + SpgwIngress() spgw; #endif // WITH_SPGW apply { _PRE_INGRESS pkt_io_ingress.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_SPGW - spgw_ingress.apply(hdr, fabric_metadata, standard_metadata); + spgw.apply(hdr, fabric_metadata, standard_metadata); #endif // WITH_SPGW filtering.apply(hdr, fabric_metadata, standard_metadata); if (fabric_metadata.skip_forwarding == _FALSE) { @@ -95,7 +95,7 @@ control FabricEgress (inout parsed_headers_t hdr, PacketIoEgress() pkt_io_egress; EgressNextControl() egress_next; #ifdef WITH_SPGW - SpgwEgress() spgw_egress; + SpgwEgress() spgw; #endif // WITH_SPGW apply { @@ -103,7 +103,7 @@ control FabricEgress (inout parsed_headers_t hdr, pkt_io_egress.apply(hdr, fabric_metadata, standard_metadata); egress_next.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_SPGW - spgw_egress.apply(hdr, fabric_metadata); + spgw.apply(hdr, fabric_metadata); #endif // WITH_SPGW #ifdef WITH_BNG bng_egress.apply(hdr, fabric_metadata, standard_metadata); diff --git a/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 b/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 index 34a88b8bec4..00bfd948800 100644 --- a/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 @@ -30,37 +30,113 @@ #define MAX_PDR_COUNTERS 2 * MAX_UES #define MAX_FARS 2 * MAX_UES +control DecapGtpu(inout parsed_headers_t hdr, + inout fabric_metadata_t fabric_md) { + @hidden + action decap_inner_common() { + // Correct parser-set metadata to use the inner header values + fabric_md.ip_eth_type = ETHERTYPE_IPV4; + fabric_md.ip_proto = hdr.inner_ipv4.protocol; + fabric_md.ipv4_src_addr = hdr.inner_ipv4.src_addr; + fabric_md.ipv4_dst_addr = hdr.inner_ipv4.dst_addr; + fabric_md.l4_sport = fabric_md.inner_l4_sport; + fabric_md.l4_dport = fabric_md.inner_l4_dport; + // Move GTPU and inner L3 headers out + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.gtpu.setInvalid(); + } + @hidden + action decap_inner_tcp() { + decap_inner_common(); + hdr.udp.setInvalid(); + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + } + @hidden + action decap_inner_udp() { + decap_inner_common(); + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @hidden + action decap_inner_icmp() { + decap_inner_common(); + hdr.udp.setInvalid(); + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + } + @hidden + action decap_inner_unknown() { + decap_inner_common(); + hdr.udp.setInvalid(); + } + @hidden + table decap_gtpu { + key = { + hdr.inner_tcp.isValid() : exact; + hdr.inner_udp.isValid() : exact; + hdr.inner_icmp.isValid() : exact; + } + actions = { + decap_inner_tcp; + decap_inner_udp; + decap_inner_icmp; + decap_inner_unknown; + } + const default_action = decap_inner_unknown; + const entries = { + (true, false, false) : decap_inner_tcp(); + (false, true, false) : decap_inner_udp(); + (false, false, true) : decap_inner_icmp(); + } + size = 4; + } + apply { + decap_gtpu.apply(); + } +} control SpgwIngress(inout parsed_headers_t hdr, inout fabric_metadata_t fabric_md, inout standard_metadata_t standard_metadata) { + //=============================// + //===== Misc Things ======// + //=============================// + + counter(MAX_PDR_COUNTERS, CounterType.packets_and_bytes) pdr_counter; + DecapGtpu() decap_gtpu_from_dbuf; + DecapGtpu() decap_gtpu; //=============================// //===== Interface Tables ======// //=============================// - action set_source_iface(spgw_interface_t src_iface, direction_t direction, - bit<1> skip_spgw) { - // Interface type can be access, core, n6_lan, etc (see InterfaceType enum) - // If interface is from the control plane, direction can be either up or down + action load_iface(spgw_interface_t src_iface) { + // Interface type can be access, core, from_dbuf (see InterfaceType enum) fabric_md.spgw.src_iface = src_iface; - fabric_md.spgw.direction = direction; - fabric_md.spgw.skip_spgw = (_BOOL)skip_spgw; + fabric_md.spgw.skip_spgw = _FALSE; + } + action iface_miss() { + fabric_md.spgw.src_iface = SPGW_IFACE_UNKNOWN; + fabric_md.spgw.skip_spgw = _TRUE; } + // TODO: check also that gtpu.msgtype == GTP_GPDU... somewhere - table interface_lookup { + table interfaces { key = { hdr.ipv4.dst_addr : lpm @name("ipv4_dst_addr"); // outermost header hdr.gtpu.isValid() : exact @name("gtpu_is_valid"); } actions = { - set_source_iface; + load_iface; + @defaultonly iface_miss; } - const default_action = set_source_iface(SPGW_IFACE_UNKNOWN, SPGW_DIR_UNKNOWN, 1); + const default_action = iface_miss(); size = MAX_INTERFACES; } @@ -69,83 +145,57 @@ control SpgwIngress(inout parsed_headers_t hdr, //===== PDR Tables ======// //=============================// - action set_pdr_attributes(pdr_ctr_id_t ctr_id, - far_id_t far_id, - bit<1> needs_gtpu_decap) { - fabric_md.spgw.pdr_hit = _TRUE; + action load_pdr(pdr_ctr_id_t ctr_id, + far_id_t far_id, + bit<1> needs_gtpu_decap) { fabric_md.spgw.ctr_id = ctr_id; fabric_md.spgw.far_id = far_id; fabric_md.spgw.needs_gtpu_decap = (_BOOL)needs_gtpu_decap; } // These two tables scale well and cover the average case PDR - table downlink_pdr_lookup { + table downlink_pdrs { key = { // only available ipv4 header hdr.ipv4.dst_addr : exact @name("ue_addr"); } actions = { - set_pdr_attributes; + load_pdr; } - const default_action = set_pdr_attributes(DEFAULT_PDR_CTR_ID, DEFAULT_FAR_ID, 0); size = MAX_DOWNLINK_PDRS; } - table uplink_pdr_lookup { + + table uplink_pdrs { key = { hdr.ipv4.dst_addr : exact @name("tunnel_ipv4_dst"); hdr.gtpu.teid : exact @name("teid"); } actions = { - set_pdr_attributes; + load_pdr; } - const default_action = set_pdr_attributes(DEFAULT_PDR_CTR_ID, DEFAULT_FAR_ID, 0); size = MAX_UPLINK_PDRS; } - // This table scales poorly and covers uncommon PDRs - table flexible_pdr_lookup { - key = { - fabric_md.spgw.src_iface : ternary @name("src_iface"); - // GTPU - hdr.gtpu.isValid() : ternary @name("gtpu_is_valid"); - hdr.gtpu.teid : ternary @name("teid"); - // SDF - // outer 5-tuple - hdr.ipv4.src_addr : ternary @name("ipv4_src"); - hdr.ipv4.dst_addr : ternary @name("ipv4_dst"); - hdr.ipv4.protocol : ternary @name("ip_proto"); - fabric_md.l4_sport : ternary @name("l4_sport"); - fabric_md.l4_dport : ternary @name("l4_dport"); - // inner 5-tuple - hdr.inner_ipv4.src_addr : ternary @name("inner_ipv4_src"); - hdr.inner_ipv4.dst_addr : ternary @name("inner_ipv4_dst"); - hdr.inner_ipv4.protocol : ternary @name("inner_ip_proto"); - fabric_md.inner_l4_sport : ternary @name("inner_l4_sport"); - fabric_md.inner_l4_dport : ternary @name("inner_l4_dport"); - } - actions = { - set_pdr_attributes; - } - const default_action = set_pdr_attributes(DEFAULT_PDR_CTR_ID, DEFAULT_FAR_ID, 0); - } //=============================// //===== FAR Tables ======// //=============================// - action load_normal_far_attributes(bit<1> drop, - bit<1> notify_cp) { + action load_normal_far(bit<1> drop, + bit<1> notify_cp) { // general far attributes - fabric_md.spgw.far_dropped = (_BOOL)drop; + fabric_md.skip_forwarding = (_BOOL)drop; + fabric_md.skip_next = (_BOOL)drop; fabric_md.spgw.notify_spgwc = (_BOOL)notify_cp; } - action load_tunnel_far_attributes(bit<1> drop, - bit<1> notify_cp, - bit<16> tunnel_src_port, - bit<32> tunnel_src_addr, - bit<32> tunnel_dst_addr, - teid_t teid) { + action load_tunnel_far(bit<1> drop, + bit<1> notify_cp, + bit<16> tunnel_src_port, + bit<32> tunnel_src_addr, + bit<32> tunnel_dst_addr, + teid_t teid) { // general far attributes - fabric_md.spgw.far_dropped = (_BOOL)drop; + fabric_md.skip_forwarding = (_BOOL)drop; + fabric_md.skip_next = (_BOOL)drop; fabric_md.spgw.notify_spgwc = (_BOOL)notify_cp; // GTP tunnel attributes fabric_md.spgw.needs_gtpu_encap = _TRUE; @@ -160,82 +210,31 @@ control SpgwIngress(inout parsed_headers_t hdr, fabric_md.l4_dport = UDP_PORT_GTPU; } - table far_lookup { + action load_dbuf_far(bit<1> drop, + bit<1> notify_cp, + bit<16> tunnel_src_port, + bit<32> tunnel_src_addr, + bit<32> tunnel_dst_addr, + teid_t teid) { + load_tunnel_far(drop, notify_cp, tunnel_src_port, + tunnel_src_addr, tunnel_dst_addr, teid); + fabric_md.spgw.skip_egress_pdr_ctr = _TRUE; + } + + table fars { key = { fabric_md.spgw.far_id : exact @name("far_id"); } actions = { - load_normal_far_attributes; - load_tunnel_far_attributes; + load_normal_far; + load_tunnel_far; + load_dbuf_far; } // default is drop and don't notify CP - const default_action = load_normal_far_attributes(1, 1); + const default_action = load_normal_far(1, 0); size = MAX_FARS; } - //=============================// - //===== Misc Things ======// - //=============================// - - counter(MAX_PDR_COUNTERS, CounterType.packets_and_bytes) pdr_counter; - - - @hidden - action decap_inner_common() { - // Correct parser-set metadata to use the inner header values - fabric_md.ip_eth_type = ETHERTYPE_IPV4; - fabric_md.ip_proto = hdr.inner_ipv4.protocol; - fabric_md.ipv4_src_addr = hdr.inner_ipv4.src_addr; - fabric_md.ipv4_dst_addr = hdr.inner_ipv4.dst_addr; - fabric_md.l4_sport = fabric_md.inner_l4_sport; - fabric_md.l4_dport = fabric_md.inner_l4_dport; - // Move GTPU and inner L3 headers out - hdr.ipv4 = hdr.inner_ipv4; - hdr.inner_ipv4.setInvalid(); - hdr.gtpu.setInvalid(); - } - action decap_inner_tcp() { - decap_inner_common(); - hdr.udp.setInvalid(); - hdr.tcp = hdr.inner_tcp; - hdr.inner_tcp.setInvalid(); - } - action decap_inner_udp() { - decap_inner_common(); - hdr.udp = hdr.inner_udp; - hdr.inner_udp.setInvalid(); - } - action decap_inner_icmp() { - decap_inner_common(); - hdr.udp.setInvalid(); - hdr.icmp = hdr.inner_icmp; - hdr.inner_icmp.setInvalid(); - } - action decap_inner_unknown() { - decap_inner_common(); - hdr.udp.setInvalid(); - } - @hidden - table decap_gtpu { - key = { - hdr.inner_tcp.isValid() : exact; - hdr.inner_udp.isValid() : exact; - hdr.inner_icmp.isValid() : exact; - } - actions = { - decap_inner_tcp; - decap_inner_udp; - decap_inner_icmp; - decap_inner_unknown; - } - const default_action = decap_inner_unknown; - const entries = { - (true, false, false) : decap_inner_tcp(); - (false, true, false) : decap_inner_udp(); - (false, false, true) : decap_inner_icmp(); - } - } - //=============================// //===== Apply Block ======// @@ -243,50 +242,36 @@ control SpgwIngress(inout parsed_headers_t hdr, apply { // Interfaces - interface_lookup.apply(); - - // If interface table missed, or the interface skips PDRs/FARs (TODO: is that a thing?) - if (fabric_md.spgw.skip_spgw == _TRUE) return; - - // PDRs - // Currently only best-case PDR tables to make v1model-to-tofino compiler happy - if (hdr.gtpu.isValid()) { - uplink_pdr_lookup.apply(); - } else { - downlink_pdr_lookup.apply(); - } - // Inefficient PDR table if efficient tables missed - // Removed to make v1model-to-tofino compiler happy. Not removed in TNA port - //if (fabric_md.spgw.pdr_hit == _FALSE) { - // flexible_pdr_lookup.apply(); - //} - pdr_counter.count(fabric_md.spgw.ctr_id); - - // GTPU Decapsulate - if (fabric_md.spgw.needs_gtpu_decap == _TRUE) { - decap_gtpu.apply(); - } - - // FARs - // Load FAR info - far_lookup.apply(); - - if (fabric_md.spgw.notify_spgwc == _TRUE) { - // TODO: cpu clone action here + if (interfaces.apply().hit) { + if (fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF) { + decap_gtpu_from_dbuf.apply(hdr, fabric_md); + } + // PDRs + if (hdr.gtpu.isValid()) { + uplink_pdrs.apply(); + } else { + downlink_pdrs.apply(); + } + if (fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF) { + pdr_counter.count(fabric_md.spgw.ctr_id); + } + + // GTPU Decapsulate + if (fabric_md.spgw.needs_gtpu_decap == _TRUE) { + decap_gtpu.apply(hdr, fabric_md); + } + + // FARs + // Load FAR info + fars.apply(); + + // Nothing to be done immediately for forwarding or encapsulation. + // Forwarding is done by other parts of fabric.p4, and + // encapsulation is done in the egress + + // Needed for correct GTPU encapsulation in egress + fabric_md.spgw.ipv4_len = hdr.ipv4.total_len; } - if (fabric_md.spgw.far_dropped == _TRUE) { - // Do dropping in the same way as fabric's filtering.p4, so we can traverse - // the ACL table, which is good for cases like DHCP. - fabric_md.skip_forwarding = _TRUE; - fabric_md.skip_next = _TRUE; - } - - // Nothing to be done immediately for forwarding or encapsulation. - // Forwarding is done by other parts of fabric.p4, and - // encapsulation is done in the egress - - // Needed for correct GTPU encapsulation in egress - fabric_md.spgw.ipv4_len = hdr.ipv4.total_len; } } @@ -340,11 +325,13 @@ control SpgwEgress( } apply { - if (fabric_md.spgw.skip_spgw == _TRUE) return; - pdr_counter.count(fabric_md.spgw.ctr_id); - - if (fabric_md.spgw.needs_gtpu_encap == _TRUE) { - gtpu_encap(); + if (fabric_md.spgw.skip_spgw == _FALSE) { + if (fabric_md.spgw.needs_gtpu_encap == _TRUE) { + gtpu_encap(); + } + if (fabric_md.spgw.skip_egress_pdr_ctr == _FALSE) { + pdr_counter.count(fabric_md.spgw.ctr_id); + } } } } diff --git a/pipelines/fabric/impl/src/main/resources/include/define.p4 b/pipelines/fabric/impl/src/main/resources/include/define.p4 index bfb7b449f5c..8b1fd9d2175 100644 --- a/pipelines/fabric/impl/src/main/resources/include/define.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/define.p4 @@ -108,17 +108,7 @@ typedef bit<32> teid_t; const spgw_interface_t SPGW_IFACE_UNKNOWN = 8w0; const spgw_interface_t SPGW_IFACE_ACCESS = 8w1; const spgw_interface_t SPGW_IFACE_CORE = 8w2; -const direction_t SPGW_DIR_UNKNOWN = 2w0; -const direction_t SPGW_DIR_UPLINK = 2w1; -const direction_t SPGW_DIR_DOWNLINK = 2w2; - -#ifndef S1U_SGW_PREFIX -// By default spgw.p4 expects uplink packets with IP dst matching 140.0.0.0/8 -// FIXME: refactor pipeline to remove dependency on this value or allow setting it at runtime -// (e.g. via parser value sets) -#define S1U_SGW_PREFIX (8w140++8w0++8w0++8w0) -#define S1U_SGW_PREFIX_LEN 8 -#endif +const spgw_interface_t SPGW_IFACE_FROM_DBUF = 8w3; const bit<16> ETHERTYPE_QINQ = 0x88A8; const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100; diff --git a/pipelines/fabric/impl/src/main/resources/include/header.p4 b/pipelines/fabric/impl/src/main/resources/include/header.p4 index 17b36fec512..9dc61020834 100644 --- a/pipelines/fabric/impl/src/main/resources/include/header.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/header.p4 @@ -139,7 +139,6 @@ header gtpu_t { } struct spgw_meta_t { - direction_t direction; bit<16> ipv4_len; teid_t teid; bit<16> tunnel_src_port; @@ -149,11 +148,10 @@ struct spgw_meta_t { far_id_t far_id; spgw_interface_t src_iface; _BOOL skip_spgw; - _BOOL pdr_hit; - _BOOL far_dropped; _BOOL notify_spgwc; _BOOL needs_gtpu_encap; _BOOL needs_gtpu_decap; + _BOOL skip_egress_pdr_ctr; } #endif // WITH_SPGW diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json index 5e458c208d5..a44e179f305 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json @@ -1435,7 +1435,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 161, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -1476,7 +1476,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -1541,7 +1541,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 163, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -1605,7 +1605,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 163, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -2963,7 +2963,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 164, + "line" : 162, "column" : 37, "source_fragment" : "2w0x1; ..." } @@ -3200,7 +3200,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 122, "column" : 33, "source_fragment" : "0x8864; ..." } @@ -3371,7 +3371,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 134, + "line" : 124, "column" : 35, "source_fragment" : "0x0021; ..." } @@ -3529,7 +3529,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3608,7 +3608,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -3706,7 +3706,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -3823,7 +3823,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -3842,7 +3842,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 560e3e91cbc..2cca7f842e9 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -5,19 +5,18 @@ "id" : 0, "fields" : [ ["last_ipv4_dscp_0", 6, false], - ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 4, false], + ["tmp_2", 16, false], + ["tmp_3", 4, false], ["tmp", 32, false], - ["tmp_3", 32, false], + ["tmp_0", 32, false], ["tmp_4", 32, false], ["bng_ingress_upstream_tmp", 1, false], ["bng_ingress_downstream_tmp", 1, false], - ["spgw_ingress_hasReturned", 1, false], + ["spgw_tmp", 1, false], ["bng_ingress_upstream_hasReturned", 1, false], ["key_0", 64, false], ["egress_next_tmp", 1, false], - ["spgw_egress_hasReturned", 1, false], ["process_int_main_process_int_transit_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], @@ -42,36 +41,34 @@ ["fabric_metadata_t._ipv4_dst_addr20", 32, false], ["fabric_metadata_t._inner_l4_sport21", 16, false], ["fabric_metadata_t._inner_l4_dport22", 16, false], - ["fabric_metadata_t._spgw_direction23", 2, false], - ["fabric_metadata_t._spgw_ipv4_len24", 16, false], - ["fabric_metadata_t._spgw_teid25", 32, false], - ["fabric_metadata_t._spgw_tunnel_src_port26", 16, false], - ["fabric_metadata_t._spgw_tunnel_src_addr27", 32, false], - ["fabric_metadata_t._spgw_tunnel_dst_addr28", 32, false], - ["fabric_metadata_t._spgw_ctr_id29", 32, false], - ["fabric_metadata_t._spgw_far_id30", 32, false], - ["fabric_metadata_t._spgw_src_iface31", 8, false], - ["fabric_metadata_t._spgw_skip_spgw32", 1, false], - ["fabric_metadata_t._spgw_pdr_hit33", 1, false], - ["fabric_metadata_t._spgw_far_dropped34", 1, false], - ["fabric_metadata_t._spgw_notify_spgwc35", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_encap36", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_decap37", 1, false], - ["fabric_metadata_t._bng_type38", 2, false], - ["fabric_metadata_t._bng_line_id39", 32, false], - ["fabric_metadata_t._bng_pppoe_session_id40", 16, false], - ["fabric_metadata_t._bng_ds_meter_result41", 32, false], - ["fabric_metadata_t._bng_s_tag42", 12, false], - ["fabric_metadata_t._bng_c_tag43", 12, false], - ["fabric_metadata_t._int_meta_source44", 1, false], - ["fabric_metadata_t._int_meta_transit45", 1, false], - ["fabric_metadata_t._int_meta_sink46", 1, false], - ["fabric_metadata_t._int_meta_switch_id47", 32, false], - ["fabric_metadata_t._int_meta_new_words48", 8, false], - ["fabric_metadata_t._int_meta_new_bytes49", 16, false], - ["fabric_metadata_t._int_meta_ig_tstamp50", 32, false], - ["fabric_metadata_t._int_meta_eg_tstamp51", 32, false], - ["_padding_0", 6, false] + ["fabric_metadata_t._spgw_ipv4_len23", 16, false], + ["fabric_metadata_t._spgw_teid24", 32, false], + ["fabric_metadata_t._spgw_tunnel_src_port25", 16, false], + ["fabric_metadata_t._spgw_tunnel_src_addr26", 32, false], + ["fabric_metadata_t._spgw_tunnel_dst_addr27", 32, false], + ["fabric_metadata_t._spgw_ctr_id28", 32, false], + ["fabric_metadata_t._spgw_far_id29", 32, false], + ["fabric_metadata_t._spgw_src_iface30", 8, false], + ["fabric_metadata_t._spgw_skip_spgw31", 1, false], + ["fabric_metadata_t._spgw_notify_spgwc32", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_encap33", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_decap34", 1, false], + ["fabric_metadata_t._spgw_skip_egress_pdr_ctr35", 1, false], + ["fabric_metadata_t._bng_type36", 2, false], + ["fabric_metadata_t._bng_line_id37", 32, false], + ["fabric_metadata_t._bng_pppoe_session_id38", 16, false], + ["fabric_metadata_t._bng_ds_meter_result39", 32, false], + ["fabric_metadata_t._bng_s_tag40", 12, false], + ["fabric_metadata_t._bng_c_tag41", 12, false], + ["fabric_metadata_t._int_meta_source42", 1, false], + ["fabric_metadata_t._int_meta_transit43", 1, false], + ["fabric_metadata_t._int_meta_sink44", 1, false], + ["fabric_metadata_t._int_meta_switch_id45", 32, false], + ["fabric_metadata_t._int_meta_new_words46", 8, false], + ["fabric_metadata_t._int_meta_new_bytes47", 16, false], + ["fabric_metadata_t._int_meta_ig_tstamp48", 32, false], + ["fabric_metadata_t._int_meta_eg_tstamp49", 32, false], + ["_padding_0", 2, false] ] }, { @@ -802,7 +799,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -840,7 +837,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -861,7 +858,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_s_tag42"] + "value" : ["scalars", "fabric_metadata_t._bng_s_tag40"] }, { "type" : "field", @@ -874,7 +871,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -900,7 +897,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -921,7 +918,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_c_tag43"] + "value" : ["scalars", "fabric_metadata_t._bng_c_tag41"] }, { "type" : "field", @@ -1087,7 +1084,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] }, { "type" : "lookahead", @@ -1119,7 +1116,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] } ] }, @@ -2018,11 +2015,11 @@ "is_direct" : false }, { - "name" : "FabricIngress.spgw_ingress.pdr_counter", + "name" : "FabricIngress.spgw.pdr_counter", "id" : 19, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 180, + "line" : 109, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2066,11 +2063,11 @@ } }, { - "name" : "FabricEgress.spgw_egress.pdr_counter", + "name" : "FabricEgress.spgw.pdr_counter", "id" : 23, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 301, + "line" : 286, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2146,7 +2143,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -2345,16 +2342,28 @@ "primitives" : [] }, { - "name" : "FabricIngress.process_set_source_sink.int_set_source", + "name" : "NoAction", "id" : 13, "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 14, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.process_set_source_sink.int_set_source", + "id" : 15, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_source44"] + "value" : ["scalars", "fabric_metadata_t._int_meta_source42"] }, { "type" : "expression", @@ -2382,7 +2391,7 @@ }, { "name" : "FabricIngress.process_set_source_sink.int_set_sink", - "id" : 14, + "id" : 16, "runtime_data" : [], "primitives" : [ { @@ -2390,7 +2399,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_sink46"] + "value" : ["scalars", "fabric_metadata_t._int_meta_sink44"] }, { "type" : "expression", @@ -2418,7 +2427,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu", - "id" : 15, + "id" : 17, "runtime_data" : [], "primitives" : [ { @@ -2468,7 +2477,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -2482,7 +2491,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.term_disabled", - "id" : 16, + "id" : 18, "runtime_data" : [], "primitives" : [ { @@ -2490,7 +2499,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, { "type" : "hexstr", @@ -2499,7 +2508,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 161, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -2523,7 +2532,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.term_disabled", - "id" : 17, + "id" : 19, "runtime_data" : [], "primitives" : [ { @@ -2531,7 +2540,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, { "type" : "hexstr", @@ -2540,7 +2549,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 161, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -2564,7 +2573,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4", - "id" : 18, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -2581,7 +2590,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -2610,7 +2619,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -2624,7 +2633,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v6", - "id" : 19, + "id" : 21, "runtime_data" : [], "primitives" : [ { @@ -2641,7 +2650,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 129, + "line" : 119, "column" : 31, "source_fragment" : "0x86dd; ..." } @@ -2670,7 +2679,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -2684,7 +2693,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.set_session", - "id" : 20, + "id" : 22, "runtime_data" : [ { "name" : "pppoe_session_id", @@ -2697,7 +2706,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, { "type" : "hexstr", @@ -2706,7 +2715,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 163, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -2716,7 +2725,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id40"] + "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id38"] }, { "type" : "runtime_data", @@ -2739,7 +2748,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -2753,7 +2762,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.drop", - "id" : 21, + "id" : 23, "runtime_data" : [], "primitives" : [ { @@ -2761,7 +2770,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, { "type" : "hexstr", @@ -2770,7 +2779,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 163, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -2784,7 +2793,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -2813,31 +2822,31 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.qos_prio", - "id" : 22, + "id" : 24, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.bng_ingress.downstream.qos_prio", - "id" : 23, + "id" : 25, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.bng_ingress.downstream.qos_besteff", - "id" : 24, + "id" : 26, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.bng_ingress.downstream.qos_besteff", - "id" : 25, + "id" : 27, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.bng_ingress.set_line", - "id" : 26, + "id" : 28, "runtime_data" : [ { "name" : "line_id", @@ -2850,7 +2859,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] }, { "type" : "runtime_data", @@ -2868,7 +2877,7 @@ }, { "name" : "FabricIngress.filtering.deny", - "id" : 27, + "id" : 29, "runtime_data" : [], "primitives" : [ { @@ -2933,13 +2942,13 @@ }, { "name" : "FabricIngress.filtering.permit", - "id" : 28, + "id" : 30, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.filtering.permit_with_internal_vlan", - "id" : 29, + "id" : 31, "runtime_data" : [ { "name" : "vlan_id", @@ -2970,7 +2979,7 @@ }, { "name" : "FabricIngress.filtering.set_forwarding_type", - "id" : 30, + "id" : 32, "runtime_data" : [ { "name" : "fwd_type", @@ -3001,7 +3010,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_bridging", - "id" : 31, + "id" : 33, "runtime_data" : [ { "name" : "next_id", @@ -3032,7 +3041,7 @@ }, { "name" : "FabricIngress.forwarding.pop_mpls_and_next", - "id" : 32, + "id" : 34, "runtime_data" : [ { "name" : "next_id", @@ -3082,7 +3091,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v4", - "id" : 33, + "id" : 35, "runtime_data" : [ { "name" : "next_id", @@ -3113,13 +3122,13 @@ }, { "name" : "FabricIngress.forwarding.nop_routing_v4", - "id" : 34, + "id" : 36, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v6", - "id" : 35, + "id" : 37, "runtime_data" : [ { "name" : "next_id", @@ -3150,7 +3159,7 @@ }, { "name" : "FabricIngress.acl.set_next_id_acl", - "id" : 36, + "id" : 38, "runtime_data" : [ { "name" : "next_id", @@ -3181,7 +3190,7 @@ }, { "name" : "FabricIngress.acl.punt_to_cpu", - "id" : 37, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -3236,7 +3245,7 @@ }, { "name" : "FabricIngress.acl.set_clone_session_id", - "id" : 38, + "id" : 40, "runtime_data" : [ { "name" : "clone_id", @@ -3267,7 +3276,7 @@ }, { "name" : "FabricIngress.acl.drop", - "id" : 39, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -3318,13 +3327,13 @@ }, { "name" : "FabricIngress.acl.nop_acl", - "id" : 40, + "id" : 42, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.next.set_vlan", - "id" : 41, + "id" : 43, "runtime_data" : [ { "name" : "vlan_id", @@ -3355,7 +3364,7 @@ }, { "name" : "FabricIngress.next.set_double_vlan", - "id" : 42, + "id" : 44, "runtime_data" : [ { "name" : "outer_vlan_id", @@ -3439,7 +3448,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_s_tag42"] + "value" : ["scalars", "fabric_metadata_t._bng_s_tag40"] }, { "type" : "runtime_data", @@ -3458,7 +3467,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_c_tag43"] + "value" : ["scalars", "fabric_metadata_t._bng_c_tag41"] }, { "type" : "runtime_data", @@ -3476,7 +3485,7 @@ }, { "name" : "FabricIngress.next.output_xconnect", - "id" : 43, + "id" : 45, "runtime_data" : [ { "name" : "port_num", @@ -3507,7 +3516,7 @@ }, { "name" : "FabricIngress.next.set_next_id_xconnect", - "id" : 44, + "id" : 46, "runtime_data" : [ { "name" : "next_id", @@ -3538,7 +3547,7 @@ }, { "name" : "FabricIngress.next.output_simple", - "id" : 45, + "id" : 47, "runtime_data" : [ { "name" : "port_num", @@ -3569,7 +3578,7 @@ }, { "name" : "FabricIngress.next.routing_simple", - "id" : 46, + "id" : 48, "runtime_data" : [ { "name" : "port_num", @@ -3646,7 +3655,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_simple", - "id" : 47, + "id" : 49, "runtime_data" : [ { "name" : "port_num", @@ -3746,7 +3755,7 @@ }, { "name" : "FabricIngress.next.output_hashed", - "id" : 48, + "id" : 50, "runtime_data" : [ { "name" : "port_num", @@ -3777,7 +3786,7 @@ }, { "name" : "FabricIngress.next.routing_hashed", - "id" : 49, + "id" : 51, "runtime_data" : [ { "name" : "port_num", @@ -3854,7 +3863,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_hashed", - "id" : 50, + "id" : 52, "runtime_data" : [ { "name" : "port_num", @@ -3954,7 +3963,7 @@ }, { "name" : "FabricIngress.next.set_mcast_group_id", - "id" : 51, + "id" : 53, "runtime_data" : [ { "name" : "group_id", @@ -4013,40 +4022,27 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.set_source_iface", - "id" : 52, - "runtime_data" : [ - { - "name" : "src_iface", - "bitwidth" : 8 - }, - { - "name" : "direction", - "bitwidth" : 2 - }, - { - "name" : "skip_spgw", - "bitwidth" : 1 - } - ], + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 54, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_src_iface31"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 50, - "column" : 33, - "source_fragment" : "= src_iface; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -4054,18 +4050,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_direction23"] + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 51, - "column" : 33, - "source_fragment" : "= direction; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } }, { @@ -4073,87 +4069,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw32"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, - "column" : 33, - "source_fragment" : "= (bool)skip_spgw; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 53, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 - }, - { - "name" : "far_id", - "bitwidth" : 32 }, - { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit33"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 31, - "source_fragment" : "= true; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -4161,18 +4107,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id29"] + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -4180,106 +4126,142 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id30"] + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap37"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 54, - "runtime_data" : [ + }, { - "name" : "ctr_id", - "bitwidth" : 32 + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } }, { - "name" : "far_id", - "bitwidth" : 32 + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } }, { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "tcp" + }, + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } } - ], + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", + "id" : 55, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit33"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, + "filename" : "include/control/../define.p4", + "line" : 118, "column" : 31, - "source_fragment" : "= true; ..." + "source_fragment" : "0x0800; ..." } }, { @@ -4287,18 +4269,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id29"] + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } }, { @@ -4306,18 +4288,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id30"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -4325,93 +4307,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap37"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.load_normal_far_attributes", - "id" : 55, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 }, - { - "name" : "notify_cp", - "bitwidth" : 1 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped34"] + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 138, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -4419,234 +4345,127 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc35"] + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 139, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.load_tunnel_far_attributes", - "id" : 56, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 - }, - { - "name" : "notify_cp", - "bitwidth" : 1 - }, - { - "name" : "tunnel_src_port", - "bitwidth" : 16 - }, - { - "name" : "tunnel_src_addr", - "bitwidth" : 32 - }, - { - "name" : "tunnel_dst_addr", - "bitwidth" : 32 }, { - "name" : "teid", - "bitwidth" : 32 - } - ], - "primitives" : [ - { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped34"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 148, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc35"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 149, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap36"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "header", + "value" : "gtpu" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, - "column" : 40, - "source_fragment" : "= true; ..." + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid25"] + "type" : "header", + "value" : "udp" }, { - "type" : "runtime_data", - "value" : 5 + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, - "column" : 28, - "source_fragment" : "= teid; ..." + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port26"] - }, - { - "type" : "runtime_data", - "value" : 2 + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 153, - "column" : 39, - "source_fragment" : "= tunnel_src_port; ..." + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" } - }, + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", + "id" : 56, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr27"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "runtime_data", - "value" : 3 + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 154, - "column" : 39, - "source_fragment" : "= tunnel_src_addr; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -4654,18 +4473,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr28"] + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] }, { - "type" : "runtime_data", - "value" : 4 + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 155, - "column" : 39, - "source_fragment" : "= tunnel_dst_addr; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } }, { @@ -4676,15 +4495,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] }, { - "type" : "runtime_data", - "value" : 3 + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 157, + "line" : 40, "column" : 32, - "source_fragment" : "= tunnel_src_addr; ..." + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -4695,15 +4514,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] }, { - "type" : "runtime_data", - "value" : 4 + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 158, + "line" : 41, "column" : 32, - "source_fragment" : "= tunnel_dst_addr; ..." + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -4714,15 +4533,15 @@ "value" : ["scalars", "fabric_metadata_t._l4_sport17"] }, { - "type" : "runtime_data", - "value" : 2 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 159, + "line" : 42, "column" : 27, - "source_fragment" : "= tunnel_src_port; ..." + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -4733,58 +4552,156 @@ "value" : ["scalars", "fabric_metadata_t._l4_dport18"] }, { - "type" : "hexstr", - "value" : "0x0868" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 160, + "line" : 43, "column" : 27, - "source_fragment" : "= 2152; ..." + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_tcp", - "id" : 57, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto16"] - }, - { - "type" : "field", + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "icmp" + }, + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 66, + "column" : 8, + "source_fragment" : "hdr.icmp = hdr.inner_icmp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + }, + { + "type" : "field", "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -4803,7 +4720,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 40, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } @@ -4822,7 +4739,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 41, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } @@ -4841,7 +4758,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 42, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_sport; ..." } @@ -4860,7 +4777,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 43, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_dport; ..." } @@ -4879,7 +4796,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, + "line" : 45, "column" : 8, "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } @@ -4894,7 +4811,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, + "line" : 46, "column" : 8, "source_fragment" : "hdr.inner_ipv4.setInvalid()" } @@ -4909,7 +4826,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 47, "column" : 8, "source_fragment" : "hdr.gtpu.setInvalid()" } @@ -4924,49 +4841,15 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 199, + "line" : 72, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } - }, - { - "op" : "assign_header", - "parameters" : [ - { - "type" : "header", - "value" : "tcp" - }, - { - "type" : "header", - "value" : "inner_tcp" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 200, - "column" : 8, - "source_fragment" : "hdr.tcp = hdr.inner_tcp" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_tcp" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 201, - "column" : 8, - "source_fragment" : "hdr.inner_tcp.setInvalid()" - } } ] }, { - "name" : "FabricIngress.spgw_ingress.decap_inner_udp", + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "id" : 58, "runtime_data" : [], "primitives" : [ @@ -4984,7 +4867,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5003,7 +4886,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -5022,7 +4905,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 40, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } @@ -5041,7 +4924,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 41, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } @@ -5060,7 +4943,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 42, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_sport; ..." } @@ -5079,7 +4962,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 43, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_dport; ..." } @@ -5098,7 +4981,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, + "line" : 45, "column" : 8, "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } @@ -5113,7 +4996,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, + "line" : 46, "column" : 8, "source_fragment" : "hdr.inner_ipv4.setInvalid()" } @@ -5128,69 +5011,1343 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 47, "column" : 8, "source_fragment" : "hdr.gtpu.setInvalid()" } }, { - "op" : "assign_header", + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "tcp" + }, + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", + "id" : 59, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + }, + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", + "id" : 60, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "icmp" + }, + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 66, + "column" : 8, + "source_fragment" : "hdr.icmp = hdr.inner_icmp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", + "id" : 61, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_iface", + "id" : 62, + "runtime_data" : [ + { + "name" : "src_iface", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 121, + "column" : 33, + "source_fragment" : "= src_iface; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw31"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 122, + "column" : 33, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.iface_miss", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface30"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 108, + "column" : 44, + "source_fragment" : "8w0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw31"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 126, + "column" : 33, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 64, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id28"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id29"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap34"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 65, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id28"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id29"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap34"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_normal_far", + "id" : 66, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 186, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next11"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 187, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc32"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 188, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_tunnel_far", + "id" : 67, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + }, + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next11"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc32"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap33"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_teid24"] }, { - "type" : "header", - "value" : "inner_udp" + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 205, - "column" : 8, - "source_fragment" : "hdr.udp = hdr.inner_udp" + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port25"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, - "column" : 8, - "source_fragment" : "hdr.inner_udp.setInvalid()" + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_icmp", - "id" : 59, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr26"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -5198,18 +6355,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr27"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 205, + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -5220,15 +6377,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 207, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -5239,15 +6396,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 208, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -5258,15 +6415,15 @@ "value" : ["scalars", "fabric_metadata_t._l4_sport17"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 209, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -5277,139 +6434,193 @@ "value" : ["scalars", "fabric_metadata_t._l4_dport18"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 210, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "source_fragment" : "= 2152; ..." } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_dbuf_far", + "id" : 68, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 }, { - "op" : "assign_header", - "parameters" : [ - { - "type" : "header", - "value" : "ipv4" - }, - { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" - } + "name" : "notify_cp", + "bitwidth" : 1 }, { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" - } + "name" : "tunnel_src_port", + "bitwidth" : 16 }, { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "gtpu" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" - } + "name" : "tunnel_src_addr", + "bitwidth" : 32 }, { - "op" : "remove_header", + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "icmp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next11"] }, { - "type" : "header", - "value" : "inner_icmp" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.icmp = hdr.inner_icmp" + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_icmp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc32"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, - "column" : 8, - "source_fragment" : "hdr.inner_icmp.setInvalid()" + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_unknown", - "id" : 60, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap33"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." } }, { @@ -5417,18 +6628,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto16"] + "value" : ["scalars", "fabric_metadata_t._spgw_teid24"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { @@ -5436,18 +6647,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port25"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -5455,18 +6666,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr26"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -5474,18 +6685,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_sport17"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr27"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport21"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "line" : 205, + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -5493,89 +6704,111 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_dport18"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr19"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport22"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "line" : 207, + "column" : 32, + "source_fragment" : "= tunnel_src_addr; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr20"] }, { - "type" : "header", - "value" : "inner_ipv4" + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + "line" : 208, + "column" : 32, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport17"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" + "line" : 209, + "column" : 27, + "source_fragment" : "= tunnel_src_port; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "gtpu" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport18"] + }, + { + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" + "line" : 210, + "column" : 27, + "source_fragment" : "= 2152; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr35"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 221, + "column" : 43, + "source_fragment" : "= true; ..." } } ] }, { "name" : "act", - "id" : 61, + "id" : 69, "runtime_data" : [], "primitives" : [ { @@ -5655,7 +6888,7 @@ }, { "name" : "act_0", - "id" : 62, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -5663,7 +6896,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -5674,7 +6907,7 @@ "left" : null, "right" : { "type" : "bool", - "value" : false + "value" : true } } } @@ -5685,7 +6918,7 @@ }, { "name" : "act_1", - "id" : 63, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -5693,7 +6926,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -5704,24 +6937,18 @@ "left" : null, "right" : { "type" : "bool", - "value" : true + "value" : false } } } } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - } + ] } ] }, { "name" : "act_2", - "id" : 64, + "id" : 72, "runtime_data" : [], "primitives" : [ { @@ -5729,17 +6956,17 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricIngress.spgw_ingress.pdr_counter" + "value" : "FabricIngress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id29"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id28"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } @@ -5747,72 +6974,7 @@ }, { "name" : "act_3", - "id" : 65, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_next11"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 281, - "column" : 32, - "source_fragment" : "= true; ..." - } - } - ] - }, - { - "name" : "act_4", - "id" : 66, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -5820,7 +6982,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len23"] }, { "type" : "field", @@ -5829,16 +6991,16 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "= hdr.ipv4.total_len; ..." } } ] }, { - "name" : "act_5", - "id" : 67, + "name" : "act_4", + "id" : 74, "runtime_data" : [], "primitives" : [ { @@ -5901,8 +7063,8 @@ ] }, { - "name" : "act_6", - "id" : 68, + "name" : "act_5", + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -5965,8 +7127,8 @@ ] }, { - "name" : "act_7", - "id" : 69, + "name" : "act_6", + "id" : 76, "runtime_data" : [], "primitives" : [ { @@ -5991,8 +7153,8 @@ ] }, { - "name" : "act_8", - "id" : 70, + "name" : "act_7", + "id" : 77, "runtime_data" : [], "primitives" : [ { @@ -6000,7 +7162,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -6036,7 +7198,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] } ], "source_info" : { @@ -6049,8 +7211,8 @@ ] }, { - "name" : "act_9", - "id" : 71, + "name" : "act_8", + "id" : 78, "runtime_data" : [], "primitives" : [ { @@ -6107,8 +7269,8 @@ ] }, { - "name" : "act_10", - "id" : 72, + "name" : "act_9", + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -6133,8 +7295,8 @@ ] }, { - "name" : "act_11", - "id" : 73, + "name" : "act_10", + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -6163,8 +7325,8 @@ ] }, { - "name" : "act_12", - "id" : 74, + "name" : "act_11", + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -6193,8 +7355,8 @@ ] }, { - "name" : "act_13", - "id" : 75, + "name" : "act_12", + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -6202,7 +7364,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, { "type" : "hexstr", @@ -6211,7 +7373,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 164, + "line" : 162, "column" : 37, "source_fragment" : "2w0x1; ..." } @@ -6242,8 +7404,8 @@ ] }, { - "name" : "act_14", - "id" : 76, + "name" : "act_13", + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -6278,8 +7440,8 @@ ] }, { - "name" : "act_15", - "id" : 77, + "name" : "act_14", + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -6291,7 +7453,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -6304,8 +7466,8 @@ ] }, { - "name" : "act_16", - "id" : 78, + "name" : "act_15", + "id" : 85, "runtime_data" : [], "primitives" : [ { @@ -6317,7 +7479,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -6330,8 +7492,8 @@ ] }, { - "name" : "act_17", - "id" : 79, + "name" : "act_16", + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -6389,8 +7551,8 @@ ] }, { - "name" : "act_18", - "id" : 80, + "name" : "act_17", + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -6419,8 +7581,8 @@ ] }, { - "name" : "act_19", - "id" : 81, + "name" : "act_18", + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -6449,8 +7611,8 @@ ] }, { - "name" : "act_20", - "id" : 82, + "name" : "act_19", + "id" : 89, "runtime_data" : [], "primitives" : [ { @@ -6462,11 +7624,11 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result41"] + "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result39"] } ], "source_info" : { @@ -6479,8 +7641,8 @@ ] }, { - "name" : "act_21", - "id" : 83, + "name" : "act_20", + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -6492,11 +7654,11 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result41"] + "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result39"] } ], "source_info" : { @@ -6509,8 +7671,8 @@ ] }, { - "name" : "act_22", - "id" : 84, + "name" : "act_21", + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -6522,11 +7684,11 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result41"] + "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result39"] } ], "source_info" : { @@ -6539,8 +7701,8 @@ ] }, { - "name" : "act_23", - "id" : 85, + "name" : "act_22", + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -6552,11 +7714,11 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result41"] + "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result39"] } ], "source_info" : { @@ -6570,43 +7732,43 @@ }, { "name" : "nop", - "id" : 86, + "id" : 93, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 87, + "id" : 94, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 88, + "id" : 95, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 89, + "id" : 96, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 90, + "id" : 97, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 91, + "id" : 98, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.bng_egress.downstream.encap_v4", - "id" : 92, + "id" : 99, "runtime_data" : [], "primitives" : [ { @@ -6623,7 +7785,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 122, "column" : 33, "source_fragment" : "0x8864; ..." } @@ -6709,7 +7871,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id40"] + "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id38"] } ], "source_info" : { @@ -6728,7 +7890,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -6794,7 +7956,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 134, + "line" : 124, "column" : 35, "source_fragment" : "0x0021; ..." } @@ -6803,7 +7965,7 @@ }, { "name" : "FabricEgress.bng_egress.downstream.encap_v6", - "id" : 93, + "id" : 100, "runtime_data" : [], "primitives" : [ { @@ -6820,7 +7982,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 122, "column" : 33, "source_fragment" : "0x8864; ..." } @@ -6906,7 +8068,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id40"] + "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id38"] } ], "source_info" : { @@ -6925,7 +8087,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_line_id39"] + "value" : ["scalars", "fabric_metadata_t._bng_line_id37"] } ], "source_info" : { @@ -6991,7 +8153,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 135, + "line" : 125, "column" : 35, "source_fragment" : "0x0057; ..." } @@ -7000,7 +8162,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 94, + "id" : 101, "runtime_data" : [ { "name" : "max_hop", @@ -7068,7 +8230,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 165, + "line" : 155, "column" : 36, "source_fragment" : "4; ..." } @@ -7486,7 +8648,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 161, + "line" : 151, "column" : 24, "source_fragment" : "0x1; ..." } @@ -7495,7 +8657,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 95, + "id" : 102, "runtime_data" : [ { "name" : "switch_id", @@ -7508,7 +8670,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_transit45"] + "value" : ["scalars", "fabric_metadata_t._int_meta_transit43"] }, { "type" : "expression", @@ -7537,7 +8699,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] }, { "type" : "runtime_data", @@ -7555,13 +8717,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 96, + "id" : 103, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 97, + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -7635,7 +8797,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -7649,7 +8811,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -7677,7 +8839,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -7691,7 +8853,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -7718,7 +8880,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 98, + "id" : 105, "runtime_data" : [], "primitives" : [ { @@ -7760,7 +8922,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -7774,7 +8936,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -7802,7 +8964,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -7816,7 +8978,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -7843,7 +9005,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 99, + "id" : 106, "runtime_data" : [], "primitives" : [ { @@ -7951,7 +9113,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -7965,7 +9127,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -7993,7 +9155,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -8007,7 +9169,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -8034,7 +9196,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 100, + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -8121,7 +9283,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -8135,7 +9297,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -8163,7 +9325,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -8177,7 +9339,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -8204,7 +9366,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 101, + "id" : 108, "runtime_data" : [], "primitives" : [ { @@ -8357,7 +9519,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -8371,7 +9533,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -8399,7 +9561,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -8413,7 +9575,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -8440,7 +9602,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 102, + "id" : 109, "runtime_data" : [], "primitives" : [ { @@ -8561,7 +9723,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -8575,7 +9737,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -8603,7 +9765,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -8617,7 +9779,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -8644,7 +9806,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 103, + "id" : 110, "runtime_data" : [], "primitives" : [ { @@ -8831,7 +9993,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -8845,7 +10007,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -8873,7 +10035,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -8887,7 +10049,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -8914,7 +10076,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 104, + "id" : 111, "runtime_data" : [], "primitives" : [ { @@ -8941,7 +10103,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -8956,7 +10118,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -8970,7 +10132,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -8998,7 +10160,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -9012,7 +10174,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -9039,7 +10201,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 105, + "id" : 112, "runtime_data" : [], "primitives" : [ { @@ -9132,7 +10294,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -9147,7 +10309,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -9161,7 +10323,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -9189,7 +10351,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -9203,7 +10365,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -9230,7 +10392,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 106, + "id" : 113, "runtime_data" : [], "primitives" : [ { @@ -9291,7 +10453,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -9306,7 +10468,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -9320,7 +10482,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -9348,7 +10510,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -9362,7 +10524,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -9389,7 +10551,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 107, + "id" : 114, "runtime_data" : [], "primitives" : [ { @@ -9516,7 +10678,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -9531,7 +10693,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -9545,7 +10707,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -9573,7 +10735,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -9587,7 +10749,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -9614,7 +10776,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 108, + "id" : 115, "runtime_data" : [], "primitives" : [ { @@ -9720,7 +10882,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -9735,7 +10897,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -9749,7 +10911,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -9777,7 +10939,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -9791,7 +10953,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -9818,7 +10980,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 109, + "id" : 116, "runtime_data" : [], "primitives" : [ { @@ -9990,7 +11152,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -10005,7 +11167,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -10019,7 +11181,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -10047,7 +11209,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -10061,7 +11223,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -10088,7 +11250,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 110, + "id" : 117, "runtime_data" : [], "primitives" : [ { @@ -10228,7 +11390,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -10243,7 +11405,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -10257,7 +11419,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -10285,7 +11447,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -10299,7 +11461,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -10326,7 +11488,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 111, + "id" : 118, "runtime_data" : [], "primitives" : [ { @@ -10532,7 +11694,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id47"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id45"] } ], "source_info" : { @@ -10547,7 +11709,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -10561,7 +11723,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -10589,7 +11751,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -10603,7 +11765,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -10630,13 +11792,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 112, + "id" : 119, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 113, + "id" : 120, "runtime_data" : [], "primitives" : [ { @@ -10678,7 +11840,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -10692,7 +11854,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -10720,7 +11882,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -10734,7 +11896,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -10761,7 +11923,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 114, + "id" : 121, "runtime_data" : [], "primitives" : [ { @@ -10822,7 +11984,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -10836,7 +11998,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -10864,7 +12026,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -10878,7 +12040,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -10905,7 +12067,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 115, + "id" : 122, "runtime_data" : [], "primitives" : [ { @@ -11000,7 +12162,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11014,7 +12176,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11042,7 +12204,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11056,7 +12218,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11083,7 +12245,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 116, + "id" : 123, "runtime_data" : [], "primitives" : [ { @@ -11148,7 +12310,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11162,7 +12324,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11190,7 +12352,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11204,7 +12366,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11231,7 +12393,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 117, + "id" : 124, "runtime_data" : [], "primitives" : [ { @@ -11330,7 +12492,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11344,7 +12506,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11372,7 +12534,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11386,7 +12548,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11413,7 +12575,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 118, + "id" : 125, "runtime_data" : [], "primitives" : [ { @@ -11531,7 +12693,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11545,7 +12707,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11573,7 +12735,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11587,7 +12749,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11614,7 +12776,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 119, + "id" : 126, "runtime_data" : [], "primitives" : [ { @@ -11766,7 +12928,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11780,7 +12942,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11808,7 +12970,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11822,7 +12984,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11849,7 +13011,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 120, + "id" : 127, "runtime_data" : [], "primitives" : [ { @@ -11891,7 +13053,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -11905,7 +13067,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -11933,7 +13095,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -11947,7 +13109,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -11974,7 +13136,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 121, + "id" : 128, "runtime_data" : [], "primitives" : [ { @@ -12050,7 +13212,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -12064,7 +13226,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -12092,7 +13254,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -12106,7 +13268,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -12133,7 +13295,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 122, + "id" : 129, "runtime_data" : [], "primitives" : [ { @@ -12228,7 +13390,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -12242,7 +13404,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -12270,7 +13432,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -12284,7 +13446,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -12311,7 +13473,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 123, + "id" : 130, "runtime_data" : [], "primitives" : [ { @@ -12440,7 +13602,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -12454,7 +13616,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -12482,7 +13644,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -12496,7 +13658,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -12523,7 +13685,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 124, + "id" : 131, "runtime_data" : [], "primitives" : [ { @@ -12622,7 +13784,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -12636,7 +13798,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -12664,7 +13826,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -12678,7 +13840,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -12705,7 +13867,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 125, + "id" : 132, "runtime_data" : [], "primitives" : [ { @@ -12838,7 +14000,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -12852,7 +14014,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -12880,7 +14042,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -12894,7 +14056,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -12921,7 +14083,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 126, + "id" : 133, "runtime_data" : [], "primitives" : [ { @@ -13073,7 +14235,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -13087,7 +14249,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -13115,7 +14277,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -13129,7 +14291,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -13156,7 +14318,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 127, + "id" : 134, "runtime_data" : [], "primitives" : [ { @@ -13342,7 +14504,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, { "type" : "expression", @@ -13356,7 +14518,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] }, "right" : { "type" : "hexstr", @@ -13384,7 +14546,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, { "type" : "expression", @@ -13398,7 +14560,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] }, "right" : { "type" : "hexstr", @@ -13425,7 +14587,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", - "id" : 128, + "id" : 135, "runtime_data" : [ { "name" : "src_mac", @@ -13531,7 +14693,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -13759,7 +14921,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 140, + "line" : 130, "column" : 25, "source_fragment" : "17; ..." } @@ -13945,7 +15107,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 171, + "line" : 161, "column" : 31, "source_fragment" : "0; ..." } @@ -14040,7 +15202,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 175, + "line" : 165, "column" : 21, "source_fragment" : "1; ..." } @@ -14087,7 +15249,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", - "id" : 129, + "id" : 136, "runtime_data" : [], "primitives" : [ { @@ -14132,7 +15294,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", - "id" : 130, + "id" : 137, "runtime_data" : [], "primitives" : [ { @@ -14463,7 +15625,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 131, + "id" : 138, "runtime_data" : [], "primitives" : [ { @@ -14504,7 +15666,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 132, + "id" : 139, "runtime_data" : [], "primitives" : [ { @@ -14612,7 +15774,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -14621,7 +15783,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 133, + "id" : 140, "runtime_data" : [], "primitives" : [ { @@ -14691,7 +15853,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -14719,7 +15881,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 134, + "id" : 141, "runtime_data" : [], "primitives" : [ { @@ -14789,7 +15951,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -14817,7 +15979,7 @@ }, { "name" : "FabricEgress.egress_next.push_inner_vlan", - "id" : 135, + "id" : 142, "runtime_data" : [], "primitives" : [ { @@ -14906,7 +16068,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -14925,7 +16087,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -14934,7 +16096,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 136, + "id" : 143, "runtime_data" : [], "primitives" : [ { @@ -14955,8 +16117,8 @@ ] }, { - "name" : "FabricEgress.spgw_egress.gtpu_encap", - "id" : 137, + "name" : "FabricEgress.spgw.gtpu_encap", + "id" : 144, "runtime_data" : [], "primitives" : [ { @@ -14969,7 +16131,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 306, + "line" : 291, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.setValid()" } @@ -14988,7 +16150,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 307, + "line" : 292, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.version = 4" } @@ -15007,7 +16169,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 143, + "line" : 133, "column" : 28, "source_fragment" : "5; ..." } @@ -15026,7 +16188,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 309, + "line" : 294, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } @@ -15045,7 +16207,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 310, + "line" : 295, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } @@ -15087,7 +16249,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 311, + "line" : 296, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } @@ -15106,7 +16268,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 313, + "line" : 298, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } @@ -15125,7 +16287,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 314, + "line" : 299, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } @@ -15144,7 +16306,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 315, + "line" : 300, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } @@ -15163,7 +16325,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 156, + "line" : 146, "column" : 32, "source_fragment" : "64; ..." } @@ -15182,7 +16344,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 140, + "line" : 130, "column" : 25, "source_fragment" : "17; ..." } @@ -15196,12 +16358,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr27"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr26"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 318, + "line" : 303, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } @@ -15215,12 +16377,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr28"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr27"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 319, + "line" : 304, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." } @@ -15239,7 +16401,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 320, + "line" : 305, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" } @@ -15254,7 +16416,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 322, + "line" : 307, "column" : 8, "source_fragment" : "hdr.gtpu_udp.setValid()" } @@ -15268,12 +16430,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port26"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port25"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 323, + "line" : 308, "column" : 8, "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." } @@ -15292,7 +16454,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 324, + "line" : 309, "column" : 8, "source_fragment" : "hdr.gtpu_udp.dport = 2152" } @@ -15316,7 +16478,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len23"] }, "right" : { "type" : "hexstr", @@ -15334,7 +16496,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 325, + "line" : 310, "column" : 8, "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } @@ -15353,7 +16515,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 327, + "line" : 312, "column" : 8, "source_fragment" : "hdr.gtpu_udp.checksum = 0" } @@ -15368,7 +16530,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 330, + "line" : 315, "column" : 8, "source_fragment" : "hdr.outer_gtpu.setValid()" } @@ -15387,7 +16549,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 331, + "line" : 316, "column" : 8, "source_fragment" : "hdr.outer_gtpu.version = 0x01" } @@ -15406,7 +16568,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 317, "column" : 8, "source_fragment" : "hdr.outer_gtpu.pt = 0x01" } @@ -15425,7 +16587,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 318, "column" : 8, "source_fragment" : "hdr.outer_gtpu.spare = 0" } @@ -15444,7 +16606,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 334, + "line" : 319, "column" : 8, "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" } @@ -15463,7 +16625,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 335, + "line" : 320, "column" : 8, "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" } @@ -15482,7 +16644,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 336, + "line" : 321, "column" : 8, "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" } @@ -15501,7 +16663,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 322, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" } @@ -15515,12 +16677,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len23"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 338, + "line" : 323, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." } @@ -15534,12 +16696,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid25"] + "value" : ["scalars", "fabric_metadata_t._spgw_teid24"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, + "line" : 324, "column" : 8, "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." } @@ -15547,8 +16709,8 @@ ] }, { - "name" : "act_24", - "id" : 138, + "name" : "act_23", + "id" : 145, "runtime_data" : [], "primitives" : [ { @@ -15564,8 +16726,8 @@ ] }, { - "name" : "act_25", - "id" : 139, + "name" : "act_24", + "id" : 146, "runtime_data" : [], "primitives" : [ { @@ -15615,8 +16777,8 @@ ] }, { - "name" : "act_26", - "id" : 140, + "name" : "act_25", + "id" : 147, "runtime_data" : [], "primitives" : [ { @@ -15637,8 +16799,8 @@ ] }, { - "name" : "act_27", - "id" : 141, + "name" : "act_26", + "id" : 148, "runtime_data" : [], "primitives" : [ { @@ -15667,8 +16829,8 @@ ] }, { - "name" : "act_28", - "id" : 142, + "name" : "act_27", + "id" : 149, "runtime_data" : [], "primitives" : [ { @@ -15697,8 +16859,8 @@ ] }, { - "name" : "act_29", - "id" : 143, + "name" : "act_28", + "id" : 150, "runtime_data" : [], "primitives" : [ { @@ -15719,8 +16881,8 @@ ] }, { - "name" : "act_30", - "id" : 144, + "name" : "act_29", + "id" : 151, "runtime_data" : [], "primitives" : [ { @@ -15741,8 +16903,8 @@ ] }, { - "name" : "act_31", - "id" : 145, + "name" : "act_30", + "id" : 152, "runtime_data" : [], "primitives" : [ { @@ -15790,8 +16952,8 @@ ] }, { - "name" : "act_32", - "id" : 146, + "name" : "act_31", + "id" : 153, "runtime_data" : [], "primitives" : [ { @@ -15812,8 +16974,8 @@ ] }, { - "name" : "act_33", - "id" : 147, + "name" : "act_32", + "id" : 154, "runtime_data" : [], "primitives" : [ { @@ -15861,8 +17023,8 @@ ] }, { - "name" : "act_34", - "id" : 148, + "name" : "act_33", + "id" : 155, "runtime_data" : [], "primitives" : [ { @@ -15883,8 +17045,8 @@ ] }, { - "name" : "act_35", - "id" : 149, + "name" : "act_34", + "id" : 156, "runtime_data" : [], "primitives" : [ { @@ -15932,74 +17094,8 @@ ] }, { - "name" : "act_36", - "id" : 150, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" - } - } - ] - }, - { - "name" : "act_37", - "id" : 151, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_38", - "id" : 152, + "name" : "act_35", + "id" : 157, "runtime_data" : [], "primitives" : [ { @@ -16007,25 +17103,25 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricEgress.spgw_egress.pdr_counter" + "value" : "FabricEgress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id29"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id28"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, + "line" : 333, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } ] }, { - "name" : "act_39", - "id" : 153, + "name" : "act_36", + "id" : 158, "runtime_data" : [], "primitives" : [ { @@ -16054,8 +17150,8 @@ ] }, { - "name" : "act_40", - "id" : 154, + "name" : "act_37", + "id" : 159, "runtime_data" : [], "primitives" : [ { @@ -16090,8 +17186,8 @@ ] }, { - "name" : "act_41", - "id" : 155, + "name" : "act_38", + "id" : 160, "runtime_data" : [], "primitives" : [ { @@ -16117,7 +17213,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] } } }, @@ -16139,8 +17235,8 @@ ] }, { - "name" : "act_42", - "id" : 156, + "name" : "act_39", + "id" : 161, "runtime_data" : [], "primitives" : [ { @@ -16188,8 +17284,8 @@ ] }, { - "name" : "act_43", - "id" : 157, + "name" : "act_40", + "id" : 162, "runtime_data" : [], "primitives" : [ { @@ -16215,7 +17311,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes49"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes47"] } } }, @@ -16237,8 +17333,8 @@ ] }, { - "name" : "act_44", - "id" : 158, + "name" : "act_41", + "id" : 163, "runtime_data" : [], "primitives" : [ { @@ -16264,7 +17360,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words48"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words46"] } } }, @@ -16314,22 +17410,65 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61], + "action_ids" : [69], "actions" : ["act"], - "base_default_next" : "tbl_act_0", + "base_default_next" : "FabricIngress.spgw.interfaces", "next_tables" : { - "act" : "tbl_act_0" + "act" : "FabricIngress.spgw.interfaces" }, "default_entry" : { - "action_id" : 61, + "action_id" : 69, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_0", + "name" : "FabricIngress.spgw.interfaces", "id" : 1, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 130, + "column" : 10, + "source_fragment" : "interfaces" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["gtpu", "$valid$"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 128, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62, 63], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_0", + "__MISS__" : "tbl_act_1" + }, + "default_entry" : { + "action_id" : 63, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_0", + "id" : 2, "key" : [], "match_type" : "exact", "type" : "simple", @@ -16337,98 +17476,184 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], + "action_ids" : [70], "actions" : ["act_0"], - "base_default_next" : "FabricIngress.spgw_ingress.interface_lookup", + "base_default_next" : "node_7", "next_tables" : { - "act_0" : "FabricIngress.spgw_ingress.interface_lookup" + "act_0" : "node_7" }, "default_entry" : { - "action_id" : 62, + "action_id" : 70, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.interface_lookup", - "id" : 2, + "name" : "tbl_act_1", + "id" : 3, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [71], + "actions" : ["act_1"], + "base_default_next" : "node_7", + "next_tables" : { + "act_1" : "node_7" + }, + "default_entry" : { + "action_id" : 71, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 55, + "line" : 75, "column" : 10, - "source_fragment" : "interface_lookup" + "source_fragment" : "decap_gtpu" }, "key" : [ { - "match_type" : "lpm", - "name" : "ipv4_dst_addr", - "target" : ["ipv4", "dst_addr"], + "match_type" : "exact", + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], "mask" : null }, { "match_type" : "exact", - "name" : "gtpu_is_valid", - "target" : ["gtpu", "$valid$"], + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } - ], - "match_type" : "lpm", - "type" : "simple", - "max_size" : 128, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [52], - "actions" : ["FabricIngress.spgw_ingress.set_source_iface"], - "base_default_next" : "node_6", - "next_tables" : { - "FabricIngress.spgw_ingress.set_source_iface" : "node_6" - }, - "default_entry" : { - "action_id" : 52, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x1"], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_1", - "id" : 3, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [63], - "actions" : ["act_1"], - "base_default_next" : "node_8", - "next_tables" : { - "act_1" : "node_8" - }, - "default_entry" : { - "action_id" : 63, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [54, 55, 56, 57], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_10", + "next_tables" : { + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_10" + }, + "default_entry" : { + "action_id" : 57, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 89, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 54, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 90, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 55, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 56, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", - "id" : 4, + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 5, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 93, + "line" : 168, "column" : 10, - "source_fragment" : "uplink_pdr_lookup" + "source_fragment" : "uplink_pdrs" }, "key" : [ { @@ -16450,27 +17675,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [65, 14], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 54, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 14, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { - "name" : "FabricIngress.spgw_ingress.downlink_pdr_lookup", - "id" : 5, + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 6, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 82, + "line" : 157, "column" : 10, - "source_fragment" : "downlink_pdr_lookup" + "source_fragment" : "downlink_pdrs" }, "key" : [ { @@ -16486,26 +17712,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [64, 13], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 53, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 13, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { "name" : "tbl_act_2", - "id" : 6, + "id" : 7, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], @@ -16515,25 +17742,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [64], + "action_ids" : [72], "actions" : ["act_2"], - "base_default_next" : "node_13", + "base_default_next" : "node_15", "next_tables" : { - "act_2" : "node_13" + "act_2" : "node_15" }, "default_entry" : { - "action_id" : 64, + "action_id" : 72, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.decap_gtpu", - "id" : 7, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 8, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 75, "column" : 10, "source_fragment" : "decap_gtpu" }, @@ -16563,17 +17790,17 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57, 58, 59, 60], - "actions" : ["FabricIngress.spgw_ingress.decap_inner_tcp", "FabricIngress.spgw_ingress.decap_inner_udp", "FabricIngress.spgw_ingress.decap_inner_icmp", "FabricIngress.spgw_ingress.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw_ingress.far_lookup", + "action_ids" : [58, 59, 60, 61], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.spgw_ingress.decap_inner_tcp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_udp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_icmp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_unknown" : "FabricIngress.spgw_ingress.far_lookup" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 60, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -16582,7 +17809,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 233, + "line" : 89, "column" : 12, "source_fragment" : "(true, false, false) : decap_inner_tcp()" }, @@ -16601,7 +17828,7 @@ } ], "action_entry" : { - "action_id" : 57, + "action_id" : 58, "action_data" : [] }, "priority" : 1 @@ -16609,7 +17836,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 234, + "line" : 90, "column" : 12, "source_fragment" : "(false, true, false) : decap_inner_udp()" }, @@ -16628,7 +17855,7 @@ } ], "action_entry" : { - "action_id" : 58, + "action_id" : 59, "action_data" : [] }, "priority" : 2 @@ -16636,7 +17863,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 235, + "line" : 91, "column" : 12, "source_fragment" : "(false, false, true) : decap_inner_icmp()" }, @@ -16655,7 +17882,7 @@ } ], "action_entry" : { - "action_id" : 59, + "action_id" : 60, "action_data" : [] }, "priority" : 3 @@ -16663,19 +17890,19 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.far_lookup", - "id" : 8, + "name" : "FabricIngress.spgw.fars", + "id" : 9, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 163, + "line" : 224, "column" : 10, - "source_fragment" : "far_lookup" + "source_fragment" : "fars" }, "key" : [ { "match_type" : "exact", "name" : "far_id", - "target" : ["scalars", "fabric_metadata_t._spgw_far_id30"], + "target" : ["scalars", "fabric_metadata_t._spgw_far_id29"], "mask" : null } ], @@ -16685,56 +17912,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55, 56], - "actions" : ["FabricIngress.spgw_ingress.load_normal_far_attributes", "FabricIngress.spgw_ingress.load_tunnel_far_attributes"], - "base_default_next" : "node_16", + "action_ids" : [66, 67, 68], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_act_3", "next_tables" : { - "FabricIngress.spgw_ingress.load_normal_far_attributes" : "node_16", - "FabricIngress.spgw_ingress.load_tunnel_far_attributes" : "node_16" + "FabricIngress.spgw.load_normal_far" : "tbl_act_3", + "FabricIngress.spgw.load_tunnel_far" : "tbl_act_3", + "FabricIngress.spgw.load_dbuf_far" : "tbl_act_3" }, "default_entry" : { - "action_id" : 55, + "action_id" : 66, "action_const" : true, - "action_data" : ["0x1", "0x1"], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_act_3", - "id" : 9, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [65], - "actions" : ["act_3"], - "base_default_next" : "tbl_act_4", - "next_tables" : { - "act_3" : "tbl_act_4" - }, - "default_entry" : { - "action_id" : 65, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_4", "id" : 10, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "=" }, "key" : [], @@ -16744,21 +17943,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [66], - "actions" : ["act_4"], + "action_ids" : [73], + "actions" : ["act_3"], "base_default_next" : "node_19", "next_tables" : { - "act_4" : "node_19" + "act_3" : "node_19" }, "default_entry" : { - "action_id" : 66, + "action_id" : 73, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_5", + "name" : "tbl_act_4", "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", @@ -16773,21 +17972,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [67], - "actions" : ["act_5"], + "action_ids" : [74], + "actions" : ["act_4"], "base_default_next" : "node_21", "next_tables" : { - "act_5" : "node_21" + "act_4" : "node_21" }, "default_entry" : { - "action_id" : 67, + "action_id" : 74, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_6", + "name" : "tbl_act_5", "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", @@ -16802,21 +18001,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68], - "actions" : ["act_6"], + "action_ids" : [75], + "actions" : ["act_5"], "base_default_next" : "node_23", "next_tables" : { - "act_6" : "node_23" + "act_5" : "node_23" }, "default_entry" : { - "action_id" : 68, + "action_id" : 75, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_7", + "name" : "tbl_act_6", "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", @@ -16831,14 +18030,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [69], - "actions" : ["act_7"], + "action_ids" : [76], + "actions" : ["act_6"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { - "act_7" : "FabricIngress.filtering.ingress_port_vlan" + "act_6" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 69, + "action_id" : 76, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -16885,7 +18084,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [27, 28, 29], + "action_ids" : [29, 30, 31], "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"], "base_default_next" : "FabricIngress.filtering.fwd_classifier", "next_tables" : { @@ -16894,7 +18093,7 @@ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier" }, "default_entry" : { - "action_id" : 27, + "action_id" : 29, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -16941,14 +18140,14 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30], + "action_ids" : [32], "actions" : ["FabricIngress.filtering.set_forwarding_type"], "base_default_next" : "node_27", "next_tables" : { "FabricIngress.filtering.set_forwarding_type" : "node_27" }, "default_entry" : { - "action_id" : 30, + "action_id" : 32, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true @@ -16983,7 +18182,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [31, 4], + "action_ids" : [33, 4], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -17020,7 +18219,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32, 5], + "action_ids" : [34, 5], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -17057,7 +18256,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [33, 34, 6], + "action_ids" : [35, 36, 6], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -17095,7 +18294,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [35, 7], + "action_ids" : [37, 7], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -17198,7 +18397,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36, 37, 38, 39, 40], + "action_ids" : [38, 39, 40, 41, 42], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], "base_default_next" : "node_37", "next_tables" : { @@ -17209,7 +18408,7 @@ "FabricIngress.acl.nop_acl" : "node_37" }, "default_entry" : { - "action_id" : 40, + "action_id" : 42, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17244,7 +18443,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43, 44, 9], + "action_ids" : [45, 46, 9], "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"], "base_default_next" : "FabricIngress.next.simple", "next_tables" : { @@ -17282,7 +18481,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45, 46, 47, 10], + "action_ids" : [47, 48, 49, 10], "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.routing_simple", "FabricIngress.next.mpls_routing_simple", "nop"], "base_default_next" : "FabricIngress.next.hashed", "next_tables" : { @@ -17322,7 +18521,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48, 49, 50, 11], + "action_ids" : [50, 51, 52, 11], "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"], "base_default_next" : "FabricIngress.next.multicast", "next_tables" : { @@ -17355,7 +18554,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51, 12], + "action_ids" : [53, 12], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], "base_default_next" : "FabricIngress.next.next_vlan", "next_tables" : { @@ -17392,7 +18591,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41, 42, 8], + "action_ids" : [43, 44, 8], "actions" : ["FabricIngress.next.set_vlan", "FabricIngress.next.set_double_vlan", "nop"], "base_default_next" : "node_43", "next_tables" : { @@ -17408,7 +18607,7 @@ } }, { - "name" : "tbl_act_8", + "name" : "tbl_act_7", "id" : 26, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -17423,21 +18622,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [70], - "actions" : ["act_8"], + "action_ids" : [77], + "actions" : ["act_7"], "base_default_next" : "node_45", "next_tables" : { - "act_8" : "node_45" + "act_7" : "node_45" }, "default_entry" : { - "action_id" : 70, + "action_id" : 77, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_9", + "name" : "tbl_act_8", "id" : 27, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -17452,14 +18651,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [71], - "actions" : ["act_9"], + "action_ids" : [78], + "actions" : ["act_8"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { - "act_9" : "FabricIngress.process_set_source_sink.tb_set_source" + "act_8" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 71, + "action_id" : 78, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17488,7 +18687,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [13, 0], + "action_ids" : [15, 0], "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_sink", "next_tables" : { @@ -17525,7 +18724,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [14, 1], + "action_ids" : [16, 1], "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "nop"], "base_default_next" : "node_49", "next_tables" : { @@ -17540,7 +18739,7 @@ } }, { - "name" : "tbl_act_10", + "name" : "tbl_act_9", "id" : 30, "source_info" : { "filename" : "include/int/int_main.p4", @@ -17555,14 +18754,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [72], - "actions" : ["act_10"], + "action_ids" : [79], + "actions" : ["act_9"], "base_default_next" : "FabricIngress.bng_ingress.t_line_map", "next_tables" : { - "act_10" : "FabricIngress.bng_ingress.t_line_map" + "act_9" : "FabricIngress.bng_ingress.t_line_map" }, "default_entry" : { - "action_id" : 72, + "action_id" : 79, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17581,13 +18780,13 @@ { "match_type" : "exact", "name" : "s_tag", - "target" : ["scalars", "fabric_metadata_t._bng_s_tag42"], + "target" : ["scalars", "fabric_metadata_t._bng_s_tag40"], "mask" : null }, { "match_type" : "exact", "name" : "c_tag", - "target" : ["scalars", "fabric_metadata_t._bng_c_tag43"], + "target" : ["scalars", "fabric_metadata_t._bng_c_tag41"], "mask" : null } ], @@ -17597,21 +18796,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [26], + "action_ids" : [28], "actions" : ["FabricIngress.bng_ingress.set_line"], "base_default_next" : "node_52", "next_tables" : { "FabricIngress.bng_ingress.set_line" : "node_52" }, "default_entry" : { - "action_id" : 26, + "action_id" : 28, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true } }, { - "name" : "tbl_act_11", + "name" : "tbl_act_10", "id" : 32, "source_info" : { "filename" : "include/bng.p4", @@ -17626,14 +18825,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [75], - "actions" : ["act_13"], + "action_ids" : [82], + "actions" : ["act_12"], "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp", "next_tables" : { - "act_13" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp" + "act_12" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp" }, "default_entry" : { - "action_id" : 75, + "action_id" : 82, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17668,12 +18867,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15, 2], + "action_ids" : [17, 2], "actions" : ["FabricIngress.bng_ingress.upstream.punt_to_cpu", "nop"], "base_default_next" : null, "next_tables" : { - "__HIT__" : "tbl_act_12", - "__MISS__" : "tbl_act_13" + "__HIT__" : "tbl_act_11", + "__MISS__" : "tbl_act_12" }, "default_entry" : { "action_id" : 2, @@ -17683,7 +18882,7 @@ } }, { - "name" : "tbl_act_12", + "name" : "tbl_act_11", "id" : 34, "key" : [], "match_type" : "exact", @@ -17692,21 +18891,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [73], - "actions" : ["act_11"], + "action_ids" : [80], + "actions" : ["act_10"], "base_default_next" : "node_57", "next_tables" : { - "act_11" : "node_57" + "act_10" : "node_57" }, "default_entry" : { - "action_id" : 73, + "action_id" : 80, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_13", + "name" : "tbl_act_12", "id" : 35, "key" : [], "match_type" : "exact", @@ -17715,21 +18914,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [74], - "actions" : ["act_12"], + "action_ids" : [81], + "actions" : ["act_11"], "base_default_next" : "node_57", "next_tables" : { - "act_12" : "node_57" + "act_11" : "node_57" }, "default_entry" : { - "action_id" : 74, + "action_id" : 81, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_14", + "name" : "tbl_act_13", "id" : 36, "source_info" : { "filename" : "include/bng.p4", @@ -17744,14 +18943,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [76], - "actions" : ["act_14"], + "action_ids" : [83], + "actions" : ["act_13"], "base_default_next" : "node_59", "next_tables" : { - "act_14" : "node_59" + "act_13" : "node_59" }, "default_entry" : { - "action_id" : 76, + "action_id" : 83, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17770,7 +18969,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "fabric_metadata_t._bng_line_id39"], + "target" : ["scalars", "fabric_metadata_t._bng_line_id37"], "mask" : null }, { @@ -17792,22 +18991,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [18, 16], + "action_ids" : [20, 18], "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"], "base_default_next" : null, "next_tables" : { - "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_15", + "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_14", "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null }, "default_entry" : { - "action_id" : 16, + "action_id" : 18, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_15", + "name" : "tbl_act_14", "id" : 38, "source_info" : { "filename" : "include/bng.p4", @@ -17822,21 +19021,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [77], - "actions" : ["act_15"], + "action_ids" : [84], + "actions" : ["act_14"], "base_default_next" : null, "next_tables" : { - "act_15" : null + "act_14" : null }, "default_entry" : { - "action_id" : 77, + "action_id" : 84, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_16", + "name" : "tbl_act_15", "id" : 39, "source_info" : { "filename" : "include/bng.p4", @@ -17851,14 +19050,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [79], - "actions" : ["act_17"], + "action_ids" : [86], + "actions" : ["act_16"], "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6", "next_tables" : { - "act_17" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6" + "act_16" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6" }, "default_entry" : { - "action_id" : 79, + "action_id" : 86, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17877,7 +19076,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "fabric_metadata_t._bng_line_id39"], + "target" : ["scalars", "fabric_metadata_t._bng_line_id37"], "mask" : null }, { @@ -17899,22 +19098,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [19, 17], + "action_ids" : [21, 19], "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v6", "FabricIngress.bng_ingress.upstream.term_disabled"], "base_default_next" : null, "next_tables" : { - "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_17", + "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_16", "FabricIngress.bng_ingress.upstream.term_enabled_v6" : null }, "default_entry" : { - "action_id" : 17, + "action_id" : 19, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_17", + "name" : "tbl_act_16", "id" : 41, "source_info" : { "filename" : "include/bng.p4", @@ -17929,14 +19128,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [78], - "actions" : ["act_16"], + "action_ids" : [85], + "actions" : ["act_15"], "base_default_next" : null, "next_tables" : { - "act_16" : null + "act_15" : null }, "default_entry" : { - "action_id" : 78, + "action_id" : 85, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17955,7 +19154,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "fabric_metadata_t._bng_line_id39"], + "target" : ["scalars", "fabric_metadata_t._bng_line_id37"], "mask" : null } ], @@ -17965,12 +19164,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [3, 20, 21], + "action_ids" : [3, 22, 23], "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"], "base_default_next" : null, "next_tables" : { - "__HIT__" : "tbl_act_18", - "__MISS__" : "tbl_act_19" + "__HIT__" : "tbl_act_17", + "__MISS__" : "tbl_act_18" }, "default_entry" : { "action_id" : 3, @@ -17980,7 +19179,7 @@ } }, { - "name" : "tbl_act_18", + "name" : "tbl_act_17", "id" : 43, "key" : [], "match_type" : "exact", @@ -17989,21 +19188,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [80], - "actions" : ["act_18"], + "action_ids" : [87], + "actions" : ["act_17"], "base_default_next" : "node_70", "next_tables" : { - "act_18" : "node_70" + "act_17" : "node_70" }, "default_entry" : { - "action_id" : 80, + "action_id" : 87, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_19", + "name" : "tbl_act_18", "id" : 44, "key" : [], "match_type" : "exact", @@ -18012,14 +19211,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [81], - "actions" : ["act_19"], + "action_ids" : [88], + "actions" : ["act_18"], "base_default_next" : "node_70", "next_tables" : { - "act_19" : "node_70" + "act_18" : "node_70" }, "default_entry" : { - "action_id" : 81, + "action_id" : 88, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18038,7 +19237,7 @@ { "match_type" : "ternary", "name" : "line_id", - "target" : ["scalars", "fabric_metadata_t._bng_line_id39"], + "target" : ["scalars", "fabric_metadata_t._bng_line_id37"], "mask" : null }, { @@ -18066,22 +19265,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [22, 24], + "action_ids" : [24, 26], "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"], "base_default_next" : null, "next_tables" : { - "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_20", - "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_21" + "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_19", + "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_20" }, "default_entry" : { - "action_id" : 24, + "action_id" : 26, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_20", + "name" : "tbl_act_19", "id" : 46, "source_info" : { "filename" : "include/bng.p4", @@ -18096,21 +19295,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [82], - "actions" : ["act_20"], + "action_ids" : [89], + "actions" : ["act_19"], "base_default_next" : null, "next_tables" : { - "act_20" : null + "act_19" : null }, "default_entry" : { - "action_id" : 82, + "action_id" : 89, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_21", + "name" : "tbl_act_20", "id" : 47, "source_info" : { "filename" : "include/bng.p4", @@ -18125,14 +19324,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [83], - "actions" : ["act_21"], + "action_ids" : [90], + "actions" : ["act_20"], "base_default_next" : null, "next_tables" : { - "act_21" : null + "act_20" : null }, "default_entry" : { - "action_id" : 83, + "action_id" : 90, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18151,7 +19350,7 @@ { "match_type" : "ternary", "name" : "line_id", - "target" : ["scalars", "fabric_metadata_t._bng_line_id39"], + "target" : ["scalars", "fabric_metadata_t._bng_line_id37"], "mask" : null }, { @@ -18173,22 +19372,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [23, 25], + "action_ids" : [25, 27], "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"], "base_default_next" : null, "next_tables" : { - "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_22", - "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_23" + "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_21", + "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_22" }, "default_entry" : { - "action_id" : 25, + "action_id" : 27, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_22", + "name" : "tbl_act_21", "id" : 49, "source_info" : { "filename" : "include/bng.p4", @@ -18203,21 +19402,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [84], - "actions" : ["act_22"], + "action_ids" : [91], + "actions" : ["act_21"], "base_default_next" : null, "next_tables" : { - "act_22" : null + "act_21" : null }, "default_entry" : { - "action_id" : 84, + "action_id" : 91, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_23", + "name" : "tbl_act_22", "id" : 50, "source_info" : { "filename" : "include/bng.p4", @@ -18232,14 +19431,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [85], - "actions" : ["act_23"], + "action_ids" : [92], + "actions" : ["act_22"], "base_default_next" : null, "next_tables" : { - "act_23" : null + "act_22" : null }, "default_entry" : { - "action_id" : 85, + "action_id" : 92, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18306,72 +19505,58 @@ } }, "true_next" : "tbl_act", - "false_next" : "tbl_act_0" + "false_next" : "FabricIngress.spgw.interfaces" }, { - "name" : "node_6", + "name" : "node_7", "id" : 1, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" - }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw32"] - } - } - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "bool", - "value" : true + "type" : "field", + "value" : ["scalars", "spgw_tmp"] } } }, - "true_next" : "tbl_act_1", - "false_next" : "node_8" + "true_next" : "node_8", + "false_next" : "node_19" }, { "name" : "node_8", "id" : 2, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 246, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface30"] + }, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] - } - } + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "node_9", - "false_next" : "node_19" + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_10" }, { - "name" : "node_9", + "name" : "node_10", "id" : 3, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 253, - "column" : 12, + "line" : 250, + "column" : 16, "source_fragment" : "hdr.gtpu.isValid()" }, "expression" : { @@ -18385,50 +19570,43 @@ } } }, - "true_next" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", - "false_next" : "FabricIngress.spgw_ingress.downlink_pdr_lookup" + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" }, { "name" : "node_13", "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 266, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" + "line" : 255, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", + "op" : "!=", "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap37"] - } - } + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface30"] }, "right" : { - "type" : "bool", - "value" : true + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "FabricIngress.spgw_ingress.decap_gtpu", - "false_next" : "FabricIngress.spgw_ingress.far_lookup" + "true_next" : "tbl_act_2", + "false_next" : "node_15" }, { - "name" : "node_16", + "name" : "node_15", "id" : 5, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 277, - "column" : 12, - "source_fragment" : "fabric_md.spgw.far_dropped == true" + "line" : 260, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" }, "expression" : { "type" : "expression", @@ -18441,7 +19619,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped34"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap34"] } } }, @@ -18451,8 +19629,8 @@ } } }, - "true_next" : "tbl_act_3", - "false_next" : "tbl_act_4" + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" }, { "name" : "node_19", @@ -18474,7 +19652,7 @@ } } }, - "true_next" : "tbl_act_5", + "true_next" : "tbl_act_4", "false_next" : "node_21" }, { @@ -18497,7 +19675,7 @@ } } }, - "true_next" : "tbl_act_6", + "true_next" : "tbl_act_5", "false_next" : "node_23" }, { @@ -18527,7 +19705,7 @@ } } }, - "true_next" : "tbl_act_7", + "true_next" : "tbl_act_6", "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { @@ -18723,7 +19901,7 @@ } } }, - "true_next" : "tbl_act_8", + "true_next" : "tbl_act_7", "false_next" : "node_45" }, { @@ -18749,7 +19927,7 @@ } } }, - "true_next" : "tbl_act_9", + "true_next" : "tbl_act_8", "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" }, { @@ -18772,7 +19950,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_sink46"] + "value" : ["scalars", "fabric_metadata_t._int_meta_sink44"] } } }, @@ -18782,7 +19960,7 @@ } } }, - "true_next" : "tbl_act_10", + "true_next" : "tbl_act_9", "false_next" : "FabricIngress.bng_ingress.t_line_map" }, { @@ -18805,7 +19983,7 @@ } } }, - "true_next" : "tbl_act_11", + "true_next" : "tbl_act_10", "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map" }, { @@ -18822,7 +20000,7 @@ } } }, - "true_next" : "tbl_act_14", + "true_next" : "tbl_act_13", "false_next" : "node_59" }, { @@ -18893,7 +20071,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_16" + "true_next" : "tbl_act_15" }, { "name" : "node_70", @@ -18972,7 +20150,7 @@ "init_table" : "node_81", "tables" : [ { - "name" : "tbl_act_24", + "name" : "tbl_act_23", "id" : 51, "source_info" : { "filename" : "include/control/packetio.p4", @@ -18987,21 +20165,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [138], - "actions" : ["act_24"], + "action_ids" : [145], + "actions" : ["act_23"], "base_default_next" : "node_83", "next_tables" : { - "act_24" : "node_83" + "act_23" : "node_83" }, "default_entry" : { - "action_id" : 138, + "action_id" : 145, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_25", + "name" : "tbl_act_24", "id" : 52, "source_info" : { "filename" : "include/control/packetio.p4", @@ -19016,21 +20194,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [139], - "actions" : ["act_25"], + "action_ids" : [146], + "actions" : ["act_24"], "base_default_next" : "node_85", "next_tables" : { - "act_25" : "node_85" + "act_24" : "node_85" }, "default_entry" : { - "action_id" : 139, + "action_id" : 146, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_26", + "name" : "tbl_act_25", "id" : 53, "source_info" : { "filename" : "include/control/next.p4", @@ -19045,14 +20223,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [140], - "actions" : ["act_26"], + "action_ids" : [147], + "actions" : ["act_25"], "base_default_next" : "node_87", "next_tables" : { - "act_26" : "node_87" + "act_25" : "node_87" }, "default_entry" : { - "action_id" : 140, + "action_id" : 147, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19074,14 +20252,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [131], + "action_ids" : [138], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "node_91", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "node_91" }, "default_entry" : { - "action_id" : 131, + "action_id" : 138, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19103,14 +20281,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [132], + "action_ids" : [139], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "node_91", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "node_91" }, "default_entry" : { - "action_id" : 132, + "action_id" : 139, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19132,14 +20310,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [133], + "action_ids" : [140], "actions" : ["FabricEgress.egress_next.push_vlan"], "base_default_next" : "tbl_egress_next_push_inner_vlan", "next_tables" : { "FabricEgress.egress_next.push_vlan" : "tbl_egress_next_push_inner_vlan" }, "default_entry" : { - "action_id" : 133, + "action_id" : 140, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19161,21 +20339,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [135], + "action_ids" : [142], "actions" : ["FabricEgress.egress_next.push_inner_vlan"], "base_default_next" : "node_101", "next_tables" : { "FabricEgress.egress_next.push_inner_vlan" : "node_101" }, "default_entry" : { - "action_id" : 135, + "action_id" : 142, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_27", + "name" : "tbl_act_26", "id" : 58, "source_info" : { "filename" : "include/control/next.p4", @@ -19190,14 +20368,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [143], - "actions" : ["act_29"], + "action_ids" : [150], + "actions" : ["act_28"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { - "act_29" : "FabricEgress.egress_next.egress_vlan" + "act_28" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 143, + "action_id" : 150, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19232,22 +20410,22 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [136, 89], + "action_ids" : [143, 96], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], "base_default_next" : null, "next_tables" : { - "__HIT__" : "tbl_act_28", - "__MISS__" : "tbl_act_29" + "__HIT__" : "tbl_act_27", + "__MISS__" : "tbl_act_28" }, "default_entry" : { - "action_id" : 89, + "action_id" : 96, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_28", + "name" : "tbl_act_27", "id" : 60, "key" : [], "match_type" : "exact", @@ -19256,21 +20434,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [141], - "actions" : ["act_27"], + "action_ids" : [148], + "actions" : ["act_26"], "base_default_next" : "node_98", "next_tables" : { - "act_27" : "node_98" + "act_26" : "node_98" }, "default_entry" : { - "action_id" : 141, + "action_id" : 148, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_29", + "name" : "tbl_act_28", "id" : 61, "key" : [], "match_type" : "exact", @@ -19279,14 +20457,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [142], - "actions" : ["act_28"], + "action_ids" : [149], + "actions" : ["act_27"], "base_default_next" : "node_98", "next_tables" : { - "act_28" : "node_98" + "act_27" : "node_98" }, "default_entry" : { - "action_id" : 142, + "action_id" : 149, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19308,21 +20486,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [134], + "action_ids" : [141], "actions" : ["FabricEgress.egress_next.push_vlan"], "base_default_next" : "node_101", "next_tables" : { "FabricEgress.egress_next.push_vlan" : "node_101" }, "default_entry" : { - "action_id" : 134, + "action_id" : 141, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_30", + "name" : "tbl_act_29", "id" : 63, "source_info" : { "filename" : "include/control/next.p4", @@ -19337,21 +20515,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [145], - "actions" : ["act_31"], + "action_ids" : [152], + "actions" : ["act_30"], "base_default_next" : "node_103", "next_tables" : { - "act_31" : "node_103" + "act_30" : "node_103" }, "default_entry" : { - "action_id" : 145, + "action_id" : 152, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_31", + "name" : "tbl_act_30", "id" : 64, "source_info" : { "filename" : "include/control/next.p4", @@ -19366,21 +20544,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [144], - "actions" : ["act_30"], - "base_default_next" : "tbl_act_36", + "action_ids" : [151], + "actions" : ["act_29"], + "base_default_next" : "node_113", "next_tables" : { - "act_30" : "tbl_act_36" + "act_29" : "node_113" }, "default_entry" : { - "action_id" : 144, + "action_id" : 151, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_32", + "name" : "tbl_act_31", "id" : 65, "source_info" : { "filename" : "include/control/next.p4", @@ -19395,21 +20573,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [147], - "actions" : ["act_33"], + "action_ids" : [154], + "actions" : ["act_32"], "base_default_next" : "node_107", "next_tables" : { - "act_33" : "node_107" + "act_32" : "node_107" }, "default_entry" : { - "action_id" : 147, + "action_id" : 154, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_33", + "name" : "tbl_act_32", "id" : 66, "source_info" : { "filename" : "include/control/next.p4", @@ -19424,21 +20602,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [146], - "actions" : ["act_32"], - "base_default_next" : "tbl_act_36", + "action_ids" : [153], + "actions" : ["act_31"], + "base_default_next" : "node_113", "next_tables" : { - "act_32" : "tbl_act_36" + "act_31" : "node_113" }, "default_entry" : { - "action_id" : 146, + "action_id" : 153, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_34", + "name" : "tbl_act_33", "id" : 67, "source_info" : { "filename" : "include/control/next.p4", @@ -19453,79 +20631,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [149], - "actions" : ["act_35"], - "base_default_next" : "node_111", - "next_tables" : { - "act_35" : "node_111" - }, - "default_entry" : { - "action_id" : 149, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_35", - "id" : 68, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 379, - "column" : 45, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [148], + "action_ids" : [156], "actions" : ["act_34"], - "base_default_next" : "tbl_act_36", - "next_tables" : { - "act_34" : "tbl_act_36" - }, - "default_entry" : { - "action_id" : 148, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_36", - "id" : 69, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [151], - "actions" : ["act_37"], - "base_default_next" : "node_114", + "base_default_next" : "node_111", "next_tables" : { - "act_37" : "node_114" + "act_34" : "node_111" }, "default_entry" : { - "action_id" : 151, + "action_id" : 156, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, - { - "name" : "tbl_act_37", - "id" : 70, + { + "name" : "tbl_act_34", + "id" : 68, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" + "filename" : "include/control/next.p4", + "line" : 379, + "column" : 45, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -19534,27 +20660,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [150], - "actions" : ["act_36"], - "base_default_next" : "node_116", + "action_ids" : [155], + "actions" : ["act_33"], + "base_default_next" : "node_113", "next_tables" : { - "act_36" : "node_116" + "act_33" : "node_113" }, "default_entry" : { - "action_id" : 150, + "action_id" : 155, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_38", - "id" : 71, + "name" : "tbl_spgw_gtpu_encap", + "id" : 69, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "line" : 330, + "column" : 16, + "source_fragment" : "gtpu_encap()" }, "key" : [], "match_type" : "exact", @@ -19563,27 +20689,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [152], - "actions" : ["act_38"], - "base_default_next" : "node_118", + "action_ids" : [144], + "actions" : ["FabricEgress.spgw.gtpu_encap"], + "base_default_next" : "node_116", "next_tables" : { - "act_38" : "node_118" + "FabricEgress.spgw.gtpu_encap" : "node_116" }, "default_entry" : { - "action_id" : 152, + "action_id" : 144, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw_egress_gtpu_encap", - "id" : 72, + "name" : "tbl_act_35", + "id" : 70, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 347, - "column" : 12, - "source_fragment" : "gtpu_encap()" + "line" : 333, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], "match_type" : "exact", @@ -19592,14 +20718,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [137], - "actions" : ["FabricEgress.spgw_egress.gtpu_encap"], - "base_default_next" : "node_120", + "action_ids" : [157], + "actions" : ["act_35"], + "base_default_next" : "node_118", "next_tables" : { - "FabricEgress.spgw_egress.gtpu_encap" : "node_120" + "act_35" : "node_118" }, "default_entry" : { - "action_id" : 137, + "action_id" : 157, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19607,7 +20733,7 @@ }, { "name" : "tbl_bng_egress_downstream_encap_v4", - "id" : 73, + "id" : 71, "source_info" : { "filename" : "include/bng.p4", "line" : 297, @@ -19621,14 +20747,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [92], + "action_ids" : [99], "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], - "base_default_next" : "node_125", + "base_default_next" : "node_123", "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v4" : "node_125" + "FabricEgress.bng_egress.downstream.encap_v4" : "node_123" }, "default_entry" : { - "action_id" : 92, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19636,7 +20762,7 @@ }, { "name" : "tbl_bng_egress_downstream_encap_v6", - "id" : 74, + "id" : 72, "source_info" : { "filename" : "include/bng.p4", "line" : 302, @@ -19650,14 +20776,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [93], + "action_ids" : [100], "actions" : ["FabricEgress.bng_egress.downstream.encap_v6"], - "base_default_next" : "node_125", + "base_default_next" : "node_123", "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v6" : "node_125" + "FabricEgress.bng_egress.downstream.encap_v6" : "node_123" }, "default_entry" : { - "action_id" : 93, + "action_id" : 100, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19665,7 +20791,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 75, + "id" : 73, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -19704,23 +20830,23 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [94, 86], + "action_ids" : [101, 93], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_128", + "base_default_next" : "node_126", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_128", - "nop" : "node_128" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_126", + "nop" : "node_126" }, "default_entry" : { - "action_id" : 86, + "action_id" : 93, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_39", - "id" : 76, + "name" : "tbl_act_36", + "id" : 74, "key" : [], "match_type" : "exact", "type" : "simple", @@ -19728,14 +20854,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [153], - "actions" : ["act_39"], + "action_ids" : [158], + "actions" : ["act_36"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "act_39" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + "act_36" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 153, + "action_id" : 158, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19743,7 +20869,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 77, + "id" : 75, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -19764,23 +20890,23 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95, 87], + "action_ids" : [102, 94], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_131", + "base_default_next" : "node_129", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_131", - "nop" : "node_131" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_129", + "nop" : "node_129" }, "default_entry" : { - "action_id" : 87, + "action_id" : 94, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_40", - "id" : 78, + "name" : "tbl_act_37", + "id" : 76, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -19794,14 +20920,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [154], - "actions" : ["act_40"], - "base_default_next" : "node_133", + "action_ids" : [159], + "actions" : ["act_37"], + "base_default_next" : "node_131", "next_tables" : { - "act_40" : "node_133" + "act_37" : "node_131" }, "default_entry" : { - "action_id" : 154, + "action_id" : 159, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19809,7 +20935,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 79, + "id" : 77, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -19830,7 +20956,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 90], + "action_ids" : [103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 97], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -19853,7 +20979,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 90, + "action_id" : 97, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -19873,7 +20999,7 @@ } ], "action_entry" : { - "action_id" : 96, + "action_id" : 103, "action_data" : [] }, "priority" : 1 @@ -19892,7 +21018,7 @@ } ], "action_entry" : { - "action_id" : 97, + "action_id" : 104, "action_data" : [] }, "priority" : 2 @@ -19911,7 +21037,7 @@ } ], "action_entry" : { - "action_id" : 98, + "action_id" : 105, "action_data" : [] }, "priority" : 3 @@ -19930,7 +21056,7 @@ } ], "action_entry" : { - "action_id" : 99, + "action_id" : 106, "action_data" : [] }, "priority" : 4 @@ -19949,7 +21075,7 @@ } ], "action_entry" : { - "action_id" : 100, + "action_id" : 107, "action_data" : [] }, "priority" : 5 @@ -19968,7 +21094,7 @@ } ], "action_entry" : { - "action_id" : 101, + "action_id" : 108, "action_data" : [] }, "priority" : 6 @@ -19987,7 +21113,7 @@ } ], "action_entry" : { - "action_id" : 102, + "action_id" : 109, "action_data" : [] }, "priority" : 7 @@ -20006,7 +21132,7 @@ } ], "action_entry" : { - "action_id" : 103, + "action_id" : 110, "action_data" : [] }, "priority" : 8 @@ -20025,7 +21151,7 @@ } ], "action_entry" : { - "action_id" : 104, + "action_id" : 111, "action_data" : [] }, "priority" : 9 @@ -20044,7 +21170,7 @@ } ], "action_entry" : { - "action_id" : 105, + "action_id" : 112, "action_data" : [] }, "priority" : 10 @@ -20063,7 +21189,7 @@ } ], "action_entry" : { - "action_id" : 106, + "action_id" : 113, "action_data" : [] }, "priority" : 11 @@ -20082,7 +21208,7 @@ } ], "action_entry" : { - "action_id" : 107, + "action_id" : 114, "action_data" : [] }, "priority" : 12 @@ -20101,7 +21227,7 @@ } ], "action_entry" : { - "action_id" : 108, + "action_id" : 115, "action_data" : [] }, "priority" : 13 @@ -20120,7 +21246,7 @@ } ], "action_entry" : { - "action_id" : 109, + "action_id" : 116, "action_data" : [] }, "priority" : 14 @@ -20139,7 +21265,7 @@ } ], "action_entry" : { - "action_id" : 110, + "action_id" : 117, "action_data" : [] }, "priority" : 15 @@ -20158,7 +21284,7 @@ } ], "action_entry" : { - "action_id" : 111, + "action_id" : 118, "action_data" : [] }, "priority" : 16 @@ -20167,7 +21293,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 80, + "id" : 78, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -20188,30 +21314,30 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 91], + "action_ids" : [119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 98], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_act_41", + "base_default_next" : "tbl_act_38", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_41", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_41", - "NoAction" : "tbl_act_41" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_38", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_38", + "NoAction" : "tbl_act_38" }, "default_entry" : { - "action_id" : 91, + "action_id" : 98, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -20231,7 +21357,7 @@ } ], "action_entry" : { - "action_id" : 112, + "action_id" : 119, "action_data" : [] }, "priority" : 1 @@ -20250,7 +21376,7 @@ } ], "action_entry" : { - "action_id" : 113, + "action_id" : 120, "action_data" : [] }, "priority" : 2 @@ -20269,7 +21395,7 @@ } ], "action_entry" : { - "action_id" : 114, + "action_id" : 121, "action_data" : [] }, "priority" : 3 @@ -20288,7 +21414,7 @@ } ], "action_entry" : { - "action_id" : 115, + "action_id" : 122, "action_data" : [] }, "priority" : 4 @@ -20307,7 +21433,7 @@ } ], "action_entry" : { - "action_id" : 116, + "action_id" : 123, "action_data" : [] }, "priority" : 5 @@ -20326,7 +21452,7 @@ } ], "action_entry" : { - "action_id" : 117, + "action_id" : 124, "action_data" : [] }, "priority" : 6 @@ -20345,7 +21471,7 @@ } ], "action_entry" : { - "action_id" : 118, + "action_id" : 125, "action_data" : [] }, "priority" : 7 @@ -20364,7 +21490,7 @@ } ], "action_entry" : { - "action_id" : 119, + "action_id" : 126, "action_data" : [] }, "priority" : 8 @@ -20383,7 +21509,7 @@ } ], "action_entry" : { - "action_id" : 120, + "action_id" : 127, "action_data" : [] }, "priority" : 9 @@ -20402,7 +21528,7 @@ } ], "action_entry" : { - "action_id" : 121, + "action_id" : 128, "action_data" : [] }, "priority" : 10 @@ -20421,7 +21547,7 @@ } ], "action_entry" : { - "action_id" : 122, + "action_id" : 129, "action_data" : [] }, "priority" : 11 @@ -20440,7 +21566,7 @@ } ], "action_entry" : { - "action_id" : 123, + "action_id" : 130, "action_data" : [] }, "priority" : 12 @@ -20459,7 +21585,7 @@ } ], "action_entry" : { - "action_id" : 124, + "action_id" : 131, "action_data" : [] }, "priority" : 13 @@ -20478,7 +21604,7 @@ } ], "action_entry" : { - "action_id" : 125, + "action_id" : 132, "action_data" : [] }, "priority" : 14 @@ -20497,7 +21623,7 @@ } ], "action_entry" : { - "action_id" : 126, + "action_id" : 133, "action_data" : [] }, "priority" : 15 @@ -20516,7 +21642,7 @@ } ], "action_entry" : { - "action_id" : 127, + "action_id" : 134, "action_data" : [] }, "priority" : 16 @@ -20524,8 +21650,8 @@ ] }, { - "name" : "tbl_act_41", - "id" : 81, + "name" : "tbl_act_38", + "id" : 79, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -20539,22 +21665,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [156], - "actions" : ["act_42"], - "base_default_next" : "node_137", + "action_ids" : [161], + "actions" : ["act_39"], + "base_default_next" : "node_135", "next_tables" : { - "act_42" : "node_137" + "act_39" : "node_135" }, "default_entry" : { - "action_id" : 156, + "action_id" : 161, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_42", - "id" : 82, + "name" : "tbl_act_39", + "id" : 80, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -20568,22 +21694,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [155], - "actions" : ["act_41"], - "base_default_next" : "node_139", + "action_ids" : [160], + "actions" : ["act_38"], + "base_default_next" : "node_137", "next_tables" : { - "act_41" : "node_139" + "act_38" : "node_137" }, "default_entry" : { - "action_id" : 155, + "action_id" : 160, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_43", - "id" : 83, + "name" : "tbl_act_40", + "id" : 81, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -20597,22 +21723,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [157], - "actions" : ["act_43"], - "base_default_next" : "node_141", + "action_ids" : [162], + "actions" : ["act_40"], + "base_default_next" : "node_139", "next_tables" : { - "act_43" : "node_141" + "act_40" : "node_139" }, "default_entry" : { - "action_id" : 157, + "action_id" : 162, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_44", - "id" : 84, + "name" : "tbl_act_41", + "id" : 82, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -20626,14 +21752,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [158], - "actions" : ["act_44"], - "base_default_next" : "node_143", + "action_ids" : [163], + "actions" : ["act_41"], + "base_default_next" : "node_141", "next_tables" : { - "act_44" : "node_143" + "act_41" : "node_141" }, "default_entry" : { - "action_id" : 158, + "action_id" : 163, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20641,7 +21767,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "id" : 85, + "id" : 83, "source_info" : { "filename" : "include/int/int_report.p4", "line" : 87, @@ -20655,15 +21781,15 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [128, 88], + "action_ids" : [135, 95], "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"], - "base_default_next" : "node_145", + "base_default_next" : "node_143", "next_tables" : { - "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_145", - "nop" : "node_145" + "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_143", + "nop" : "node_143" }, "default_entry" : { - "action_id" : 88, + "action_id" : 95, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -20671,7 +21797,7 @@ }, { "name" : "tbl_process_int_main_process_int_sink_restore_header", - "id" : 86, + "id" : 84, "source_info" : { "filename" : "include/int/int_sink.p4", "line" : 53, @@ -20685,14 +21811,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [129], + "action_ids" : [136], "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"], "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink", "next_tables" : { "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" }, "default_entry" : { - "action_id" : 129, + "action_id" : 136, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20700,7 +21826,7 @@ }, { "name" : "tbl_process_int_main_process_int_sink_int_sink", - "id" : 87, + "id" : 85, "source_info" : { "filename" : "include/int/int_sink.p4", "line" : 54, @@ -20714,14 +21840,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [130], + "action_ids" : [137], "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], "base_default_next" : null, "next_tables" : { "FabricEgress.process_int_main.process_int_sink.int_sink" : null }, "default_entry" : { - "action_id" : 130, + "action_id" : 137, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20760,7 +21886,7 @@ } } }, - "true_next" : "tbl_act_24", + "true_next" : "tbl_act_23", "false_next" : "node_83" }, { @@ -20786,7 +21912,7 @@ } } }, - "true_next" : "tbl_act_25", + "true_next" : "tbl_act_24", "false_next" : "node_85" }, { @@ -20839,7 +21965,7 @@ } } }, - "true_next" : "tbl_act_26", + "true_next" : "tbl_act_25", "false_next" : "node_87" }, { @@ -20922,7 +22048,7 @@ } }, "true_next" : "tbl_egress_next_push_vlan", - "false_next" : "tbl_act_27" + "false_next" : "tbl_act_26" }, { "name" : "node_98", @@ -21000,7 +22126,7 @@ } } }, - "true_next" : "tbl_act_30", + "true_next" : "tbl_act_29", "false_next" : "node_105" }, { @@ -21026,8 +22152,8 @@ } } }, - "true_next" : "tbl_act_31", - "false_next" : "tbl_act_36" + "true_next" : "tbl_act_30", + "false_next" : "node_113" }, { "name" : "node_105", @@ -21069,7 +22195,7 @@ } } }, - "true_next" : "tbl_act_32", + "true_next" : "tbl_act_31", "false_next" : "node_109" }, { @@ -21095,8 +22221,8 @@ } } }, - "true_next" : "tbl_act_33", - "false_next" : "tbl_act_36" + "true_next" : "tbl_act_32", + "false_next" : "node_113" }, { "name" : "node_109", @@ -21138,8 +22264,8 @@ } } }, - "true_next" : "tbl_act_34", - "false_next" : "tbl_act_36" + "true_next" : "tbl_act_33", + "false_next" : "node_113" }, { "name" : "node_111", @@ -21164,17 +22290,17 @@ } } }, - "true_next" : "tbl_act_35", - "false_next" : "tbl_act_36" + "true_next" : "tbl_act_34", + "false_next" : "node_113" }, { - "name" : "node_114", + "name" : "node_113", "id" : 40, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 343, + "line" : 328, "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" + "source_fragment" : "fabric_md.spgw.skip_spgw == false" }, "expression" : { "type" : "expression", @@ -21187,51 +22313,60 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw32"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw31"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, - "true_next" : "tbl_act_37", - "false_next" : "node_116" + "true_next" : "node_114", + "false_next" : "node_118" }, { - "name" : "node_116", + "name" : "node_114", "id" : 41, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "expression", "value" : { "op" : "d2b", "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap33"] } } + }, + "right" : { + "type" : "bool", + "value" : true } } }, - "true_next" : "tbl_act_38", - "false_next" : "node_120" + "true_next" : "tbl_spgw_gtpu_encap", + "false_next" : "node_116" }, { - "name" : "node_118", + "name" : "node_116", "id" : 42, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 346, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + "line" : 332, + "column" : 16, + "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr == false" }, "expression" : { "type" : "expression", @@ -21244,21 +22379,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap36"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr35"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, - "true_next" : "tbl_spgw_egress_gtpu_encap", - "false_next" : "node_120" + "true_next" : "tbl_act_35", + "false_next" : "node_118" }, { - "name" : "node_120", + "name" : "node_118", "id" : 43, "source_info" : { "filename" : "include/bng.p4", @@ -21272,7 +22407,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._bng_type38"] + "value" : ["scalars", "fabric_metadata_t._bng_type36"] }, "right" : { "type" : "hexstr", @@ -21280,11 +22415,11 @@ } } }, - "true_next" : "node_121", - "false_next" : "node_125" + "true_next" : "node_119", + "false_next" : "node_123" }, { - "name" : "node_121", + "name" : "node_119", "id" : 44, "source_info" : { "filename" : "include/bng.p4", @@ -21304,10 +22439,10 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v4", - "false_next" : "node_123" + "false_next" : "node_121" }, { - "name" : "node_123", + "name" : "node_121", "id" : 45, "source_info" : { "filename" : "include/bng.p4", @@ -21327,10 +22462,10 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v6", - "false_next" : "node_125" + "false_next" : "node_123" }, { - "name" : "node_125", + "name" : "node_123", "id" : 46, "source_info" : { "filename" : "include/int/int_main.p4", @@ -21407,10 +22542,10 @@ } }, "false_next" : null, - "true_next" : "node_126" + "true_next" : "node_124" }, { - "name" : "node_126", + "name" : "node_124", "id" : 47, "source_info" : { "filename" : "include/int/int_main.p4", @@ -21429,7 +22564,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_source44"] + "value" : ["scalars", "fabric_metadata_t._int_meta_source42"] } } }, @@ -21440,10 +22575,10 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_128" + "false_next" : "node_126" }, { - "name" : "node_128", + "name" : "node_126", "id" : 48, "source_info" : { "filename" : "include/int/int_main.p4", @@ -21463,10 +22598,10 @@ } }, "false_next" : null, - "true_next" : "tbl_act_39" + "true_next" : "tbl_act_36" }, { - "name" : "node_131", + "name" : "node_129", "id" : 49, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -21485,7 +22620,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_transit45"] + "value" : ["scalars", "fabric_metadata_t._int_meta_transit43"] } } }, @@ -21495,11 +22630,11 @@ } } }, - "true_next" : "tbl_act_40", - "false_next" : "node_133" + "true_next" : "tbl_act_37", + "false_next" : "node_131" }, { - "name" : "node_133", + "name" : "node_131", "id" : 50, "expression" : { "type" : "expression", @@ -21520,10 +22655,10 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "false_next" : "node_143" + "false_next" : "node_141" }, { - "name" : "node_137", + "name" : "node_135", "id" : 51, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -21542,11 +22677,11 @@ } } }, - "true_next" : "tbl_act_42", - "false_next" : "node_139" + "true_next" : "tbl_act_39", + "false_next" : "node_137" }, { - "name" : "node_139", + "name" : "node_137", "id" : 52, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -21565,11 +22700,11 @@ } } }, - "true_next" : "tbl_act_43", - "false_next" : "node_141" + "true_next" : "tbl_act_40", + "false_next" : "node_139" }, { - "name" : "node_141", + "name" : "node_139", "id" : 53, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -21588,11 +22723,11 @@ } } }, - "true_next" : "tbl_act_44", - "false_next" : "node_143" + "true_next" : "tbl_act_41", + "false_next" : "node_141" }, { - "name" : "node_143", + "name" : "node_141", "id" : 54, "source_info" : { "filename" : "include/int/int_main.p4", @@ -21615,10 +22750,10 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "false_next" : "node_145" + "false_next" : "node_143" }, { - "name" : "node_145", + "name" : "node_143", "id" : 55, "source_info" : { "filename" : "include/int/int_main.p4", @@ -21637,7 +22772,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_sink46"] + "value" : ["scalars", "fabric_metadata_t._int_meta_sink44"] } } }, @@ -21685,7 +22820,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index 1d379f5595a..dd55cdeb872 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -697,9 +697,9 @@ tables { } tables { preamble { - id: 33584493 - name: "FabricIngress.spgw_ingress.interface_lookup" - alias: "interface_lookup" + id: 33557250 + name: "FabricIngress.spgw.interfaces" + alias: "interfaces" } match_fields { id: 1 @@ -714,16 +714,21 @@ tables { match_type: EXACT } action_refs { - id: 16797935 + id: 16810012 } - const_default_action_id: 16797935 + action_refs { + id: 16783042 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 16783042 size: 128 } tables { preamble { - id: 33586958 - name: "FabricIngress.spgw_ingress.downlink_pdr_lookup" - alias: "downlink_pdr_lookup" + id: 33566601 + name: "FabricIngress.spgw.downlink_pdrs" + alias: "downlink_pdrs" } match_fields { id: 1 @@ -732,16 +737,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33587070 - name: "FabricIngress.spgw_ingress.uplink_pdr_lookup" - alias: "uplink_pdr_lookup" + id: 33606410 + name: "FabricIngress.spgw.uplink_pdrs" + alias: "uplink_pdrs" } match_fields { id: 1 @@ -756,16 +765,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33613200 - name: "FabricIngress.spgw_ingress.far_lookup" - alias: "far_lookup" + id: 33599560 + name: "FabricIngress.spgw.fars" + alias: "fars" } match_fields { id: 1 @@ -774,12 +787,15 @@ tables { match_type: EXACT } action_refs { - id: 16834935 + id: 16820307 } action_refs { - id: 16787606 + id: 16814785 } - const_default_action_id: 16834935 + action_refs { + id: 16814681 + } + const_default_action_id: 16820307 size: 2048 } tables { @@ -900,6 +916,13 @@ actions { alias: "nop" } } +actions { + preamble { + id: 16800567 + name: "NoAction" + alias: "NoAction" + } +} actions { preamble { id: 16778827 @@ -1314,31 +1337,28 @@ actions { } actions { preamble { - id: 16797935 - name: "FabricIngress.spgw_ingress.set_source_iface" - alias: "set_source_iface" + id: 16810012 + name: "FabricIngress.spgw.load_iface" + alias: "load_iface" } params { id: 1 name: "src_iface" bitwidth: 8 } - params { - id: 2 - name: "direction" - bitwidth: 2 - } - params { - id: 3 - name: "skip_spgw" - bitwidth: 1 +} +actions { + preamble { + id: 16783042 + name: "FabricIngress.spgw.iface_miss" + alias: "iface_miss" } } actions { preamble { - id: 16799934 - name: "FabricIngress.spgw_ingress.set_pdr_attributes" - alias: "set_pdr_attributes" + id: 16800614 + name: "FabricIngress.spgw.load_pdr" + alias: "load_pdr" } params { id: 1 @@ -1358,9 +1378,9 @@ actions { } actions { preamble { - id: 16834935 - name: "FabricIngress.spgw_ingress.load_normal_far_attributes" - alias: "load_normal_far_attributes" + id: 16820307 + name: "FabricIngress.spgw.load_normal_far" + alias: "load_normal_far" } params { id: 1 @@ -1375,9 +1395,9 @@ actions { } actions { preamble { - id: 16787606 - name: "FabricIngress.spgw_ingress.load_tunnel_far_attributes" - alias: "load_tunnel_far_attributes" + id: 16814785 + name: "FabricIngress.spgw.load_tunnel_far" + alias: "load_tunnel_far" } params { id: 1 @@ -1412,37 +1432,39 @@ actions { } actions { preamble { - id: 16829280 - name: "FabricIngress.spgw_ingress.decap_inner_tcp" - alias: "decap_inner_tcp" + id: 16814681 + name: "FabricIngress.spgw.load_dbuf_far" + alias: "load_dbuf_far" } -} -actions { - preamble { - id: 16815878 - name: "FabricIngress.spgw_ingress.decap_inner_udp" - alias: "decap_inner_udp" + params { + id: 1 + name: "drop" + bitwidth: 1 } -} -actions { - preamble { - id: 16801274 - name: "FabricIngress.spgw_ingress.decap_inner_icmp" - alias: "decap_inner_icmp" + params { + id: 2 + name: "notify_cp" + bitwidth: 1 } -} -actions { - preamble { - id: 16830582 - name: "FabricIngress.spgw_ingress.decap_inner_unknown" - alias: "decap_inner_unknown" + params { + id: 3 + name: "tunnel_src_port" + bitwidth: 16 } -} -actions { - preamble { - id: 16800567 - name: "NoAction" - alias: "NoAction" + params { + id: 4 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 5 + name: "tunnel_dst_addr" + bitwidth: 32 + } + params { + id: 6 + name: "teid" + bitwidth: 32 } } actions { @@ -1616,9 +1638,9 @@ counters { } counters { preamble { - id: 302029884 - name: "FabricIngress.spgw_ingress.pdr_counter" - alias: "spgw_ingress.pdr_counter" + id: 302043952 + name: "FabricIngress.spgw.pdr_counter" + alias: "FabricIngress.spgw.pdr_counter" } spec { unit: BOTH @@ -1638,9 +1660,9 @@ counters { } counters { preamble { - id: 302012289 - name: "FabricEgress.spgw_egress.pdr_counter" - alias: "spgw_egress.pdr_counter" + id: 302049491 + name: "FabricEgress.spgw.pdr_counter" + alias: "FabricEgress.spgw.pdr_counter" } spec { unit: BOTH diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index e2d828c283c..1151554b9f0 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -2698,7 +2698,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 165, + "line" : 155, "column" : 36, "source_fragment" : "4; ..." } @@ -3116,7 +3116,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 161, + "line" : 151, "column" : 24, "source_fragment" : "0x1; ..." } @@ -9204,7 +9204,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -9283,7 +9283,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json index 656ae2204aa..f5064b58fa2 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -5,14 +5,13 @@ "id" : 0, "fields" : [ ["last_ipv4_dscp_0", 6, false], - ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 4, false], + ["tmp_2", 16, false], + ["tmp_3", 4, false], ["tmp", 32, false], - ["tmp_3", 32, false], - ["spgw_ingress_hasReturned", 1, false], + ["tmp_0", 32, false], + ["spgw_tmp", 1, false], ["egress_next_tmp", 1, false], - ["spgw_egress_hasReturned", 1, false], ["process_int_main_process_int_transit_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], @@ -33,30 +32,27 @@ ["fabric_metadata_t._ipv4_dst_addr16", 32, false], ["fabric_metadata_t._inner_l4_sport17", 16, false], ["fabric_metadata_t._inner_l4_dport18", 16, false], - ["fabric_metadata_t._spgw_direction19", 2, false], - ["fabric_metadata_t._spgw_ipv4_len20", 16, false], - ["fabric_metadata_t._spgw_teid21", 32, false], - ["fabric_metadata_t._spgw_tunnel_src_port22", 16, false], - ["fabric_metadata_t._spgw_tunnel_src_addr23", 32, false], - ["fabric_metadata_t._spgw_tunnel_dst_addr24", 32, false], - ["fabric_metadata_t._spgw_ctr_id25", 32, false], - ["fabric_metadata_t._spgw_far_id26", 32, false], - ["fabric_metadata_t._spgw_src_iface27", 8, false], - ["fabric_metadata_t._spgw_skip_spgw28", 1, false], - ["fabric_metadata_t._spgw_pdr_hit29", 1, false], - ["fabric_metadata_t._spgw_far_dropped30", 1, false], - ["fabric_metadata_t._spgw_notify_spgwc31", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_encap32", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_decap33", 1, false], - ["fabric_metadata_t._int_meta_source34", 1, false], - ["fabric_metadata_t._int_meta_transit35", 1, false], - ["fabric_metadata_t._int_meta_sink36", 1, false], - ["fabric_metadata_t._int_meta_switch_id37", 32, false], - ["fabric_metadata_t._int_meta_new_words38", 8, false], - ["fabric_metadata_t._int_meta_new_bytes39", 16, false], - ["fabric_metadata_t._int_meta_ig_tstamp40", 32, false], - ["fabric_metadata_t._int_meta_eg_tstamp41", 32, false], - ["_padding_0", 4, false] + ["fabric_metadata_t._spgw_ipv4_len19", 16, false], + ["fabric_metadata_t._spgw_teid20", 32, false], + ["fabric_metadata_t._spgw_tunnel_src_port21", 16, false], + ["fabric_metadata_t._spgw_tunnel_src_addr22", 32, false], + ["fabric_metadata_t._spgw_tunnel_dst_addr23", 32, false], + ["fabric_metadata_t._spgw_ctr_id24", 32, false], + ["fabric_metadata_t._spgw_far_id25", 32, false], + ["fabric_metadata_t._spgw_src_iface26", 8, false], + ["fabric_metadata_t._spgw_skip_spgw27", 1, false], + ["fabric_metadata_t._spgw_notify_spgwc28", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_encap29", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_decap30", 1, false], + ["fabric_metadata_t._spgw_skip_egress_pdr_ctr31", 1, false], + ["fabric_metadata_t._int_meta_source32", 1, false], + ["fabric_metadata_t._int_meta_transit33", 1, false], + ["fabric_metadata_t._int_meta_sink34", 1, false], + ["fabric_metadata_t._int_meta_switch_id35", 32, false], + ["fabric_metadata_t._int_meta_new_words36", 8, false], + ["fabric_metadata_t._int_meta_new_bytes37", 16, false], + ["fabric_metadata_t._int_meta_ig_tstamp38", 32, false], + ["fabric_metadata_t._int_meta_eg_tstamp39", 32, false] ] }, { @@ -652,7 +648,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -690,7 +686,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -711,7 +707,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -737,7 +733,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -847,7 +843,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] }, { "type" : "lookahead", @@ -873,7 +869,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] } ] }, @@ -1504,11 +1500,11 @@ "is_direct" : false }, { - "name" : "FabricIngress.spgw_ingress.pdr_counter", + "name" : "FabricIngress.spgw.pdr_counter", "id" : 12, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 180, + "line" : 109, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -1540,11 +1536,11 @@ } }, { - "name" : "FabricEgress.spgw_egress.pdr_counter", + "name" : "FabricEgress.spgw.pdr_counter", "id" : 15, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 301, + "line" : 286, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -1620,7 +1616,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -1789,16 +1785,28 @@ "primitives" : [] }, { - "name" : "FabricIngress.process_set_source_sink.int_set_source", + "name" : "NoAction", "id" : 8, "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 9, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.process_set_source_sink.int_set_source", + "id" : 10, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_source34"] + "value" : ["scalars", "fabric_metadata_t._int_meta_source32"] }, { "type" : "expression", @@ -1826,7 +1834,7 @@ }, { "name" : "FabricIngress.filtering.deny", - "id" : 9, + "id" : 11, "runtime_data" : [], "primitives" : [ { @@ -1891,13 +1899,13 @@ }, { "name" : "FabricIngress.filtering.permit", - "id" : 10, + "id" : 12, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.filtering.permit_with_internal_vlan", - "id" : 11, + "id" : 13, "runtime_data" : [ { "name" : "vlan_id", @@ -1928,7 +1936,7 @@ }, { "name" : "FabricIngress.filtering.set_forwarding_type", - "id" : 12, + "id" : 14, "runtime_data" : [ { "name" : "fwd_type", @@ -1959,7 +1967,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_bridging", - "id" : 13, + "id" : 15, "runtime_data" : [ { "name" : "next_id", @@ -1990,7 +1998,7 @@ }, { "name" : "FabricIngress.forwarding.pop_mpls_and_next", - "id" : 14, + "id" : 16, "runtime_data" : [ { "name" : "next_id", @@ -2040,7 +2048,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v4", - "id" : 15, + "id" : 17, "runtime_data" : [ { "name" : "next_id", @@ -2071,13 +2079,13 @@ }, { "name" : "FabricIngress.forwarding.nop_routing_v4", - "id" : 16, + "id" : 18, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.acl.set_next_id_acl", - "id" : 17, + "id" : 19, "runtime_data" : [ { "name" : "next_id", @@ -2108,7 +2116,7 @@ }, { "name" : "FabricIngress.acl.punt_to_cpu", - "id" : 18, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -2163,7 +2171,7 @@ }, { "name" : "FabricIngress.acl.set_clone_session_id", - "id" : 19, + "id" : 21, "runtime_data" : [ { "name" : "clone_id", @@ -2194,7 +2202,7 @@ }, { "name" : "FabricIngress.acl.drop", - "id" : 20, + "id" : 22, "runtime_data" : [], "primitives" : [ { @@ -2245,13 +2253,13 @@ }, { "name" : "FabricIngress.acl.nop_acl", - "id" : 21, + "id" : 23, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.next.set_vlan", - "id" : 22, + "id" : 24, "runtime_data" : [ { "name" : "vlan_id", @@ -2282,7 +2290,7 @@ }, { "name" : "FabricIngress.next.output_xconnect", - "id" : 23, + "id" : 25, "runtime_data" : [ { "name" : "port_num", @@ -2313,7 +2321,7 @@ }, { "name" : "FabricIngress.next.set_next_id_xconnect", - "id" : 24, + "id" : 26, "runtime_data" : [ { "name" : "next_id", @@ -2344,7 +2352,7 @@ }, { "name" : "FabricIngress.next.output_hashed", - "id" : 25, + "id" : 27, "runtime_data" : [ { "name" : "port_num", @@ -2375,7 +2383,7 @@ }, { "name" : "FabricIngress.next.routing_hashed", - "id" : 26, + "id" : 28, "runtime_data" : [ { "name" : "port_num", @@ -2452,7 +2460,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_hashed", - "id" : 27, + "id" : 29, "runtime_data" : [ { "name" : "port_num", @@ -2552,7 +2560,7 @@ }, { "name" : "FabricIngress.next.set_mcast_group_id", - "id" : 28, + "id" : 30, "runtime_data" : [ { "name" : "group_id", @@ -2611,40 +2619,27 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.set_source_iface", - "id" : 29, - "runtime_data" : [ - { - "name" : "src_iface", - "bitwidth" : 8 - }, - { - "name" : "direction", - "bitwidth" : 2 - }, - { - "name" : "skip_spgw", - "bitwidth" : 1 - } - ], + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 31, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_src_iface27"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 50, - "column" : 33, - "source_fragment" : "= src_iface; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -2652,18 +2647,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_direction19"] + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 51, - "column" : 33, - "source_fragment" : "= direction; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } }, { @@ -2671,87 +2666,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, - "column" : 33, - "source_fragment" : "= (bool)skip_spgw; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 30, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 - }, - { - "name" : "far_id", - "bitwidth" : 32 }, - { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit29"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 31, - "source_fragment" : "= true; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -2759,18 +2704,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -2778,238 +2723,142 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id26"] + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 31, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 }, { - "name" : "far_id", - "bitwidth" : 32 + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } }, { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 - } - ], - "primitives" : [ - { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit29"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "header", + "value" : "gtpu" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 31, - "source_fragment" : "= true; ..." + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] - }, - { - "type" : "runtime_data", - "value" : 0 + "type" : "header", + "value" : "udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id26"] + "type" : "header", + "value" : "tcp" }, { - "type" : "runtime_data", - "value" : 1 + "type" : "header", + "value" : "inner_tcp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_tcp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.load_normal_far_attributes", + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "id" : 32, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 - }, - { - "name" : "notify_cp", - "bitwidth" : 1 - } - ], + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 138, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -3017,109 +2866,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc31"] + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 139, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.load_tunnel_far_attributes", - "id" : 33, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 - }, - { - "name" : "notify_cp", - "bitwidth" : 1 - }, - { - "name" : "tunnel_src_port", - "bitwidth" : 16 - }, - { - "name" : "tunnel_src_addr", - "bitwidth" : 32 - }, - { - "name" : "tunnel_dst_addr", - "bitwidth" : 32 }, - { - "name" : "teid", - "bitwidth" : 32 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 148, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -3127,38 +2904,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc31"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 149, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -3166,47 +2923,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap32"] + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 151, - "column" : 40, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid21"] - }, - { - "type" : "runtime_data", - "value" : 5 + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, - "column" : 28, - "source_fragment" : "= teid; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -3214,139 +2942,108 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port22"] + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, - { - "type" : "runtime_data", - "value" : 2 - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 153, - "column" : 39, - "source_fragment" : "= tunnel_src_port; ..." - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr23"] - }, - { - "type" : "runtime_data", - "value" : 3 + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 154, - "column" : 39, - "source_fragment" : "= tunnel_src_addr; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr24"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "runtime_data", - "value" : 4 + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 155, - "column" : 39, - "source_fragment" : "= tunnel_dst_addr; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] - }, - { - "type" : "runtime_data", - "value" : 3 + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 157, - "column" : 32, - "source_fragment" : "= tunnel_src_addr; ..." + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] - }, - { - "type" : "runtime_data", - "value" : 4 + "type" : "header", + "value" : "gtpu" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 158, - "column" : 32, - "source_fragment" : "= tunnel_dst_addr; ..." + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + "type" : "header", + "value" : "udp" }, { - "type" : "runtime_data", - "value" : 2 + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 159, - "column" : 27, - "source_fragment" : "= tunnel_src_port; ..." + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_dport14"] - }, - { - "type" : "hexstr", - "value" : "0x0868" + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 160, - "column" : 27, - "source_fragment" : "= 2152; ..." + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.decap_inner_tcp", - "id" : 34, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", + "id" : 33, "runtime_data" : [], "primitives" : [ { @@ -3363,7 +3060,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3382,7 +3079,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -3401,7 +3098,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 40, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } @@ -3420,7 +3117,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 41, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } @@ -3439,7 +3136,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 42, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_sport; ..." } @@ -3458,7 +3155,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 43, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_dport; ..." } @@ -3477,7 +3174,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, + "line" : 45, "column" : 8, "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } @@ -3492,7 +3189,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, + "line" : 46, "column" : 8, "source_fragment" : "hdr.inner_ipv4.setInvalid()" } @@ -3507,7 +3204,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 47, "column" : 8, "source_fragment" : "hdr.gtpu.setInvalid()" } @@ -3522,7 +3219,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 199, + "line" : 65, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -3532,18 +3229,18 @@ "parameters" : [ { "type" : "header", - "value" : "tcp" + "value" : "icmp" }, { "type" : "header", - "value" : "inner_tcp" + "value" : "inner_icmp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 200, + "line" : 66, "column" : 8, - "source_fragment" : "hdr.tcp = hdr.inner_tcp" + "source_fragment" : "hdr.icmp = hdr.inner_icmp" } }, { @@ -3551,21 +3248,21 @@ "parameters" : [ { "type" : "header", - "value" : "inner_tcp" + "value" : "inner_icmp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 201, + "line" : 67, "column" : 8, - "source_fragment" : "hdr.inner_tcp.setInvalid()" + "source_fragment" : "hdr.inner_icmp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.decap_inner_udp", - "id" : 35, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -3582,7 +3279,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3601,7 +3298,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -3620,7 +3317,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 40, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } @@ -3639,7 +3336,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 41, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } @@ -3658,7 +3355,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 42, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_sport; ..." } @@ -3677,7 +3374,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 43, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_dport; ..." } @@ -3696,7 +3393,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, + "line" : 45, "column" : 8, "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } @@ -3711,84 +3408,1543 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", + "id" : 35, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "tcp" + }, + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", + "id" : 36, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + }, + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", + "id" : 37, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "icmp" + }, + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 66, + "column" : 8, + "source_fragment" : "hdr.icmp = hdr.inner_icmp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", + "id" : 38, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_iface", + "id" : 39, + "runtime_data" : [ + { + "name" : "src_iface", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 121, + "column" : 33, + "source_fragment" : "= src_iface; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 122, + "column" : 33, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.iface_miss", + "id" : 40, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 108, + "column" : 44, + "source_fragment" : "8w0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 126, + "column" : 33, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 41, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 42, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_normal_far", + "id" : 43, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 186, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next7"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 187, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 188, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_tunnel_far", + "id" : 44, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + }, + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next7"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "gtpu" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] }, { - "type" : "header", - "value" : "inner_udp" + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 205, - "column" : 8, - "source_fragment" : "hdr.udp = hdr.inner_udp" + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, - "column" : 8, - "source_fragment" : "hdr.inner_udp.setInvalid()" + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_icmp", - "id" : 36, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -3796,18 +4952,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 205, + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -3818,15 +4974,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 207, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -3837,15 +4993,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 208, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -3856,15 +5012,15 @@ "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 209, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -3875,139 +5031,250 @@ "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 210, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "source_fragment" : "= 2152; ..." } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_dbuf_far", + "id" : 45, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 }, { - "op" : "assign_header", + "name" : "notify_cp", + "bitwidth" : 1 + }, + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] }, { - "type" : "header", - "value" : "inner_ipv4" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next7"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "gtpu" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "icmp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] }, { - "type" : "header", - "value" : "inner_icmp" + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.icmp = hdr.inner_icmp" + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_icmp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, - "column" : 8, - "source_fragment" : "hdr.inner_icmp.setInvalid()" + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_unknown", - "id" : 37, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -4015,18 +5282,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 205, + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -4037,15 +5304,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 207, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -4056,15 +5323,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 208, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -4075,15 +5342,15 @@ "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 209, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -4094,86 +5361,51 @@ "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 210, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "source_fragment" : "= 2152; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr31"] }, { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "gtpu" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "udp" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 221, + "column" : 43, + "source_fragment" : "= true; ..." } } ] }, { "name" : "act", - "id" : 38, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -4253,7 +5485,7 @@ }, { "name" : "act_0", - "id" : 39, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -4261,7 +5493,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -4272,7 +5504,7 @@ "left" : null, "right" : { "type" : "bool", - "value" : false + "value" : true } } } @@ -4283,7 +5515,7 @@ }, { "name" : "act_1", - "id" : 40, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -4291,7 +5523,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -4302,24 +5534,18 @@ "left" : null, "right" : { "type" : "bool", - "value" : true + "value" : false } } } } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - } + ] } ] }, { "name" : "act_2", - "id" : 41, + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -4327,90 +5553,25 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricIngress.spgw_ingress.pdr_counter" + "value" : "FabricIngress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } ] }, { - "name" : "act_3", - "id" : 42, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_next7"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 281, - "column" : 32, - "source_fragment" : "= true; ..." - } - } - ] - }, - { - "name" : "act_4", - "id" : 43, + "name" : "act_3", + "id" : 50, "runtime_data" : [], "primitives" : [ { @@ -4418,7 +5579,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] }, { "type" : "field", @@ -4427,16 +5588,16 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "= hdr.ipv4.total_len; ..." } } ] }, { - "name" : "act_5", - "id" : 44, + "name" : "act_4", + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -4499,8 +5660,8 @@ ] }, { - "name" : "act_6", - "id" : 45, + "name" : "act_5", + "id" : 52, "runtime_data" : [], "primitives" : [ { @@ -4525,8 +5686,8 @@ ] }, { - "name" : "act_7", - "id" : 46, + "name" : "act_6", + "id" : 53, "runtime_data" : [], "primitives" : [ { @@ -4583,8 +5744,8 @@ ] }, { - "name" : "act_8", - "id" : 47, + "name" : "act_7", + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -4592,7 +5753,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -4628,7 +5789,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] } ], "source_info" : { @@ -4642,37 +5803,37 @@ }, { "name" : "nop", - "id" : 48, + "id" : 55, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 49, + "id" : 56, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 50, + "id" : 57, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 51, + "id" : 58, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 52, + "id" : 59, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 53, + "id" : 60, "runtime_data" : [ { "name" : "max_hop", @@ -4740,7 +5901,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 165, + "line" : 155, "column" : 36, "source_fragment" : "4; ..." } @@ -5158,7 +6319,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 161, + "line" : 151, "column" : 24, "source_fragment" : "0x1; ..." } @@ -5167,7 +6328,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 54, + "id" : 61, "runtime_data" : [ { "name" : "switch_id", @@ -5180,7 +6341,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_transit35"] + "value" : ["scalars", "fabric_metadata_t._int_meta_transit33"] }, { "type" : "expression", @@ -5209,7 +6370,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] }, { "type" : "runtime_data", @@ -5227,13 +6388,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 55, + "id" : 62, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 56, + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -5307,7 +6468,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -5321,7 +6482,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -5349,7 +6510,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -5363,7 +6524,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -5390,7 +6551,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 57, + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -5432,7 +6593,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -5446,7 +6607,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -5474,7 +6635,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -5488,7 +6649,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -5515,7 +6676,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 58, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -5623,7 +6784,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -5637,7 +6798,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -5665,7 +6826,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -5679,7 +6840,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -5706,7 +6867,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 59, + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -5793,7 +6954,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -5807,7 +6968,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -5835,7 +6996,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -5849,7 +7010,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -5876,7 +7037,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 60, + "id" : 67, "runtime_data" : [], "primitives" : [ { @@ -6029,7 +7190,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6043,7 +7204,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -6071,7 +7232,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -6085,7 +7246,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -6112,7 +7273,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 61, + "id" : 68, "runtime_data" : [], "primitives" : [ { @@ -6233,7 +7394,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6247,7 +7408,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -6275,7 +7436,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -6289,7 +7450,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -6316,7 +7477,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 62, + "id" : 69, "runtime_data" : [], "primitives" : [ { @@ -6503,7 +7664,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6517,7 +7678,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -6545,7 +7706,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -6559,7 +7720,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -6586,7 +7747,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 63, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -6613,7 +7774,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -6628,7 +7789,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6642,7 +7803,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -6670,7 +7831,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -6684,7 +7845,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -6711,7 +7872,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 64, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -6804,7 +7965,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -6819,7 +7980,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6833,7 +7994,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -6861,7 +8022,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -6875,7 +8036,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -6902,7 +8063,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 65, + "id" : 72, "runtime_data" : [], "primitives" : [ { @@ -6963,7 +8124,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -6978,7 +8139,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -6992,7 +8153,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -7020,7 +8181,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -7034,7 +8195,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -7061,7 +8222,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 66, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -7188,7 +8349,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -7203,7 +8364,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -7217,7 +8378,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -7245,7 +8406,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -7259,7 +8420,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -7286,7 +8447,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 67, + "id" : 74, "runtime_data" : [], "primitives" : [ { @@ -7392,7 +8553,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -7407,7 +8568,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -7421,7 +8582,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -7449,7 +8610,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -7463,7 +8624,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -7490,7 +8651,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 68, + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -7662,7 +8823,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -7677,7 +8838,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -7691,7 +8852,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -7719,7 +8880,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -7733,7 +8894,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -7760,7 +8921,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 69, + "id" : 76, "runtime_data" : [], "primitives" : [ { @@ -7900,7 +9061,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -7915,7 +9076,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -7929,7 +9090,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -7957,7 +9118,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -7971,7 +9132,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -7998,7 +9159,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 70, + "id" : 77, "runtime_data" : [], "primitives" : [ { @@ -8204,7 +9365,7 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id37"] + "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"] } ], "source_info" : { @@ -8219,7 +9380,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -8233,7 +9394,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -8261,7 +9422,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -8275,7 +9436,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -8302,13 +9463,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 71, + "id" : 78, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 72, + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -8350,7 +9511,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -8364,7 +9525,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -8392,7 +9553,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -8406,7 +9567,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -8433,7 +9594,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 73, + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -8494,7 +9655,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -8508,7 +9669,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -8536,7 +9697,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -8550,7 +9711,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -8577,7 +9738,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 74, + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -8672,7 +9833,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -8686,7 +9847,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -8714,7 +9875,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -8728,7 +9889,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -8755,7 +9916,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 75, + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -8820,7 +9981,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -8834,7 +9995,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -8862,7 +10023,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -8876,7 +10037,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -8903,7 +10064,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 76, + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -9002,7 +10163,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9016,7 +10177,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9044,7 +10205,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9058,7 +10219,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9085,7 +10246,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 77, + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -9203,7 +10364,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9217,7 +10378,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9245,7 +10406,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9259,7 +10420,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9286,7 +10447,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 78, + "id" : 85, "runtime_data" : [], "primitives" : [ { @@ -9438,7 +10599,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9452,7 +10613,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9480,7 +10641,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9494,7 +10655,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9521,7 +10682,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 79, + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -9563,7 +10724,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9577,7 +10738,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9605,7 +10766,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9619,7 +10780,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9646,7 +10807,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 80, + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -9722,7 +10883,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9736,7 +10897,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9764,7 +10925,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9778,7 +10939,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9805,7 +10966,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 81, + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -9900,7 +11061,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -9914,7 +11075,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -9942,7 +11103,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -9956,7 +11117,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -9983,7 +11144,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 82, + "id" : 89, "runtime_data" : [], "primitives" : [ { @@ -10112,7 +11273,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -10126,7 +11287,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -10154,7 +11315,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -10168,7 +11329,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -10195,7 +11356,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 83, + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -10294,7 +11455,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -10308,7 +11469,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -10336,7 +11497,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -10350,7 +11511,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -10377,7 +11538,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 84, + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -10510,7 +11671,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -10524,7 +11685,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -10552,7 +11713,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -10566,7 +11727,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -10593,7 +11754,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 85, + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -10745,7 +11906,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -10759,7 +11920,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -10787,7 +11948,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -10801,7 +11962,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -10828,7 +11989,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 86, + "id" : 93, "runtime_data" : [], "primitives" : [ { @@ -11014,7 +12175,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, { "type" : "expression", @@ -11028,7 +12189,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] }, "right" : { "type" : "hexstr", @@ -11056,7 +12217,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, { "type" : "expression", @@ -11070,7 +12231,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] }, "right" : { "type" : "hexstr", @@ -11097,7 +12258,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 87, + "id" : 94, "runtime_data" : [], "primitives" : [ { @@ -11138,7 +12299,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 88, + "id" : 95, "runtime_data" : [], "primitives" : [ { @@ -11246,7 +12407,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -11255,7 +12416,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 89, + "id" : 96, "runtime_data" : [], "primitives" : [ { @@ -11325,7 +12486,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -11353,7 +12514,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 90, + "id" : 97, "runtime_data" : [], "primitives" : [ { @@ -11374,8 +12535,8 @@ ] }, { - "name" : "FabricEgress.spgw_egress.gtpu_encap", - "id" : 91, + "name" : "FabricEgress.spgw.gtpu_encap", + "id" : 98, "runtime_data" : [], "primitives" : [ { @@ -11388,7 +12549,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 306, + "line" : 291, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.setValid()" } @@ -11407,7 +12568,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 307, + "line" : 292, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.version = 4" } @@ -11426,7 +12587,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 143, + "line" : 133, "column" : 28, "source_fragment" : "5; ..." } @@ -11445,7 +12606,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 309, + "line" : 294, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } @@ -11464,7 +12625,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 310, + "line" : 295, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } @@ -11506,7 +12667,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 311, + "line" : 296, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } @@ -11525,7 +12686,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 313, + "line" : 298, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } @@ -11544,7 +12705,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 314, + "line" : 299, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } @@ -11563,7 +12724,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 315, + "line" : 300, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } @@ -11582,7 +12743,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 156, + "line" : 146, "column" : 32, "source_fragment" : "64; ..." } @@ -11601,7 +12762,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 140, + "line" : 130, "column" : 25, "source_fragment" : "17; ..." } @@ -11615,12 +12776,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr23"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 318, + "line" : 303, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } @@ -11634,12 +12795,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr24"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 319, + "line" : 304, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." } @@ -11658,7 +12819,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 320, + "line" : 305, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" } @@ -11673,7 +12834,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 322, + "line" : 307, "column" : 8, "source_fragment" : "hdr.gtpu_udp.setValid()" } @@ -11687,12 +12848,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port22"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 323, + "line" : 308, "column" : 8, "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." } @@ -11711,7 +12872,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 324, + "line" : 309, "column" : 8, "source_fragment" : "hdr.gtpu_udp.dport = 2152" } @@ -11735,7 +12896,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] }, "right" : { "type" : "hexstr", @@ -11753,7 +12914,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 325, + "line" : 310, "column" : 8, "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } @@ -11772,7 +12933,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 327, + "line" : 312, "column" : 8, "source_fragment" : "hdr.gtpu_udp.checksum = 0" } @@ -11787,7 +12948,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 330, + "line" : 315, "column" : 8, "source_fragment" : "hdr.outer_gtpu.setValid()" } @@ -11806,7 +12967,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 331, + "line" : 316, "column" : 8, "source_fragment" : "hdr.outer_gtpu.version = 0x01" } @@ -11825,7 +12986,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 317, "column" : 8, "source_fragment" : "hdr.outer_gtpu.pt = 0x01" } @@ -11844,7 +13005,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 318, "column" : 8, "source_fragment" : "hdr.outer_gtpu.spare = 0" } @@ -11863,7 +13024,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 334, + "line" : 319, "column" : 8, "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" } @@ -11882,7 +13043,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 335, + "line" : 320, "column" : 8, "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" } @@ -11901,7 +13062,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 336, + "line" : 321, "column" : 8, "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" } @@ -11920,7 +13081,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 322, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" } @@ -11934,12 +13095,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 338, + "line" : 323, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." } @@ -11953,12 +13114,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid21"] + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, + "line" : 324, "column" : 8, "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." } @@ -11966,8 +13127,8 @@ ] }, { - "name" : "act_9", - "id" : 92, + "name" : "act_8", + "id" : 99, "runtime_data" : [], "primitives" : [ { @@ -11983,8 +13144,8 @@ ] }, { - "name" : "act_10", - "id" : 93, + "name" : "act_9", + "id" : 100, "runtime_data" : [], "primitives" : [ { @@ -12034,8 +13195,8 @@ ] }, { - "name" : "act_11", - "id" : 94, + "name" : "act_10", + "id" : 101, "runtime_data" : [], "primitives" : [ { @@ -12056,8 +13217,8 @@ ] }, { - "name" : "act_12", - "id" : 95, + "name" : "act_11", + "id" : 102, "runtime_data" : [], "primitives" : [ { @@ -12086,8 +13247,8 @@ ] }, { - "name" : "act_13", - "id" : 96, + "name" : "act_12", + "id" : 103, "runtime_data" : [], "primitives" : [ { @@ -12116,8 +13277,8 @@ ] }, { - "name" : "act_14", - "id" : 97, + "name" : "act_13", + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -12138,8 +13299,8 @@ ] }, { - "name" : "act_15", - "id" : 98, + "name" : "act_14", + "id" : 105, "runtime_data" : [], "primitives" : [ { @@ -12187,115 +13348,30 @@ ] }, { - "name" : "act_16", - "id" : 99, - "runtime_data" : [], - "primitives" : [ - { - "op" : "mark_to_drop", - "parameters" : [ - { - "type" : "header", - "value" : "standard_metadata" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - } - } - ] - }, - { - "name" : "act_17", - "id" : 100, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" - } - } - ] - }, - { - "name" : "act_18", - "id" : 101, + "name" : "act_15", + "id" : 106, "runtime_data" : [], "primitives" : [ { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] - }, + "op" : "mark_to_drop", + "parameters" : [ { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "header", + "value" : "standard_metadata" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" + "filename" : "include/control/next.p4", + "line" : 374, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" } } ] }, { - "name" : "act_19", - "id" : 102, + "name" : "act_16", + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -12303,29 +13379,48 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] + "value" : ["ipv4", "ttl"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "b2d", - "left" : null, + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, "right" : { - "type" : "bool", - "value" : false + "type" : "hexstr", + "value" : "0xff" } } } } - ] + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 373, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } } ] }, { - "name" : "act_20", - "id" : 103, + "name" : "act_17", + "id" : 108, "runtime_data" : [], "primitives" : [ { @@ -12333,25 +13428,25 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricEgress.spgw_egress.pdr_counter" + "value" : "FabricEgress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, + "line" : 333, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } ] }, { - "name" : "act_21", - "id" : 104, + "name" : "act_18", + "id" : 109, "runtime_data" : [], "primitives" : [ { @@ -12380,8 +13475,8 @@ ] }, { - "name" : "act_22", - "id" : 105, + "name" : "act_19", + "id" : 110, "runtime_data" : [], "primitives" : [ { @@ -12416,8 +13511,8 @@ ] }, { - "name" : "act_23", - "id" : 106, + "name" : "act_20", + "id" : 111, "runtime_data" : [], "primitives" : [ { @@ -12443,7 +13538,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] } } }, @@ -12465,8 +13560,8 @@ ] }, { - "name" : "act_24", - "id" : 107, + "name" : "act_21", + "id" : 112, "runtime_data" : [], "primitives" : [ { @@ -12514,8 +13609,8 @@ ] }, { - "name" : "act_25", - "id" : 108, + "name" : "act_22", + "id" : 113, "runtime_data" : [], "primitives" : [ { @@ -12541,7 +13636,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes39"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"] } } }, @@ -12563,8 +13658,8 @@ ] }, { - "name" : "act_26", - "id" : 109, + "name" : "act_23", + "id" : 114, "runtime_data" : [], "primitives" : [ { @@ -12590,7 +13685,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_new_words38"] + "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"] } } }, @@ -12640,50 +13735,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], + "action_ids" : [46], "actions" : ["act"], - "base_default_next" : "tbl_act_0", + "base_default_next" : "FabricIngress.spgw.interfaces", "next_tables" : { - "act" : "tbl_act_0" + "act" : "FabricIngress.spgw.interfaces" }, "default_entry" : { - "action_id" : 38, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_0", + "name" : "FabricIngress.spgw.interfaces", "id" : 1, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [39], - "actions" : ["act_0"], - "base_default_next" : "FabricIngress.spgw_ingress.interface_lookup", - "next_tables" : { - "act_0" : "FabricIngress.spgw_ingress.interface_lookup" - }, - "default_entry" : { - "action_id" : 39, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.spgw_ingress.interface_lookup", - "id" : 2, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 55, + "line" : 130, "column" : 10, - "source_fragment" : "interface_lookup" + "source_fragment" : "interfaces" }, "key" : [ { @@ -12705,28 +13777,46 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [29], - "actions" : ["FabricIngress.spgw_ingress.set_source_iface"], - "base_default_next" : "node_6", + "action_ids" : [39, 40], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_0", + "__MISS__" : "tbl_act_1" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_0", + "id" : 2, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [47], + "actions" : ["act_0"], + "base_default_next" : "node_7", "next_tables" : { - "FabricIngress.spgw_ingress.set_source_iface" : "node_6" + "act_0" : "node_7" }, "default_entry" : { - "action_id" : 29, + "action_id" : 47, "action_const" : true, - "action_data" : ["0x0", "0x0", "0x1"], + "action_data" : [], "action_entry_const" : true } }, { "name" : "tbl_act_1", "id" : 3, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -12734,27 +13824,161 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], + "action_ids" : [48], "actions" : ["act_1"], - "base_default_next" : "node_8", + "base_default_next" : "node_7", "next_tables" : { - "act_1" : "node_8" + "act_1" : "node_7" }, "default_entry" : { - "action_id" : 40, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 93, + "line" : 75, + "column" : 10, + "source_fragment" : "decap_gtpu" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [31, 32, 33, 34], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_10", + "next_tables" : { + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_10" + }, + "default_entry" : { + "action_id" : 34, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 89, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 31, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 90, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 32, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 33, + "action_data" : [] + }, + "priority" : 3 + } + ] + }, + { + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 5, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, "column" : 10, - "source_fragment" : "uplink_pdr_lookup" + "source_fragment" : "uplink_pdrs" }, "key" : [ { @@ -12776,27 +14000,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [31], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [42, 9], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 31, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 9, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { - "name" : "FabricIngress.spgw_ingress.downlink_pdr_lookup", - "id" : 5, + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 6, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 82, + "line" : 157, "column" : 10, - "source_fragment" : "downlink_pdr_lookup" + "source_fragment" : "downlink_pdrs" }, "key" : [ { @@ -12812,26 +14037,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [41, 8], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 30, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 8, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { "name" : "tbl_act_2", - "id" : 6, + "id" : 7, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], @@ -12841,25 +14067,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], + "action_ids" : [49], "actions" : ["act_2"], - "base_default_next" : "node_13", + "base_default_next" : "node_15", "next_tables" : { - "act_2" : "node_13" + "act_2" : "node_15" }, "default_entry" : { - "action_id" : 41, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.decap_gtpu", - "id" : 7, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 8, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 75, "column" : 10, "source_fragment" : "decap_gtpu" }, @@ -12889,17 +14115,17 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [34, 35, 36, 37], - "actions" : ["FabricIngress.spgw_ingress.decap_inner_tcp", "FabricIngress.spgw_ingress.decap_inner_udp", "FabricIngress.spgw_ingress.decap_inner_icmp", "FabricIngress.spgw_ingress.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw_ingress.far_lookup", + "action_ids" : [35, 36, 37, 38], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.spgw_ingress.decap_inner_tcp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_udp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_icmp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_unknown" : "FabricIngress.spgw_ingress.far_lookup" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 37, + "action_id" : 38, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12908,7 +14134,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 233, + "line" : 89, "column" : 12, "source_fragment" : "(true, false, false) : decap_inner_tcp()" }, @@ -12927,7 +14153,7 @@ } ], "action_entry" : { - "action_id" : 34, + "action_id" : 35, "action_data" : [] }, "priority" : 1 @@ -12935,7 +14161,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 234, + "line" : 90, "column" : 12, "source_fragment" : "(false, true, false) : decap_inner_udp()" }, @@ -12954,7 +14180,7 @@ } ], "action_entry" : { - "action_id" : 35, + "action_id" : 36, "action_data" : [] }, "priority" : 2 @@ -12962,7 +14188,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 235, + "line" : 91, "column" : 12, "source_fragment" : "(false, false, true) : decap_inner_icmp()" }, @@ -12981,7 +14207,7 @@ } ], "action_entry" : { - "action_id" : 36, + "action_id" : 37, "action_data" : [] }, "priority" : 3 @@ -12989,19 +14215,19 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.far_lookup", - "id" : 8, + "name" : "FabricIngress.spgw.fars", + "id" : 9, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 163, + "line" : 224, "column" : 10, - "source_fragment" : "far_lookup" + "source_fragment" : "fars" }, "key" : [ { "match_type" : "exact", "name" : "far_id", - "target" : ["scalars", "fabric_metadata_t._spgw_far_id26"], + "target" : ["scalars", "fabric_metadata_t._spgw_far_id25"], "mask" : null } ], @@ -13011,56 +14237,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32, 33], - "actions" : ["FabricIngress.spgw_ingress.load_normal_far_attributes", "FabricIngress.spgw_ingress.load_tunnel_far_attributes"], - "base_default_next" : "node_16", + "action_ids" : [43, 44, 45], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_act_3", "next_tables" : { - "FabricIngress.spgw_ingress.load_normal_far_attributes" : "node_16", - "FabricIngress.spgw_ingress.load_tunnel_far_attributes" : "node_16" + "FabricIngress.spgw.load_normal_far" : "tbl_act_3", + "FabricIngress.spgw.load_tunnel_far" : "tbl_act_3", + "FabricIngress.spgw.load_dbuf_far" : "tbl_act_3" }, "default_entry" : { - "action_id" : 32, + "action_id" : 43, "action_const" : true, - "action_data" : ["0x1", "0x1"], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_act_3", - "id" : 9, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [42], - "actions" : ["act_3"], - "base_default_next" : "tbl_act_4", - "next_tables" : { - "act_3" : "tbl_act_4" - }, - "default_entry" : { - "action_id" : 42, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_4", "id" : 10, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "=" }, "key" : [], @@ -13070,21 +14268,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43], - "actions" : ["act_4"], + "action_ids" : [50], + "actions" : ["act_3"], "base_default_next" : "node_19", "next_tables" : { - "act_4" : "node_19" + "act_3" : "node_19" }, "default_entry" : { - "action_id" : 43, + "action_id" : 50, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_5", + "name" : "tbl_act_4", "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", @@ -13099,21 +14297,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [44], - "actions" : ["act_5"], + "action_ids" : [51], + "actions" : ["act_4"], "base_default_next" : "node_21", "next_tables" : { - "act_5" : "node_21" + "act_4" : "node_21" }, "default_entry" : { - "action_id" : 44, + "action_id" : 51, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_6", + "name" : "tbl_act_5", "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", @@ -13128,14 +14326,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], - "actions" : ["act_6"], + "action_ids" : [52], + "actions" : ["act_5"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { - "act_6" : "FabricIngress.filtering.ingress_port_vlan" + "act_5" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 45, + "action_id" : 52, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13176,7 +14374,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [9, 10, 11], + "action_ids" : [11, 12, 13], "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"], "base_default_next" : "FabricIngress.filtering.fwd_classifier", "next_tables" : { @@ -13185,7 +14383,7 @@ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier" }, "default_entry" : { - "action_id" : 9, + "action_id" : 11, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13232,14 +14430,14 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [12], + "action_ids" : [14], "actions" : ["FabricIngress.filtering.set_forwarding_type"], "base_default_next" : "node_25", "next_tables" : { "FabricIngress.filtering.set_forwarding_type" : "node_25" }, "default_entry" : { - "action_id" : 12, + "action_id" : 14, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true @@ -13274,7 +14472,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [13, 1], + "action_ids" : [15, 1], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -13311,7 +14509,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [14, 2], + "action_ids" : [16, 2], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -13348,7 +14546,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15, 16, 3], + "action_ids" : [17, 18, 3], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -13452,7 +14650,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [17, 18, 19, 20, 21], + "action_ids" : [19, 20, 21, 22, 23], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], "base_default_next" : "node_33", "next_tables" : { @@ -13463,7 +14661,7 @@ "FabricIngress.acl.nop_acl" : "node_33" }, "default_entry" : { - "action_id" : 21, + "action_id" : 23, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13498,7 +14696,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [23, 24, 5], + "action_ids" : [25, 26, 5], "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"], "base_default_next" : "FabricIngress.next.hashed", "next_tables" : { @@ -13537,7 +14735,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [25, 26, 27, 6], + "action_ids" : [27, 28, 29, 6], "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"], "base_default_next" : "FabricIngress.next.multicast", "next_tables" : { @@ -13570,7 +14768,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [28, 7], + "action_ids" : [30, 7], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], "base_default_next" : "FabricIngress.next.next_vlan", "next_tables" : { @@ -13607,7 +14805,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [22, 4], + "action_ids" : [24, 4], "actions" : ["FabricIngress.next.set_vlan", "nop"], "base_default_next" : "node_38", "next_tables" : { @@ -13622,7 +14820,7 @@ } }, { - "name" : "tbl_act_7", + "name" : "tbl_act_6", "id" : 23, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -13637,21 +14835,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46], - "actions" : ["act_7"], + "action_ids" : [53], + "actions" : ["act_6"], "base_default_next" : "node_40", "next_tables" : { - "act_7" : "node_40" + "act_6" : "node_40" }, "default_entry" : { - "action_id" : 46, + "action_id" : 53, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_8", + "name" : "tbl_act_7", "id" : 24, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -13666,14 +14864,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], - "actions" : ["act_8"], + "action_ids" : [54], + "actions" : ["act_7"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { - "act_8" : "FabricIngress.process_set_source_sink.tb_set_source" + "act_7" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 47, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13702,7 +14900,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [8, 0], + "action_ids" : [10, 0], "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], "base_default_next" : null, "next_tables" : { @@ -13777,72 +14975,58 @@ } }, "true_next" : "tbl_act", - "false_next" : "tbl_act_0" + "false_next" : "FabricIngress.spgw.interfaces" }, { - "name" : "node_6", + "name" : "node_7", "id" : 1, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" - }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] - } - } - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "bool", - "value" : true + "type" : "field", + "value" : ["scalars", "spgw_tmp"] } } }, - "true_next" : "tbl_act_1", - "false_next" : "node_8" + "true_next" : "node_8", + "false_next" : "node_19" }, { "name" : "node_8", "id" : 2, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 246, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] - } - } + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "node_9", - "false_next" : "node_19" + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_10" }, { - "name" : "node_9", + "name" : "node_10", "id" : 3, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 253, - "column" : 12, + "line" : 250, + "column" : 16, "source_fragment" : "hdr.gtpu.isValid()" }, "expression" : { @@ -13856,50 +15040,43 @@ } } }, - "true_next" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", - "false_next" : "FabricIngress.spgw_ingress.downlink_pdr_lookup" + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" }, { "name" : "node_13", "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 266, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" + "line" : 255, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", + "op" : "!=", "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] - } - } + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] }, "right" : { - "type" : "bool", - "value" : true + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "FabricIngress.spgw_ingress.decap_gtpu", - "false_next" : "FabricIngress.spgw_ingress.far_lookup" + "true_next" : "tbl_act_2", + "false_next" : "node_15" }, { - "name" : "node_16", + "name" : "node_15", "id" : 5, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 277, - "column" : 12, - "source_fragment" : "fabric_md.spgw.far_dropped == true" + "line" : 260, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" }, "expression" : { "type" : "expression", @@ -13912,7 +15089,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] } } }, @@ -13922,8 +15099,8 @@ } } }, - "true_next" : "tbl_act_3", - "false_next" : "tbl_act_4" + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" }, { "name" : "node_19", @@ -13945,7 +15122,7 @@ } } }, - "true_next" : "tbl_act_5", + "true_next" : "tbl_act_4", "false_next" : "node_21" }, { @@ -13975,7 +15152,7 @@ } } }, - "true_next" : "tbl_act_6", + "true_next" : "tbl_act_5", "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { @@ -14145,7 +15322,7 @@ } } }, - "true_next" : "tbl_act_7", + "true_next" : "tbl_act_6", "false_next" : "node_40" }, { @@ -14171,7 +15348,7 @@ } } }, - "true_next" : "tbl_act_8", + "true_next" : "tbl_act_7", "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" } ] @@ -14188,7 +15365,7 @@ "init_table" : "node_45", "tables" : [ { - "name" : "tbl_act_9", + "name" : "tbl_act_8", "id" : 26, "source_info" : { "filename" : "include/control/packetio.p4", @@ -14203,21 +15380,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [92], - "actions" : ["act_9"], + "action_ids" : [99], + "actions" : ["act_8"], "base_default_next" : "node_47", "next_tables" : { - "act_9" : "node_47" + "act_8" : "node_47" }, "default_entry" : { - "action_id" : 92, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_10", + "name" : "tbl_act_9", "id" : 27, "source_info" : { "filename" : "include/control/packetio.p4", @@ -14232,21 +15409,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [93], - "actions" : ["act_10"], + "action_ids" : [100], + "actions" : ["act_9"], "base_default_next" : "node_49", "next_tables" : { - "act_10" : "node_49" + "act_9" : "node_49" }, "default_entry" : { - "action_id" : 93, + "action_id" : 100, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_11", + "name" : "tbl_act_10", "id" : 28, "source_info" : { "filename" : "include/control/next.p4", @@ -14261,14 +15438,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [94], - "actions" : ["act_11"], + "action_ids" : [101], + "actions" : ["act_10"], "base_default_next" : "node_51", "next_tables" : { - "act_11" : "node_51" + "act_10" : "node_51" }, "default_entry" : { - "action_id" : 94, + "action_id" : 101, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14290,14 +15467,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87], + "action_ids" : [94], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 87, + "action_id" : 94, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14319,14 +15496,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [88], + "action_ids" : [95], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 88, + "action_id" : 95, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14361,22 +15538,22 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [90, 50], + "action_ids" : [97, 57], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], "base_default_next" : null, "next_tables" : { - "__HIT__" : "tbl_act_12", - "__MISS__" : "tbl_act_13" + "__HIT__" : "tbl_act_11", + "__MISS__" : "tbl_act_12" }, "default_entry" : { - "action_id" : 50, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_12", + "name" : "tbl_act_11", "id" : 32, "key" : [], "match_type" : "exact", @@ -14385,21 +15562,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95], - "actions" : ["act_12"], + "action_ids" : [102], + "actions" : ["act_11"], "base_default_next" : "node_58", "next_tables" : { - "act_12" : "node_58" + "act_11" : "node_58" }, "default_entry" : { - "action_id" : 95, + "action_id" : 102, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_13", + "name" : "tbl_act_12", "id" : 33, "key" : [], "match_type" : "exact", @@ -14408,14 +15585,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [96], - "actions" : ["act_13"], + "action_ids" : [103], + "actions" : ["act_12"], "base_default_next" : "node_58", "next_tables" : { - "act_13" : "node_58" + "act_12" : "node_58" }, "default_entry" : { - "action_id" : 96, + "action_id" : 103, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14437,84 +15614,26 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [89], + "action_ids" : [96], "actions" : ["FabricEgress.egress_next.push_vlan"], "base_default_next" : "node_61", "next_tables" : { "FabricEgress.egress_next.push_vlan" : "node_61" }, "default_entry" : { - "action_id" : 89, + "action_id" : 96, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_14", + "name" : "tbl_act_13", "id" : 35, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [98], - "actions" : ["act_15"], - "base_default_next" : "node_63", - "next_tables" : { - "act_15" : "node_63" - }, - "default_entry" : { - "action_id" : 98, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_15", - "id" : 36, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [97], - "actions" : ["act_14"], - "base_default_next" : "tbl_act_18", - "next_tables" : { - "act_14" : "tbl_act_18" - }, - "default_entry" : { - "action_id" : 97, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_16", - "id" : 37, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, + "line" : 369, + "column" : 25, "source_fragment" : "=" }, "key" : [], @@ -14524,26 +15643,26 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [100], - "actions" : ["act_17"], - "base_default_next" : "node_67", + "action_ids" : [105], + "actions" : ["act_14"], + "base_default_next" : "node_63", "next_tables" : { - "act_17" : "node_67" + "act_14" : "node_63" }, "default_entry" : { - "action_id" : 100, + "action_id" : 105, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_17", - "id" : 38, + "name" : "tbl_act_14", + "id" : 36, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, + "line" : 370, + "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -14553,22 +15672,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [99], - "actions" : ["act_16"], - "base_default_next" : "tbl_act_18", + "action_ids" : [104], + "actions" : ["act_13"], + "base_default_next" : "node_69", "next_tables" : { - "act_16" : "tbl_act_18" + "act_13" : "node_69" }, "default_entry" : { - "action_id" : 99, + "action_id" : 104, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_18", - "id" : 39, + "name" : "tbl_act_15", + "id" : 37, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 373, + "column" : 29, + "source_fragment" : "=" + }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -14576,27 +15701,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], - "actions" : ["act_19"], - "base_default_next" : "node_70", + "action_ids" : [107], + "actions" : ["act_16"], + "base_default_next" : "node_67", "next_tables" : { - "act_19" : "node_70" + "act_16" : "node_67" }, "default_entry" : { - "action_id" : 102, + "action_id" : 107, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_19", - "id" : 40, + "name" : "tbl_act_16", + "id" : 38, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" + "filename" : "include/control/next.p4", + "line" : 374, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -14605,27 +15730,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [101], - "actions" : ["act_18"], - "base_default_next" : "node_72", + "action_ids" : [106], + "actions" : ["act_15"], + "base_default_next" : "node_69", "next_tables" : { - "act_18" : "node_72" + "act_15" : "node_69" }, "default_entry" : { - "action_id" : 101, + "action_id" : 106, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_20", - "id" : 41, + "name" : "tbl_spgw_gtpu_encap", + "id" : 39, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "line" : 330, + "column" : 16, + "source_fragment" : "gtpu_encap()" }, "key" : [], "match_type" : "exact", @@ -14634,27 +15759,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103], - "actions" : ["act_20"], - "base_default_next" : "node_74", + "action_ids" : [98], + "actions" : ["FabricEgress.spgw.gtpu_encap"], + "base_default_next" : "node_72", "next_tables" : { - "act_20" : "node_74" + "FabricEgress.spgw.gtpu_encap" : "node_72" }, "default_entry" : { - "action_id" : 103, + "action_id" : 98, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw_egress_gtpu_encap", - "id" : 42, + "name" : "tbl_act_17", + "id" : 40, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 347, - "column" : 12, - "source_fragment" : "gtpu_encap()" + "line" : 333, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], "match_type" : "exact", @@ -14663,14 +15788,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [91], - "actions" : ["FabricEgress.spgw_egress.gtpu_encap"], - "base_default_next" : "node_76", + "action_ids" : [108], + "actions" : ["act_17"], + "base_default_next" : "node_74", "next_tables" : { - "FabricEgress.spgw_egress.gtpu_encap" : "node_76" + "act_17" : "node_74" }, "default_entry" : { - "action_id" : 91, + "action_id" : 108, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14678,7 +15803,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 43, + "id" : 41, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -14717,23 +15842,23 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53, 48], + "action_ids" : [60, 55], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_79", + "base_default_next" : "node_77", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_79", - "nop" : "node_79" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_77", + "nop" : "node_77" }, "default_entry" : { - "action_id" : 48, + "action_id" : 55, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_21", - "id" : 44, + "name" : "tbl_act_18", + "id" : 42, "key" : [], "match_type" : "exact", "type" : "simple", @@ -14741,14 +15866,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [104], - "actions" : ["act_21"], + "action_ids" : [109], + "actions" : ["act_18"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "act_21" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + "act_18" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 104, + "action_id" : 109, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14756,7 +15881,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 45, + "id" : 43, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -14777,23 +15902,23 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54, 49], + "action_ids" : [61, 56], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_82", + "base_default_next" : "node_80", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_82", - "nop" : "node_82" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_80", + "nop" : "node_80" }, "default_entry" : { - "action_id" : 49, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_22", - "id" : 46, + "name" : "tbl_act_19", + "id" : 44, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -14807,14 +15932,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [105], - "actions" : ["act_22"], - "base_default_next" : "node_84", + "action_ids" : [110], + "actions" : ["act_19"], + "base_default_next" : "node_82", "next_tables" : { - "act_22" : "node_84" + "act_19" : "node_82" }, "default_entry" : { - "action_id" : 105, + "action_id" : 110, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -14822,7 +15947,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 47, + "id" : 45, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -14843,7 +15968,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 51], + "action_ids" : [62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 58], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -14866,7 +15991,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 51, + "action_id" : 58, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -14886,7 +16011,7 @@ } ], "action_entry" : { - "action_id" : 55, + "action_id" : 62, "action_data" : [] }, "priority" : 1 @@ -14905,7 +16030,7 @@ } ], "action_entry" : { - "action_id" : 56, + "action_id" : 63, "action_data" : [] }, "priority" : 2 @@ -14924,7 +16049,7 @@ } ], "action_entry" : { - "action_id" : 57, + "action_id" : 64, "action_data" : [] }, "priority" : 3 @@ -14943,7 +16068,7 @@ } ], "action_entry" : { - "action_id" : 58, + "action_id" : 65, "action_data" : [] }, "priority" : 4 @@ -14962,7 +16087,7 @@ } ], "action_entry" : { - "action_id" : 59, + "action_id" : 66, "action_data" : [] }, "priority" : 5 @@ -14981,7 +16106,7 @@ } ], "action_entry" : { - "action_id" : 60, + "action_id" : 67, "action_data" : [] }, "priority" : 6 @@ -15000,7 +16125,7 @@ } ], "action_entry" : { - "action_id" : 61, + "action_id" : 68, "action_data" : [] }, "priority" : 7 @@ -15019,7 +16144,7 @@ } ], "action_entry" : { - "action_id" : 62, + "action_id" : 69, "action_data" : [] }, "priority" : 8 @@ -15038,7 +16163,7 @@ } ], "action_entry" : { - "action_id" : 63, + "action_id" : 70, "action_data" : [] }, "priority" : 9 @@ -15057,7 +16182,7 @@ } ], "action_entry" : { - "action_id" : 64, + "action_id" : 71, "action_data" : [] }, "priority" : 10 @@ -15076,7 +16201,7 @@ } ], "action_entry" : { - "action_id" : 65, + "action_id" : 72, "action_data" : [] }, "priority" : 11 @@ -15095,7 +16220,7 @@ } ], "action_entry" : { - "action_id" : 66, + "action_id" : 73, "action_data" : [] }, "priority" : 12 @@ -15114,7 +16239,7 @@ } ], "action_entry" : { - "action_id" : 67, + "action_id" : 74, "action_data" : [] }, "priority" : 13 @@ -15133,7 +16258,7 @@ } ], "action_entry" : { - "action_id" : 68, + "action_id" : 75, "action_data" : [] }, "priority" : 14 @@ -15152,7 +16277,7 @@ } ], "action_entry" : { - "action_id" : 69, + "action_id" : 76, "action_data" : [] }, "priority" : 15 @@ -15171,7 +16296,7 @@ } ], "action_entry" : { - "action_id" : 70, + "action_id" : 77, "action_data" : [] }, "priority" : 16 @@ -15180,7 +16305,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 48, + "id" : 46, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -15201,30 +16326,30 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 52], + "action_ids" : [78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 59], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_act_23", + "base_default_next" : "tbl_act_20", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_23", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_23", - "NoAction" : "tbl_act_23" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_20", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_20", + "NoAction" : "tbl_act_20" }, "default_entry" : { - "action_id" : 52, + "action_id" : 59, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -15244,7 +16369,7 @@ } ], "action_entry" : { - "action_id" : 71, + "action_id" : 78, "action_data" : [] }, "priority" : 1 @@ -15263,7 +16388,7 @@ } ], "action_entry" : { - "action_id" : 72, + "action_id" : 79, "action_data" : [] }, "priority" : 2 @@ -15282,7 +16407,7 @@ } ], "action_entry" : { - "action_id" : 73, + "action_id" : 80, "action_data" : [] }, "priority" : 3 @@ -15301,7 +16426,7 @@ } ], "action_entry" : { - "action_id" : 74, + "action_id" : 81, "action_data" : [] }, "priority" : 4 @@ -15320,7 +16445,7 @@ } ], "action_entry" : { - "action_id" : 75, + "action_id" : 82, "action_data" : [] }, "priority" : 5 @@ -15339,7 +16464,7 @@ } ], "action_entry" : { - "action_id" : 76, + "action_id" : 83, "action_data" : [] }, "priority" : 6 @@ -15358,7 +16483,7 @@ } ], "action_entry" : { - "action_id" : 77, + "action_id" : 84, "action_data" : [] }, "priority" : 7 @@ -15377,7 +16502,7 @@ } ], "action_entry" : { - "action_id" : 78, + "action_id" : 85, "action_data" : [] }, "priority" : 8 @@ -15396,7 +16521,7 @@ } ], "action_entry" : { - "action_id" : 79, + "action_id" : 86, "action_data" : [] }, "priority" : 9 @@ -15415,7 +16540,7 @@ } ], "action_entry" : { - "action_id" : 80, + "action_id" : 87, "action_data" : [] }, "priority" : 10 @@ -15434,7 +16559,7 @@ } ], "action_entry" : { - "action_id" : 81, + "action_id" : 88, "action_data" : [] }, "priority" : 11 @@ -15453,7 +16578,7 @@ } ], "action_entry" : { - "action_id" : 82, + "action_id" : 89, "action_data" : [] }, "priority" : 12 @@ -15472,7 +16597,7 @@ } ], "action_entry" : { - "action_id" : 83, + "action_id" : 90, "action_data" : [] }, "priority" : 13 @@ -15491,7 +16616,7 @@ } ], "action_entry" : { - "action_id" : 84, + "action_id" : 91, "action_data" : [] }, "priority" : 14 @@ -15510,7 +16635,7 @@ } ], "action_entry" : { - "action_id" : 85, + "action_id" : 92, "action_data" : [] }, "priority" : 15 @@ -15529,7 +16654,7 @@ } ], "action_entry" : { - "action_id" : 86, + "action_id" : 93, "action_data" : [] }, "priority" : 16 @@ -15537,8 +16662,8 @@ ] }, { - "name" : "tbl_act_23", - "id" : 49, + "name" : "tbl_act_20", + "id" : 47, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -15552,22 +16677,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [107], - "actions" : ["act_24"], - "base_default_next" : "node_88", + "action_ids" : [112], + "actions" : ["act_21"], + "base_default_next" : "node_86", "next_tables" : { - "act_24" : "node_88" + "act_21" : "node_86" }, "default_entry" : { - "action_id" : 107, + "action_id" : 112, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_24", - "id" : 50, + "name" : "tbl_act_21", + "id" : 48, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -15581,22 +16706,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [106], - "actions" : ["act_23"], - "base_default_next" : "node_90", + "action_ids" : [111], + "actions" : ["act_20"], + "base_default_next" : "node_88", "next_tables" : { - "act_23" : "node_90" + "act_20" : "node_88" }, "default_entry" : { - "action_id" : 106, + "action_id" : 111, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_25", - "id" : 51, + "name" : "tbl_act_22", + "id" : 49, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -15610,22 +16735,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [108], - "actions" : ["act_25"], - "base_default_next" : "node_92", + "action_ids" : [113], + "actions" : ["act_22"], + "base_default_next" : "node_90", "next_tables" : { - "act_25" : "node_92" + "act_22" : "node_90" }, "default_entry" : { - "action_id" : 108, + "action_id" : 113, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_26", - "id" : 52, + "name" : "tbl_act_23", + "id" : 50, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -15639,14 +16764,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [109], - "actions" : ["act_26"], + "action_ids" : [114], + "actions" : ["act_23"], "base_default_next" : null, "next_tables" : { - "act_26" : null + "act_23" : null }, "default_entry" : { - "action_id" : 109, + "action_id" : 114, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15685,7 +16810,7 @@ } } }, - "true_next" : "tbl_act_9", + "true_next" : "tbl_act_8", "false_next" : "node_47" }, { @@ -15711,7 +16836,7 @@ } } }, - "true_next" : "tbl_act_10", + "true_next" : "tbl_act_9", "false_next" : "node_49" }, { @@ -15764,7 +16889,7 @@ } } }, - "true_next" : "tbl_act_11", + "true_next" : "tbl_act_10", "false_next" : "node_51" }, { @@ -15892,7 +17017,7 @@ } } }, - "true_next" : "tbl_act_14", + "true_next" : "tbl_act_13", "false_next" : "node_65" }, { @@ -15918,8 +17043,8 @@ } } }, - "true_next" : "tbl_act_15", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_14", + "false_next" : "node_69" }, { "name" : "node_65", @@ -15961,8 +17086,8 @@ } } }, - "true_next" : "tbl_act_16", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_15", + "false_next" : "node_69" }, { "name" : "node_67", @@ -15987,17 +17112,17 @@ } } }, - "true_next" : "tbl_act_17", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_16", + "false_next" : "node_69" }, { - "name" : "node_70", + "name" : "node_69", "id" : 26, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 343, + "line" : 328, "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" + "source_fragment" : "fabric_md.spgw.skip_spgw == false" }, "expression" : { "type" : "expression", @@ -16010,51 +17135,60 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, - "true_next" : "tbl_act_19", - "false_next" : "node_72" + "true_next" : "node_70", + "false_next" : "node_74" }, { - "name" : "node_72", + "name" : "node_70", "id" : 27, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "expression", "value" : { "op" : "d2b", "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] } } + }, + "right" : { + "type" : "bool", + "value" : true } } }, - "true_next" : "tbl_act_20", - "false_next" : "node_76" + "true_next" : "tbl_spgw_gtpu_encap", + "false_next" : "node_72" }, { - "name" : "node_74", + "name" : "node_72", "id" : 28, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 346, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + "line" : 332, + "column" : 16, + "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr == false" }, "expression" : { "type" : "expression", @@ -16067,21 +17201,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap32"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr31"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, - "true_next" : "tbl_spgw_egress_gtpu_encap", - "false_next" : "node_76" + "true_next" : "tbl_act_17", + "false_next" : "node_74" }, { - "name" : "node_76", + "name" : "node_74", "id" : 29, "source_info" : { "filename" : "include/int/int_main.p4", @@ -16158,10 +17292,10 @@ } }, "false_next" : null, - "true_next" : "node_77" + "true_next" : "node_75" }, { - "name" : "node_77", + "name" : "node_75", "id" : 30, "source_info" : { "filename" : "include/int/int_main.p4", @@ -16180,7 +17314,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_source34"] + "value" : ["scalars", "fabric_metadata_t._int_meta_source32"] } } }, @@ -16191,10 +17325,10 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_79" + "false_next" : "node_77" }, { - "name" : "node_79", + "name" : "node_77", "id" : 31, "source_info" : { "filename" : "include/int/int_main.p4", @@ -16214,10 +17348,10 @@ } }, "false_next" : null, - "true_next" : "tbl_act_21" + "true_next" : "tbl_act_18" }, { - "name" : "node_82", + "name" : "node_80", "id" : 32, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -16236,7 +17370,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._int_meta_transit35"] + "value" : ["scalars", "fabric_metadata_t._int_meta_transit33"] } } }, @@ -16246,11 +17380,11 @@ } } }, - "true_next" : "tbl_act_22", - "false_next" : "node_84" + "true_next" : "tbl_act_19", + "false_next" : "node_82" }, { - "name" : "node_84", + "name" : "node_82", "id" : 33, "expression" : { "type" : "expression", @@ -16274,7 +17408,7 @@ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" }, { - "name" : "node_88", + "name" : "node_86", "id" : 34, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -16293,11 +17427,11 @@ } } }, - "true_next" : "tbl_act_24", - "false_next" : "node_90" + "true_next" : "tbl_act_21", + "false_next" : "node_88" }, { - "name" : "node_90", + "name" : "node_88", "id" : 35, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -16316,11 +17450,11 @@ } } }, - "true_next" : "tbl_act_25", - "false_next" : "node_92" + "true_next" : "tbl_act_22", + "false_next" : "node_90" }, { - "name" : "node_92", + "name" : "node_90", "id" : 36, "source_info" : { "filename" : "include/int/int_transit.p4", @@ -16340,7 +17474,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_26" + "true_next" : "tbl_act_23" } ] } @@ -16377,7 +17511,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt index bb771144719..100c35a7c24 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -389,9 +389,9 @@ tables { } tables { preamble { - id: 33584493 - name: "FabricIngress.spgw_ingress.interface_lookup" - alias: "interface_lookup" + id: 33557250 + name: "FabricIngress.spgw.interfaces" + alias: "interfaces" } match_fields { id: 1 @@ -406,16 +406,21 @@ tables { match_type: EXACT } action_refs { - id: 16797935 + id: 16810012 } - const_default_action_id: 16797935 + action_refs { + id: 16783042 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 16783042 size: 128 } tables { preamble { - id: 33586958 - name: "FabricIngress.spgw_ingress.downlink_pdr_lookup" - alias: "downlink_pdr_lookup" + id: 33566601 + name: "FabricIngress.spgw.downlink_pdrs" + alias: "downlink_pdrs" } match_fields { id: 1 @@ -424,16 +429,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33587070 - name: "FabricIngress.spgw_ingress.uplink_pdr_lookup" - alias: "uplink_pdr_lookup" + id: 33606410 + name: "FabricIngress.spgw.uplink_pdrs" + alias: "uplink_pdrs" } match_fields { id: 1 @@ -448,16 +457,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33613200 - name: "FabricIngress.spgw_ingress.far_lookup" - alias: "far_lookup" + id: 33599560 + name: "FabricIngress.spgw.fars" + alias: "fars" } match_fields { id: 1 @@ -466,12 +479,15 @@ tables { match_type: EXACT } action_refs { - id: 16834935 + id: 16820307 } action_refs { - id: 16787606 + id: 16814785 } - const_default_action_id: 16834935 + action_refs { + id: 16814681 + } + const_default_action_id: 16820307 size: 2048 } tables { @@ -576,6 +592,13 @@ actions { alias: "nop" } } +actions { + preamble { + id: 16800567 + name: "NoAction" + alias: "NoAction" + } +} actions { preamble { id: 16778827 @@ -820,31 +843,28 @@ actions { } actions { preamble { - id: 16797935 - name: "FabricIngress.spgw_ingress.set_source_iface" - alias: "set_source_iface" + id: 16810012 + name: "FabricIngress.spgw.load_iface" + alias: "load_iface" } params { id: 1 name: "src_iface" bitwidth: 8 } - params { - id: 2 - name: "direction" - bitwidth: 2 - } - params { - id: 3 - name: "skip_spgw" - bitwidth: 1 +} +actions { + preamble { + id: 16783042 + name: "FabricIngress.spgw.iface_miss" + alias: "iface_miss" } } actions { preamble { - id: 16799934 - name: "FabricIngress.spgw_ingress.set_pdr_attributes" - alias: "set_pdr_attributes" + id: 16800614 + name: "FabricIngress.spgw.load_pdr" + alias: "load_pdr" } params { id: 1 @@ -864,9 +884,9 @@ actions { } actions { preamble { - id: 16834935 - name: "FabricIngress.spgw_ingress.load_normal_far_attributes" - alias: "load_normal_far_attributes" + id: 16820307 + name: "FabricIngress.spgw.load_normal_far" + alias: "load_normal_far" } params { id: 1 @@ -881,9 +901,9 @@ actions { } actions { preamble { - id: 16787606 - name: "FabricIngress.spgw_ingress.load_tunnel_far_attributes" - alias: "load_tunnel_far_attributes" + id: 16814785 + name: "FabricIngress.spgw.load_tunnel_far" + alias: "load_tunnel_far" } params { id: 1 @@ -918,37 +938,39 @@ actions { } actions { preamble { - id: 16829280 - name: "FabricIngress.spgw_ingress.decap_inner_tcp" - alias: "decap_inner_tcp" + id: 16814681 + name: "FabricIngress.spgw.load_dbuf_far" + alias: "load_dbuf_far" } -} -actions { - preamble { - id: 16815878 - name: "FabricIngress.spgw_ingress.decap_inner_udp" - alias: "decap_inner_udp" + params { + id: 1 + name: "drop" + bitwidth: 1 } -} -actions { - preamble { - id: 16801274 - name: "FabricIngress.spgw_ingress.decap_inner_icmp" - alias: "decap_inner_icmp" + params { + id: 2 + name: "notify_cp" + bitwidth: 1 } -} -actions { - preamble { - id: 16830582 - name: "FabricIngress.spgw_ingress.decap_inner_unknown" - alias: "decap_inner_unknown" + params { + id: 3 + name: "tunnel_src_port" + bitwidth: 16 } -} -actions { - preamble { - id: 16800567 - name: "NoAction" - alias: "NoAction" + params { + id: 4 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 5 + name: "tunnel_dst_addr" + bitwidth: 32 + } + params { + id: 6 + name: "teid" + bitwidth: 32 } } actions { @@ -1032,9 +1054,9 @@ counters { } counters { preamble { - id: 302029884 - name: "FabricIngress.spgw_ingress.pdr_counter" - alias: "spgw_ingress.pdr_counter" + id: 302043952 + name: "FabricIngress.spgw.pdr_counter" + alias: "FabricIngress.spgw.pdr_counter" } spec { unit: BOTH @@ -1043,9 +1065,9 @@ counters { } counters { preamble { - id: 302012289 - name: "FabricEgress.spgw_egress.pdr_counter" - alias: "spgw_egress.pdr_counter" + id: 302049491 + name: "FabricEgress.spgw.pdr_counter" + alias: "FabricEgress.spgw.pdr_counter" } spec { unit: BOTH diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index 18163deda99..036ea1d62a7 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -4,14 +4,13 @@ "name" : "scalars_0", "id" : 0, "fields" : [ - ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 4, false], + ["tmp_2", 16, false], + ["tmp_3", 4, false], ["tmp", 32, false], - ["tmp_3", 32, false], - ["spgw_ingress_hasReturned", 1, false], + ["tmp_0", 32, false], + ["spgw_tmp", 1, false], ["egress_next_tmp", 1, false], - ["spgw_egress_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], ["fabric_metadata_t._vlan_pri2", 3, false], @@ -31,22 +30,20 @@ ["fabric_metadata_t._ipv4_dst_addr16", 32, false], ["fabric_metadata_t._inner_l4_sport17", 16, false], ["fabric_metadata_t._inner_l4_dport18", 16, false], - ["fabric_metadata_t._spgw_direction19", 2, false], - ["fabric_metadata_t._spgw_ipv4_len20", 16, false], - ["fabric_metadata_t._spgw_teid21", 32, false], - ["fabric_metadata_t._spgw_tunnel_src_port22", 16, false], - ["fabric_metadata_t._spgw_tunnel_src_addr23", 32, false], - ["fabric_metadata_t._spgw_tunnel_dst_addr24", 32, false], - ["fabric_metadata_t._spgw_ctr_id25", 32, false], - ["fabric_metadata_t._spgw_far_id26", 32, false], - ["fabric_metadata_t._spgw_src_iface27", 8, false], - ["fabric_metadata_t._spgw_skip_spgw28", 1, false], - ["fabric_metadata_t._spgw_pdr_hit29", 1, false], - ["fabric_metadata_t._spgw_far_dropped30", 1, false], - ["fabric_metadata_t._spgw_notify_spgwc31", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_encap32", 1, false], - ["fabric_metadata_t._spgw_needs_gtpu_decap33", 1, false], - ["_padding_0", 6, false] + ["fabric_metadata_t._spgw_ipv4_len19", 16, false], + ["fabric_metadata_t._spgw_teid20", 32, false], + ["fabric_metadata_t._spgw_tunnel_src_port21", 16, false], + ["fabric_metadata_t._spgw_tunnel_src_addr22", 32, false], + ["fabric_metadata_t._spgw_tunnel_dst_addr23", 32, false], + ["fabric_metadata_t._spgw_ctr_id24", 32, false], + ["fabric_metadata_t._spgw_far_id25", 32, false], + ["fabric_metadata_t._spgw_src_iface26", 8, false], + ["fabric_metadata_t._spgw_skip_spgw27", 1, false], + ["fabric_metadata_t._spgw_notify_spgwc28", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_encap29", 1, false], + ["fabric_metadata_t._spgw_needs_gtpu_decap30", 1, false], + ["fabric_metadata_t._spgw_skip_egress_pdr_ctr31", 1, false], + ["_padding_0", 2, false] ] }, { @@ -467,7 +464,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -505,7 +502,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -526,7 +523,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -552,7 +549,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -662,7 +659,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] }, { "type" : "lookahead", @@ -688,7 +685,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_3"] } ] }, @@ -1178,11 +1175,11 @@ "is_direct" : false }, { - "name" : "FabricIngress.spgw_ingress.pdr_counter", + "name" : "FabricIngress.spgw.pdr_counter", "id" : 11, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 180, + "line" : 109, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -1202,11 +1199,11 @@ } }, { - "name" : "FabricEgress.spgw_egress.pdr_counter", + "name" : "FabricEgress.spgw.pdr_counter", "id" : 13, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 301, + "line" : 286, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -1282,7 +1279,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -1445,9 +1442,21 @@ "primitives" : [] }, { - "name" : "FabricIngress.filtering.deny", + "name" : "NoAction", "id" : 7, "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 8, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.filtering.deny", + "id" : 9, + "runtime_data" : [], "primitives" : [ { "op" : "assign", @@ -1511,13 +1520,13 @@ }, { "name" : "FabricIngress.filtering.permit", - "id" : 8, + "id" : 10, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.filtering.permit_with_internal_vlan", - "id" : 9, + "id" : 11, "runtime_data" : [ { "name" : "vlan_id", @@ -1548,7 +1557,7 @@ }, { "name" : "FabricIngress.filtering.set_forwarding_type", - "id" : 10, + "id" : 12, "runtime_data" : [ { "name" : "fwd_type", @@ -1579,7 +1588,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_bridging", - "id" : 11, + "id" : 13, "runtime_data" : [ { "name" : "next_id", @@ -1610,7 +1619,7 @@ }, { "name" : "FabricIngress.forwarding.pop_mpls_and_next", - "id" : 12, + "id" : 14, "runtime_data" : [ { "name" : "next_id", @@ -1660,7 +1669,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v4", - "id" : 13, + "id" : 15, "runtime_data" : [ { "name" : "next_id", @@ -1691,13 +1700,13 @@ }, { "name" : "FabricIngress.forwarding.nop_routing_v4", - "id" : 14, + "id" : 16, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.acl.set_next_id_acl", - "id" : 15, + "id" : 17, "runtime_data" : [ { "name" : "next_id", @@ -1728,7 +1737,7 @@ }, { "name" : "FabricIngress.acl.punt_to_cpu", - "id" : 16, + "id" : 18, "runtime_data" : [], "primitives" : [ { @@ -1783,7 +1792,7 @@ }, { "name" : "FabricIngress.acl.set_clone_session_id", - "id" : 17, + "id" : 19, "runtime_data" : [ { "name" : "clone_id", @@ -1814,7 +1823,7 @@ }, { "name" : "FabricIngress.acl.drop", - "id" : 18, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -1865,13 +1874,13 @@ }, { "name" : "FabricIngress.acl.nop_acl", - "id" : 19, + "id" : 21, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.next.set_vlan", - "id" : 20, + "id" : 22, "runtime_data" : [ { "name" : "vlan_id", @@ -1902,7 +1911,7 @@ }, { "name" : "FabricIngress.next.output_xconnect", - "id" : 21, + "id" : 23, "runtime_data" : [ { "name" : "port_num", @@ -1933,7 +1942,7 @@ }, { "name" : "FabricIngress.next.set_next_id_xconnect", - "id" : 22, + "id" : 24, "runtime_data" : [ { "name" : "next_id", @@ -1964,7 +1973,7 @@ }, { "name" : "FabricIngress.next.output_hashed", - "id" : 23, + "id" : 25, "runtime_data" : [ { "name" : "port_num", @@ -1995,7 +2004,7 @@ }, { "name" : "FabricIngress.next.routing_hashed", - "id" : 24, + "id" : 26, "runtime_data" : [ { "name" : "port_num", @@ -2072,7 +2081,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_hashed", - "id" : 25, + "id" : 27, "runtime_data" : [ { "name" : "port_num", @@ -2172,7 +2181,7 @@ }, { "name" : "FabricIngress.next.set_mcast_group_id", - "id" : 26, + "id" : 28, "runtime_data" : [ { "name" : "group_id", @@ -2231,40 +2240,27 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.set_source_iface", - "id" : 27, - "runtime_data" : [ - { - "name" : "src_iface", - "bitwidth" : 8 - }, - { - "name" : "direction", - "bitwidth" : 2 - }, - { - "name" : "skip_spgw", - "bitwidth" : 1 - } - ], + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 29, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_src_iface27"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 50, - "column" : 33, - "source_fragment" : "= src_iface; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -2272,18 +2268,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_direction19"] + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 51, - "column" : 33, - "source_fragment" : "= direction; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } }, { @@ -2291,87 +2287,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, - "column" : 33, - "source_fragment" : "= (bool)skip_spgw; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 28, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 - }, - { - "name" : "far_id", - "bitwidth" : 32 }, - { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit29"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 31, - "source_fragment" : "= true; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -2379,18 +2325,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -2398,238 +2344,142 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id26"] + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.set_pdr_attributes", - "id" : 29, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 - }, - { - "name" : "far_id", - "bitwidth" : 32 }, { - "name" : "needs_gtpu_decap", - "bitwidth" : 1 - } - ], - "primitives" : [ - { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_pdr_hit29"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 31, - "source_fragment" : "= true; ..." + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] - }, + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ { - "type" : "runtime_data", - "value" : 0 + "type" : "header", + "value" : "udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 76, - "column" : 30, - "source_fragment" : "= ctr_id; ..." + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_id26"] + "type" : "header", + "value" : "tcp" }, { - "type" : "runtime_data", - "value" : 1 + "type" : "header", + "value" : "inner_tcp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 77, - "column" : 30, - "source_fragment" : "= far_id; ..." + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 2 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "header", + "value" : "inner_tcp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 78, - "column" : 40, - "source_fragment" : "= (bool)needs_gtpu_decap; ..." + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.load_normal_far_attributes", + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "id" : 30, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 - }, - { - "name" : "notify_cp", - "bitwidth" : 1 - } - ], + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "hexstr", + "value" : "0x0800" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 138, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { @@ -2637,109 +2487,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc31"] + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 139, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.load_tunnel_far_attributes", - "id" : 31, - "runtime_data" : [ - { - "name" : "drop", - "bitwidth" : 1 - }, - { - "name" : "notify_cp", - "bitwidth" : 1 - }, - { - "name" : "tunnel_src_port", - "bitwidth" : 16 - }, - { - "name" : "tunnel_src_addr", - "bitwidth" : 32 - }, - { - "name" : "tunnel_dst_addr", - "bitwidth" : 32 }, - { - "name" : "teid", - "bitwidth" : 32 - } - ], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 0 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 148, - "column" : 35, - "source_fragment" : "= (bool)drop; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -2747,38 +2525,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc31"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "local", - "value" : 1 - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - } - } - } - } - } + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 149, - "column" : 36, - "source_fragment" : "= (bool)notify_cp; ..." + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -2786,47 +2544,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap32"] + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 151, - "column" : 40, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid21"] - }, - { - "type" : "runtime_data", - "value" : 5 + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, - "column" : 28, - "source_fragment" : "= teid; ..." + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." } }, { @@ -2834,139 +2563,108 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port22"] + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, - { - "type" : "runtime_data", - "value" : 2 - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 153, - "column" : 39, - "source_fragment" : "= tunnel_src_port; ..." - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr23"] - }, - { - "type" : "runtime_data", - "value" : 3 + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 154, - "column" : 39, - "source_fragment" : "= tunnel_src_addr; ..." + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr24"] + "type" : "header", + "value" : "ipv4" }, { - "type" : "runtime_data", - "value" : 4 + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 155, - "column" : 39, - "source_fragment" : "= tunnel_dst_addr; ..." + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] - }, - { - "type" : "runtime_data", - "value" : 3 + "type" : "header", + "value" : "inner_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 157, - "column" : 32, - "source_fragment" : "= tunnel_src_addr; ..." + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] - }, - { - "type" : "runtime_data", - "value" : 4 + "type" : "header", + "value" : "gtpu" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 158, - "column" : 32, - "source_fragment" : "= tunnel_dst_addr; ..." + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" } }, { - "op" : "assign", + "op" : "assign_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + "type" : "header", + "value" : "udp" }, { - "type" : "runtime_data", - "value" : 2 + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 159, - "column" : 27, - "source_fragment" : "= tunnel_src_port; ..." + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_dport14"] - }, - { - "type" : "hexstr", - "value" : "0x0868" + "type" : "header", + "value" : "inner_udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 160, - "column" : 27, - "source_fragment" : "= 2152; ..." + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.decap_inner_tcp", - "id" : 32, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", + "id" : 31, "runtime_data" : [], "primitives" : [ { @@ -2983,7 +2681,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3002,7 +2700,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -3021,7 +2719,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 40, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } @@ -3040,7 +2738,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 41, "column" : 32, "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } @@ -3059,7 +2757,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 42, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_sport; ..." } @@ -3078,7 +2776,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 43, "column" : 27, "source_fragment" : "= fabric_md.inner_l4_dport; ..." } @@ -3097,7 +2795,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, + "line" : 45, "column" : 8, "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" } @@ -3112,7 +2810,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, + "line" : 46, "column" : 8, "source_fragment" : "hdr.inner_ipv4.setInvalid()" } @@ -3127,7 +2825,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 47, "column" : 8, "source_fragment" : "hdr.gtpu.setInvalid()" } @@ -3142,7 +2840,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 199, + "line" : 65, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -3152,18 +2850,18 @@ "parameters" : [ { "type" : "header", - "value" : "tcp" + "value" : "icmp" }, { "type" : "header", - "value" : "inner_tcp" + "value" : "inner_icmp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 200, + "line" : 66, "column" : 8, - "source_fragment" : "hdr.tcp = hdr.inner_tcp" + "source_fragment" : "hdr.icmp = hdr.inner_icmp" } }, { @@ -3171,21 +2869,21 @@ "parameters" : [ { "type" : "header", - "value" : "inner_tcp" + "value" : "inner_icmp" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 201, + "line" : 67, "column" : 8, - "source_fragment" : "hdr.inner_tcp.setInvalid()" + "source_fragment" : "hdr.inner_icmp.setInvalid()" } } ] }, { - "name" : "FabricIngress.spgw_ingress.decap_inner_udp", - "id" : 33, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", + "id" : 32, "runtime_data" : [], "primitives" : [ { @@ -3202,7 +2900,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 128, + "line" : 118, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3221,7 +2919,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, + "line" : 39, "column" : 27, "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } @@ -3240,9 +2938,1470 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", + "id" : 33, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "tcp" + }, + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.tcp = hdr.inner_tcp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_tcp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", + "id" : 34, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + }, + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.udp = hdr.inner_udp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", + "id" : 35, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "icmp" + }, + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 66, + "column" : 8, + "source_fragment" : "hdr.icmp = hdr.inner_icmp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", + "id" : 36, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 118, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "src_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dst_addr"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 42, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 43, + "column" : 27, + "source_fragment" : "= fabric_md.inner_l4_dport; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_iface", + "id" : 37, + "runtime_data" : [ + { + "name" : "src_iface", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 121, + "column" : 33, + "source_fragment" : "= src_iface; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 122, + "column" : 33, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.iface_miss", + "id" : 38, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 108, + "column" : 44, + "source_fragment" : "8w0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 126, + "column" : 33, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 39, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr", + "id" : 40, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, + { + "name" : "needs_gtpu_decap", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 151, + "column" : 30, + "source_fragment" : "= ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_far_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 152, + "column" : 30, + "source_fragment" : "= far_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 2 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 153, + "column" : 40, + "source_fragment" : "= (bool)needs_gtpu_decap; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_normal_far", + "id" : 41, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 186, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_next7"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 187, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 188, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_tunnel_far", + "id" : 42, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + }, + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." } }, { @@ -3250,18 +4409,38 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + "value" : ["scalars", "fabric_metadata_t._skip_next7"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." } }, { @@ -3269,18 +4448,38 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." } }, { @@ -3288,127 +4487,123 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] }, { - "type" : "header", - "value" : "inner_ipv4" + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "gtpu" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] + }, + { + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] }, { - "type" : "header", - "value" : "inner_udp" + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", "line" : 205, - "column" : 8, - "source_fragment" : "hdr.udp = hdr.inner_udp" + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_udp" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 206, - "column" : 8, - "source_fragment" : "hdr.inner_udp.setInvalid()" - } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_icmp", - "id" : 34, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 207, + "column" : 32, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -3416,18 +4611,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 208, + "column" : 32, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -3435,18 +4630,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] + "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "line" : 209, + "column" : 27, + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -3454,37 +4649,89 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] + "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, - "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "line" : 210, + "column" : 27, + "source_fragment" : "= 2152; ..." } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_dbuf_far", + "id" : 43, + "runtime_data" : [ + { + "name" : "drop", + "bitwidth" : 1 + }, + { + "name" : "notify_cp", + "bitwidth" : 1 + }, + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 }, + { + "name" : "teid", + "bitwidth" : 32 + } + ], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_sport13"] + "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "line" : 197, + "column" : 34, + "source_fragment" : "= (bool)drop; ..." } }, { @@ -3492,142 +4739,163 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._l4_dport14"] + "value" : ["scalars", "fabric_metadata_t._skip_next7"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, - "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "line" : 198, + "column" : 28, + "source_fragment" : "= (bool)drop; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_notify_spgwc28"] }, { - "type" : "header", - "value" : "inner_ipv4" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 1 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" + "line" : 199, + "column" : 36, + "source_fragment" : "= (bool)notify_cp; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] + }, { - "type" : "header", - "value" : "gtpu" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" + "line" : 201, + "column" : 40, + "source_fragment" : "= true; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "udp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] + }, + { + "type" : "runtime_data", + "value" : 5 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 202, + "column" : 28, + "source_fragment" : "= teid; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "icmp" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] }, { - "type" : "header", - "value" : "inner_icmp" + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.icmp = hdr.inner_icmp" + "line" : 203, + "column" : 39, + "source_fragment" : "= tunnel_src_port; ..." } }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_icmp" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 212, - "column" : 8, - "source_fragment" : "hdr.inner_icmp.setInvalid()" - } - } - ] - }, - { - "name" : "FabricIngress.spgw_ingress.decap_inner_unknown", - "id" : 35, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_eth_type0"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 128, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/spgw.p4", + "line" : 204, + "column" : 39, + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -3635,18 +4903,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._ip_proto12"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 187, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "line" : 205, + "column" : 39, + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -3657,15 +4925,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_src_addr15"] }, { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 188, + "line" : 207, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "source_fragment" : "= tunnel_src_addr; ..." } }, { @@ -3676,15 +4944,15 @@ "value" : ["scalars", "fabric_metadata_t._ipv4_dst_addr16"] }, { - "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 189, + "line" : 208, "column" : 32, - "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + "source_fragment" : "= tunnel_dst_addr; ..." } }, { @@ -3695,15 +4963,15 @@ "value" : ["scalars", "fabric_metadata_t._l4_sport13"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_sport17"] + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 190, + "line" : 209, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_sport; ..." + "source_fragment" : "= tunnel_src_port; ..." } }, { @@ -3714,86 +4982,51 @@ "value" : ["scalars", "fabric_metadata_t._l4_dport14"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_l4_dport18"] + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 191, + "line" : 210, "column" : 27, - "source_fragment" : "= fabric_md.inner_l4_dport; ..." + "source_fragment" : "= 2152; ..." } }, { - "op" : "assign_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "ipv4" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr31"] }, { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 193, - "column" : 8, - "source_fragment" : "hdr.ipv4 = hdr.inner_ipv4" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "inner_ipv4" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 194, - "column" : 8, - "source_fragment" : "hdr.inner_ipv4.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "gtpu" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 195, - "column" : 8, - "source_fragment" : "hdr.gtpu.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "udp" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, - "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "line" : 221, + "column" : 43, + "source_fragment" : "= true; ..." } } ] }, { "name" : "act", - "id" : 36, + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -3873,7 +5106,7 @@ }, { "name" : "act_0", - "id" : 37, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -3881,7 +5114,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -3892,7 +5125,7 @@ "left" : null, "right" : { "type" : "bool", - "value" : false + "value" : true } } } @@ -3903,7 +5136,7 @@ }, { "name" : "act_1", - "id" : 38, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -3911,7 +5144,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] + "value" : ["scalars", "spgw_tmp"] }, { "type" : "expression", @@ -3922,24 +5155,18 @@ "left" : null, "right" : { "type" : "bool", - "value" : true + "value" : false } } } } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - } + ] } ] }, { "name" : "act_2", - "id" : 39, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -3947,17 +5174,17 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricIngress.spgw_ingress.pdr_counter" + "value" : "FabricIngress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } @@ -3965,72 +5192,7 @@ }, { "name" : "act_3", - "id" : 40, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_forwarding6"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._skip_next7"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 281, - "column" : 32, - "source_fragment" : "= true; ..." - } - } - ] - }, - { - "name" : "act_4", - "id" : 41, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -4038,7 +5200,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] }, { "type" : "field", @@ -4047,16 +5209,16 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "= hdr.ipv4.total_len; ..." } } ] }, { - "name" : "act_5", - "id" : 42, + "name" : "act_4", + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -4119,8 +5281,8 @@ ] }, { - "name" : "act_6", - "id" : 43, + "name" : "act_5", + "id" : 50, "runtime_data" : [], "primitives" : [ { @@ -4145,8 +5307,8 @@ ] }, { - "name" : "act_7", - "id" : 44, + "name" : "act_6", + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -4203,8 +5365,8 @@ ] }, { - "name" : "act_8", - "id" : 45, + "name" : "act_7", + "id" : 52, "runtime_data" : [], "primitives" : [ { @@ -4212,7 +5374,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -4248,7 +5410,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] } ], "source_info" : { @@ -4262,13 +5424,13 @@ }, { "name" : "nop", - "id" : 46, + "id" : 53, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 47, + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -4309,7 +5471,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 48, + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -4417,7 +5579,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -4426,7 +5588,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 49, + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -4496,7 +5658,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -4524,7 +5686,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 50, + "id" : 57, "runtime_data" : [], "primitives" : [ { @@ -4545,8 +5707,8 @@ ] }, { - "name" : "FabricEgress.spgw_egress.gtpu_encap", - "id" : 51, + "name" : "FabricEgress.spgw.gtpu_encap", + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -4559,7 +5721,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 306, + "line" : 291, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.setValid()" } @@ -4578,7 +5740,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 307, + "line" : 292, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.version = 4" } @@ -4597,7 +5759,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 143, + "line" : 133, "column" : 28, "source_fragment" : "5; ..." } @@ -4616,7 +5778,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 309, + "line" : 294, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } @@ -4635,7 +5797,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 310, + "line" : 295, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } @@ -4677,7 +5839,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 311, + "line" : 296, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } @@ -4696,7 +5858,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 313, + "line" : 298, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } @@ -4715,7 +5877,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 314, + "line" : 299, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } @@ -4734,7 +5896,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 315, + "line" : 300, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } @@ -4753,7 +5915,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 156, + "line" : 146, "column" : 32, "source_fragment" : "64; ..." } @@ -4772,7 +5934,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 140, + "line" : 130, "column" : 25, "source_fragment" : "17; ..." } @@ -4786,12 +5948,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr23"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_addr22"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 318, + "line" : 303, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } @@ -4805,12 +5967,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr24"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_dst_addr23"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 319, + "line" : 304, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." } @@ -4829,7 +5991,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 320, + "line" : 305, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" } @@ -4844,7 +6006,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 322, + "line" : 307, "column" : 8, "source_fragment" : "hdr.gtpu_udp.setValid()" } @@ -4858,12 +6020,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port22"] + "value" : ["scalars", "fabric_metadata_t._spgw_tunnel_src_port21"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 323, + "line" : 308, "column" : 8, "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." } @@ -4882,7 +6044,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 324, + "line" : 309, "column" : 8, "source_fragment" : "hdr.gtpu_udp.dport = 2152" } @@ -4906,7 +6068,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] }, "right" : { "type" : "hexstr", @@ -4924,7 +6086,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 325, + "line" : 310, "column" : 8, "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } @@ -4943,7 +6105,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 327, + "line" : 312, "column" : 8, "source_fragment" : "hdr.gtpu_udp.checksum = 0" } @@ -4958,7 +6120,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 330, + "line" : 315, "column" : 8, "source_fragment" : "hdr.outer_gtpu.setValid()" } @@ -4977,7 +6139,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 331, + "line" : 316, "column" : 8, "source_fragment" : "hdr.outer_gtpu.version = 0x01" } @@ -4996,7 +6158,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 317, "column" : 8, "source_fragment" : "hdr.outer_gtpu.pt = 0x01" } @@ -5015,7 +6177,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 318, "column" : 8, "source_fragment" : "hdr.outer_gtpu.spare = 0" } @@ -5034,7 +6196,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 334, + "line" : 319, "column" : 8, "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" } @@ -5053,7 +6215,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 335, + "line" : 320, "column" : 8, "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" } @@ -5072,7 +6234,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 336, + "line" : 321, "column" : 8, "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" } @@ -5091,7 +6253,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 322, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" } @@ -5105,12 +6267,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"] + "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len19"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 338, + "line" : 323, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." } @@ -5124,12 +6286,12 @@ }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_teid21"] + "value" : ["scalars", "fabric_metadata_t._spgw_teid20"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, + "line" : 324, "column" : 8, "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." } @@ -5137,8 +6299,8 @@ ] }, { - "name" : "act_9", - "id" : 52, + "name" : "act_8", + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -5154,8 +6316,8 @@ ] }, { - "name" : "act_10", - "id" : 53, + "name" : "act_9", + "id" : 60, "runtime_data" : [], "primitives" : [ { @@ -5205,8 +6367,8 @@ ] }, { - "name" : "act_11", - "id" : 54, + "name" : "act_10", + "id" : 61, "runtime_data" : [], "primitives" : [ { @@ -5227,8 +6389,8 @@ ] }, { - "name" : "act_12", - "id" : 55, + "name" : "act_11", + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -5257,8 +6419,8 @@ ] }, { - "name" : "act_13", - "id" : 56, + "name" : "act_12", + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -5287,8 +6449,8 @@ ] }, { - "name" : "act_14", - "id" : 57, + "name" : "act_13", + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -5309,8 +6471,8 @@ ] }, { - "name" : "act_15", - "id" : 58, + "name" : "act_14", + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -5358,8 +6520,8 @@ ] }, { - "name" : "act_16", - "id" : 59, + "name" : "act_15", + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -5380,8 +6542,8 @@ ] }, { - "name" : "act_17", - "id" : 60, + "name" : "act_16", + "id" : 67, "runtime_data" : [], "primitives" : [ { @@ -5429,74 +6591,8 @@ ] }, { - "name" : "act_18", - "id" : 61, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" - } - } - ] - }, - { - "name" : "act_19", - "id" : 62, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_20", - "id" : 63, + "name" : "act_17", + "id" : 68, "runtime_data" : [], "primitives" : [ { @@ -5504,17 +6600,17 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricEgress.spgw_egress.pdr_counter" + "value" : "FabricEgress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id25"] + "value" : ["scalars", "fabric_metadata_t._spgw_ctr_id24"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, + "line" : 333, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } @@ -5549,50 +6645,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36], + "action_ids" : [44], "actions" : ["act"], - "base_default_next" : "tbl_act_0", + "base_default_next" : "FabricIngress.spgw.interfaces", "next_tables" : { - "act" : "tbl_act_0" + "act" : "FabricIngress.spgw.interfaces" }, "default_entry" : { - "action_id" : 36, + "action_id" : 44, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_0", + "name" : "FabricIngress.spgw.interfaces", "id" : 1, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [37], - "actions" : ["act_0"], - "base_default_next" : "FabricIngress.spgw_ingress.interface_lookup", - "next_tables" : { - "act_0" : "FabricIngress.spgw_ingress.interface_lookup" - }, - "default_entry" : { - "action_id" : 37, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.spgw_ingress.interface_lookup", - "id" : 2, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 55, + "line" : 130, "column" : 10, - "source_fragment" : "interface_lookup" + "source_fragment" : "interfaces" }, "key" : [ { @@ -5614,28 +6687,46 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [27], - "actions" : ["FabricIngress.spgw_ingress.set_source_iface"], - "base_default_next" : "node_6", + "action_ids" : [37, 38], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_0", + "__MISS__" : "tbl_act_1" + }, + "default_entry" : { + "action_id" : 38, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_0", + "id" : 2, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45], + "actions" : ["act_0"], + "base_default_next" : "node_7", "next_tables" : { - "FabricIngress.spgw_ingress.set_source_iface" : "node_6" + "act_0" : "node_7" }, "default_entry" : { - "action_id" : 27, + "action_id" : 45, "action_const" : true, - "action_data" : ["0x0", "0x0", "0x1"], + "action_data" : [], "action_entry_const" : true } }, { "name" : "tbl_act_1", "id" : 3, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 46, - "source_fragment" : "return" - }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -5643,27 +6734,161 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], + "action_ids" : [46], "actions" : ["act_1"], - "base_default_next" : "node_8", + "base_default_next" : "node_7", "next_tables" : { - "act_1" : "node_8" + "act_1" : "node_7" }, "default_entry" : { - "action_id" : 38, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 93, + "line" : 75, + "column" : 10, + "source_fragment" : "decap_gtpu" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [29, 30, 31, 32], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_10", + "next_tables" : { + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_10", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_10" + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 89, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 29, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 90, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 30, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 31, + "action_data" : [] + }, + "priority" : 3 + } + ] + }, + { + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 5, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, "column" : 10, - "source_fragment" : "uplink_pdr_lookup" + "source_fragment" : "uplink_pdrs" }, "key" : [ { @@ -5685,27 +6910,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [29], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [40, 8], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 29, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 8, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { - "name" : "FabricIngress.spgw_ingress.downlink_pdr_lookup", - "id" : 5, + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 6, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 82, + "line" : 157, "column" : 10, - "source_fragment" : "downlink_pdr_lookup" + "source_fragment" : "downlink_pdrs" }, "key" : [ { @@ -5721,26 +6947,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [28], - "actions" : ["FabricIngress.spgw_ingress.set_pdr_attributes"], - "base_default_next" : "tbl_act_2", + "action_ids" : [39, 7], + "actions" : ["FabricIngress.spgw.load_pdr", "NoAction"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw_ingress.set_pdr_attributes" : "tbl_act_2" + "FabricIngress.spgw.load_pdr" : "node_13", + "NoAction" : "node_13" }, "default_entry" : { - "action_id" : 28, - "action_const" : true, - "action_data" : ["0x0", "0x0", "0x0"], - "action_entry_const" : true + "action_id" : 7, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false } }, { "name" : "tbl_act_2", - "id" : 6, + "id" : 7, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 263, - "column" : 8, + "line" : 256, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], @@ -5750,25 +6977,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39], + "action_ids" : [47], "actions" : ["act_2"], - "base_default_next" : "node_13", + "base_default_next" : "node_15", "next_tables" : { - "act_2" : "node_13" + "act_2" : "node_15" }, "default_entry" : { - "action_id" : 39, + "action_id" : 47, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw_ingress.decap_gtpu", - "id" : 7, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 8, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 75, "column" : 10, "source_fragment" : "decap_gtpu" }, @@ -5798,17 +7025,17 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32, 33, 34, 35], - "actions" : ["FabricIngress.spgw_ingress.decap_inner_tcp", "FabricIngress.spgw_ingress.decap_inner_udp", "FabricIngress.spgw_ingress.decap_inner_icmp", "FabricIngress.spgw_ingress.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw_ingress.far_lookup", + "action_ids" : [33, 34, 35, 36], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.spgw_ingress.decap_inner_tcp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_udp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_icmp" : "FabricIngress.spgw_ingress.far_lookup", - "FabricIngress.spgw_ingress.decap_inner_unknown" : "FabricIngress.spgw_ingress.far_lookup" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 35, + "action_id" : 36, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5817,7 +7044,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 233, + "line" : 89, "column" : 12, "source_fragment" : "(true, false, false) : decap_inner_tcp()" }, @@ -5836,7 +7063,7 @@ } ], "action_entry" : { - "action_id" : 32, + "action_id" : 33, "action_data" : [] }, "priority" : 1 @@ -5844,7 +7071,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 234, + "line" : 90, "column" : 12, "source_fragment" : "(false, true, false) : decap_inner_udp()" }, @@ -5863,7 +7090,7 @@ } ], "action_entry" : { - "action_id" : 33, + "action_id" : 34, "action_data" : [] }, "priority" : 2 @@ -5871,7 +7098,7 @@ { "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 235, + "line" : 91, "column" : 12, "source_fragment" : "(false, false, true) : decap_inner_icmp()" }, @@ -5890,7 +7117,7 @@ } ], "action_entry" : { - "action_id" : 34, + "action_id" : 35, "action_data" : [] }, "priority" : 3 @@ -5898,19 +7125,19 @@ ] }, { - "name" : "FabricIngress.spgw_ingress.far_lookup", - "id" : 8, + "name" : "FabricIngress.spgw.fars", + "id" : 9, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 163, + "line" : 224, "column" : 10, - "source_fragment" : "far_lookup" + "source_fragment" : "fars" }, "key" : [ { "match_type" : "exact", "name" : "far_id", - "target" : ["scalars", "fabric_metadata_t._spgw_far_id26"], + "target" : ["scalars", "fabric_metadata_t._spgw_far_id25"], "mask" : null } ], @@ -5920,56 +7147,28 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30, 31], - "actions" : ["FabricIngress.spgw_ingress.load_normal_far_attributes", "FabricIngress.spgw_ingress.load_tunnel_far_attributes"], - "base_default_next" : "node_16", + "action_ids" : [41, 42, 43], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_act_3", "next_tables" : { - "FabricIngress.spgw_ingress.load_normal_far_attributes" : "node_16", - "FabricIngress.spgw_ingress.load_tunnel_far_attributes" : "node_16" + "FabricIngress.spgw.load_normal_far" : "tbl_act_3", + "FabricIngress.spgw.load_tunnel_far" : "tbl_act_3", + "FabricIngress.spgw.load_dbuf_far" : "tbl_act_3" }, "default_entry" : { - "action_id" : 30, + "action_id" : 41, "action_const" : true, - "action_data" : ["0x1", "0x1"], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_act_3", - "id" : 9, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 280, - "column" : 38, - "source_fragment" : "= true; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [40], - "actions" : ["act_3"], - "base_default_next" : "tbl_act_4", - "next_tables" : { - "act_3" : "tbl_act_4" - }, - "default_entry" : { - "action_id" : 40, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_4", "id" : 10, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 289, - "column" : 32, + "line" : 273, + "column" : 36, "source_fragment" : "=" }, "key" : [], @@ -5979,21 +7178,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], - "actions" : ["act_4"], + "action_ids" : [48], + "actions" : ["act_3"], "base_default_next" : "node_19", "next_tables" : { - "act_4" : "node_19" + "act_3" : "node_19" }, "default_entry" : { - "action_id" : 41, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_5", + "name" : "tbl_act_4", "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", @@ -6008,21 +7207,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [42], - "actions" : ["act_5"], + "action_ids" : [49], + "actions" : ["act_4"], "base_default_next" : "node_21", "next_tables" : { - "act_5" : "node_21" + "act_4" : "node_21" }, "default_entry" : { - "action_id" : 42, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_6", + "name" : "tbl_act_5", "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", @@ -6037,14 +7236,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43], - "actions" : ["act_6"], + "action_ids" : [50], + "actions" : ["act_5"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { - "act_6" : "FabricIngress.filtering.ingress_port_vlan" + "act_5" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 43, + "action_id" : 50, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6085,7 +7284,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [7, 8, 9], + "action_ids" : [9, 10, 11], "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"], "base_default_next" : "FabricIngress.filtering.fwd_classifier", "next_tables" : { @@ -6094,7 +7293,7 @@ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier" }, "default_entry" : { - "action_id" : 7, + "action_id" : 9, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6141,14 +7340,14 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [10], + "action_ids" : [12], "actions" : ["FabricIngress.filtering.set_forwarding_type"], "base_default_next" : "node_25", "next_tables" : { "FabricIngress.filtering.set_forwarding_type" : "node_25" }, "default_entry" : { - "action_id" : 10, + "action_id" : 12, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true @@ -6183,7 +7382,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [11, 0], + "action_ids" : [13, 0], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -6220,7 +7419,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [12, 1], + "action_ids" : [14, 1], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -6257,7 +7456,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [13, 14, 2], + "action_ids" : [15, 16, 2], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { @@ -6361,7 +7560,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15, 16, 17, 18, 19], + "action_ids" : [17, 18, 19, 20, 21], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], "base_default_next" : "node_33", "next_tables" : { @@ -6372,7 +7571,7 @@ "FabricIngress.acl.nop_acl" : "node_33" }, "default_entry" : { - "action_id" : 19, + "action_id" : 21, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6407,7 +7606,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [21, 22, 4], + "action_ids" : [23, 24, 4], "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"], "base_default_next" : "FabricIngress.next.hashed", "next_tables" : { @@ -6446,7 +7645,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [23, 24, 25, 5], + "action_ids" : [25, 26, 27, 5], "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"], "base_default_next" : "FabricIngress.next.multicast", "next_tables" : { @@ -6479,7 +7678,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [26, 6], + "action_ids" : [28, 6], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], "base_default_next" : "FabricIngress.next.next_vlan", "next_tables" : { @@ -6516,7 +7715,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [20, 3], + "action_ids" : [22, 3], "actions" : ["FabricIngress.next.set_vlan", "nop"], "base_default_next" : "node_38", "next_tables" : { @@ -6531,7 +7730,7 @@ } }, { - "name" : "tbl_act_7", + "name" : "tbl_act_6", "id" : 23, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -6546,21 +7745,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [44], - "actions" : ["act_7"], + "action_ids" : [51], + "actions" : ["act_6"], "base_default_next" : "node_40", "next_tables" : { - "act_7" : "node_40" + "act_6" : "node_40" }, "default_entry" : { - "action_id" : 44, + "action_id" : 51, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_8", + "name" : "tbl_act_7", "id" : 24, "source_info" : { "filename" : "include/control/port_counter.p4", @@ -6575,14 +7774,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], - "actions" : ["act_8"], + "action_ids" : [52], + "actions" : ["act_7"], "base_default_next" : null, "next_tables" : { - "act_8" : null + "act_7" : null }, "default_entry" : { - "action_id" : 45, + "action_id" : 52, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6649,72 +7848,58 @@ } }, "true_next" : "tbl_act", - "false_next" : "tbl_act_0" + "false_next" : "FabricIngress.spgw.interfaces" }, { - "name" : "node_6", + "name" : "node_7", "id" : 1, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 249, - "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" - }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] - } - } - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "bool", - "value" : true + "type" : "field", + "value" : ["scalars", "spgw_tmp"] } } }, - "true_next" : "tbl_act_1", - "false_next" : "node_8" + "true_next" : "node_8", + "false_next" : "node_19" }, { "name" : "node_8", "id" : 2, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 246, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] + }, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "spgw_ingress_hasReturned"] - } - } + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "node_9", - "false_next" : "node_19" + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_10" }, { - "name" : "node_9", + "name" : "node_10", "id" : 3, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 253, - "column" : 12, + "line" : 250, + "column" : 16, "source_fragment" : "hdr.gtpu.isValid()" }, "expression" : { @@ -6728,50 +7913,43 @@ } } }, - "true_next" : "FabricIngress.spgw_ingress.uplink_pdr_lookup", - "false_next" : "FabricIngress.spgw_ingress.downlink_pdr_lookup" + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" }, { "name" : "node_13", "id" : 4, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 266, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" + "line" : 255, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", + "op" : "!=", "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap33"] - } - } + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._spgw_src_iface26"] }, "right" : { - "type" : "bool", - "value" : true + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "FabricIngress.spgw_ingress.decap_gtpu", - "false_next" : "FabricIngress.spgw_ingress.far_lookup" + "true_next" : "tbl_act_2", + "false_next" : "node_15" }, { - "name" : "node_16", + "name" : "node_15", "id" : 5, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 277, - "column" : 12, - "source_fragment" : "fabric_md.spgw.far_dropped == true" + "line" : 260, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_decap == true" }, "expression" : { "type" : "expression", @@ -6784,7 +7962,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_far_dropped30"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_decap30"] } } }, @@ -6794,8 +7972,8 @@ } } }, - "true_next" : "tbl_act_3", - "false_next" : "tbl_act_4" + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" }, { "name" : "node_19", @@ -6817,7 +7995,7 @@ } } }, - "true_next" : "tbl_act_5", + "true_next" : "tbl_act_4", "false_next" : "node_21" }, { @@ -6847,7 +8025,7 @@ } } }, - "true_next" : "tbl_act_6", + "true_next" : "tbl_act_5", "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { @@ -7017,7 +8195,7 @@ } } }, - "true_next" : "tbl_act_7", + "true_next" : "tbl_act_6", "false_next" : "node_40" }, { @@ -7044,7 +8222,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_8" + "true_next" : "tbl_act_7" } ] }, @@ -7060,7 +8238,7 @@ "init_table" : "node_44", "tables" : [ { - "name" : "tbl_act_9", + "name" : "tbl_act_8", "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", @@ -7075,21 +8253,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [52], - "actions" : ["act_9"], + "action_ids" : [59], + "actions" : ["act_8"], "base_default_next" : "node_46", "next_tables" : { - "act_9" : "node_46" + "act_8" : "node_46" }, "default_entry" : { - "action_id" : 52, + "action_id" : 59, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_10", + "name" : "tbl_act_9", "id" : 26, "source_info" : { "filename" : "include/control/packetio.p4", @@ -7104,21 +8282,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], - "actions" : ["act_10"], + "action_ids" : [60], + "actions" : ["act_9"], "base_default_next" : "node_48", "next_tables" : { - "act_10" : "node_48" + "act_9" : "node_48" }, "default_entry" : { - "action_id" : 53, + "action_id" : 60, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_11", + "name" : "tbl_act_10", "id" : 27, "source_info" : { "filename" : "include/control/next.p4", @@ -7133,14 +8311,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], - "actions" : ["act_11"], + "action_ids" : [61], + "actions" : ["act_10"], "base_default_next" : "node_50", "next_tables" : { - "act_11" : "node_50" + "act_10" : "node_50" }, "default_entry" : { - "action_id" : 54, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7162,14 +8340,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], + "action_ids" : [54], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 47, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7191,14 +8369,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], + "action_ids" : [55], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 48, + "action_id" : 55, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7233,22 +8411,22 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50, 46], + "action_ids" : [57, 53], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], "base_default_next" : null, "next_tables" : { - "__HIT__" : "tbl_act_12", - "__MISS__" : "tbl_act_13" + "__HIT__" : "tbl_act_11", + "__MISS__" : "tbl_act_12" }, "default_entry" : { - "action_id" : 46, + "action_id" : 53, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_12", + "name" : "tbl_act_11", "id" : 31, "key" : [], "match_type" : "exact", @@ -7257,21 +8435,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], - "actions" : ["act_12"], + "action_ids" : [62], + "actions" : ["act_11"], "base_default_next" : "node_57", "next_tables" : { - "act_12" : "node_57" + "act_11" : "node_57" }, "default_entry" : { - "action_id" : 55, + "action_id" : 62, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_13", + "name" : "tbl_act_12", "id" : 32, "key" : [], "match_type" : "exact", @@ -7280,14 +8458,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], - "actions" : ["act_13"], + "action_ids" : [63], + "actions" : ["act_12"], "base_default_next" : "node_57", "next_tables" : { - "act_13" : "node_57" + "act_12" : "node_57" }, "default_entry" : { - "action_id" : 56, + "action_id" : 63, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7309,21 +8487,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], + "action_ids" : [56], "actions" : ["FabricEgress.egress_next.push_vlan"], "base_default_next" : "node_60", "next_tables" : { "FabricEgress.egress_next.push_vlan" : "node_60" }, "default_entry" : { - "action_id" : 49, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_14", + "name" : "tbl_act_13", "id" : 34, "source_info" : { "filename" : "include/control/next.p4", @@ -7338,21 +8516,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58], - "actions" : ["act_15"], + "action_ids" : [65], + "actions" : ["act_14"], "base_default_next" : "node_62", "next_tables" : { - "act_15" : "node_62" + "act_14" : "node_62" }, "default_entry" : { - "action_id" : 58, + "action_id" : 65, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_15", + "name" : "tbl_act_14", "id" : 35, "source_info" : { "filename" : "include/control/next.p4", @@ -7367,21 +8545,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57], - "actions" : ["act_14"], - "base_default_next" : "tbl_act_18", + "action_ids" : [64], + "actions" : ["act_13"], + "base_default_next" : "node_68", "next_tables" : { - "act_14" : "tbl_act_18" + "act_13" : "node_68" }, "default_entry" : { - "action_id" : 57, + "action_id" : 64, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_16", + "name" : "tbl_act_15", "id" : 36, "source_info" : { "filename" : "include/control/next.p4", @@ -7396,21 +8574,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [60], - "actions" : ["act_17"], + "action_ids" : [67], + "actions" : ["act_16"], "base_default_next" : "node_66", "next_tables" : { - "act_17" : "node_66" + "act_16" : "node_66" }, "default_entry" : { - "action_id" : 60, + "action_id" : 67, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_17", + "name" : "tbl_act_16", "id" : 37, "source_info" : { "filename" : "include/control/next.p4", @@ -7425,50 +8603,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59], - "actions" : ["act_16"], - "base_default_next" : "tbl_act_18", + "action_ids" : [66], + "actions" : ["act_15"], + "base_default_next" : "node_68", "next_tables" : { - "act_16" : "tbl_act_18" + "act_15" : "node_68" }, "default_entry" : { - "action_id" : 59, + "action_id" : 66, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_18", + "name" : "tbl_spgw_gtpu_encap", "id" : 38, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [62], - "actions" : ["act_19"], - "base_default_next" : "node_69", - "next_tables" : { - "act_19" : "node_69" - }, - "default_entry" : { - "action_id" : 62, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_19", - "id" : 39, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 343, - "column" : 46, - "source_fragment" : "return" + "line" : 330, + "column" : 16, + "source_fragment" : "gtpu_encap()" }, "key" : [], "match_type" : "exact", @@ -7477,26 +8632,26 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61], - "actions" : ["act_18"], + "action_ids" : [58], + "actions" : ["FabricEgress.spgw.gtpu_encap"], "base_default_next" : "node_71", "next_tables" : { - "act_18" : "node_71" + "FabricEgress.spgw.gtpu_encap" : "node_71" }, "default_entry" : { - "action_id" : 61, + "action_id" : 58, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_20", - "id" : 40, + "name" : "tbl_act_17", + "id" : 39, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 344, - "column" : 8, + "line" : 333, + "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], @@ -7506,43 +8661,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63], - "actions" : ["act_20"], - "base_default_next" : "node_73", - "next_tables" : { - "act_20" : "node_73" - }, - "default_entry" : { - "action_id" : 63, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_spgw_egress_gtpu_encap", - "id" : 41, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 347, - "column" : 12, - "source_fragment" : "gtpu_encap()" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [51], - "actions" : ["FabricEgress.spgw_egress.gtpu_encap"], + "action_ids" : [68], + "actions" : ["act_17"], "base_default_next" : null, "next_tables" : { - "FabricEgress.spgw_egress.gtpu_encap" : null + "act_17" : null }, "default_entry" : { - "action_id" : 51, + "action_id" : 68, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7581,7 +8707,7 @@ } } }, - "true_next" : "tbl_act_9", + "true_next" : "tbl_act_8", "false_next" : "node_46" }, { @@ -7607,7 +8733,7 @@ } } }, - "true_next" : "tbl_act_10", + "true_next" : "tbl_act_9", "false_next" : "node_48" }, { @@ -7660,7 +8786,7 @@ } } }, - "true_next" : "tbl_act_11", + "true_next" : "tbl_act_10", "false_next" : "node_50" }, { @@ -7788,7 +8914,7 @@ } } }, - "true_next" : "tbl_act_14", + "true_next" : "tbl_act_13", "false_next" : "node_64" }, { @@ -7814,8 +8940,8 @@ } } }, - "true_next" : "tbl_act_15", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_14", + "false_next" : "node_68" }, { "name" : "node_64", @@ -7857,8 +8983,8 @@ } } }, - "true_next" : "tbl_act_16", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_15", + "false_next" : "node_68" }, { "name" : "node_66", @@ -7883,17 +9009,17 @@ } } }, - "true_next" : "tbl_act_17", - "false_next" : "tbl_act_18" + "true_next" : "tbl_act_16", + "false_next" : "node_68" }, { - "name" : "node_69", + "name" : "node_68", "id" : 26, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 343, + "line" : 328, "column" : 12, - "source_fragment" : "fabric_md.spgw.skip_spgw == true" + "source_fragment" : "fabric_md.spgw.skip_spgw == false" }, "expression" : { "type" : "expression", @@ -7906,51 +9032,60 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw28"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_spgw27"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, - "true_next" : "tbl_act_19", - "false_next" : "node_71" + "false_next" : null, + "true_next" : "node_69" }, { - "name" : "node_71", + "name" : "node_69", "id" : 27, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 16, + "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + }, "expression" : { "type" : "expression", "value" : { - "op" : "not", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "expression", "value" : { "op" : "d2b", "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "spgw_egress_hasReturned"] + "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap29"] } } + }, + "right" : { + "type" : "bool", + "value" : true } } }, - "false_next" : null, - "true_next" : "tbl_act_20" + "true_next" : "tbl_spgw_gtpu_encap", + "false_next" : "node_71" }, { - "name" : "node_73", + "name" : "node_71", "id" : 28, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 346, - "column" : 12, - "source_fragment" : "fabric_md.spgw.needs_gtpu_encap == true" + "line" : 332, + "column" : 16, + "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr == false" }, "expression" : { "type" : "expression", @@ -7963,18 +9098,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._spgw_needs_gtpu_encap32"] + "value" : ["scalars", "fabric_metadata_t._spgw_skip_egress_pdr_ctr31"] } } }, "right" : { "type" : "bool", - "value" : true + "value" : false } } }, "false_next" : null, - "true_next" : "tbl_spgw_egress_gtpu_encap" + "true_next" : "tbl_act_17" } ] } @@ -8011,7 +9146,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 362, + "line" : 349, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt index 0db64318a5f..13a2236b11a 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt @@ -365,9 +365,9 @@ tables { } tables { preamble { - id: 33584493 - name: "FabricIngress.spgw_ingress.interface_lookup" - alias: "interface_lookup" + id: 33557250 + name: "FabricIngress.spgw.interfaces" + alias: "interfaces" } match_fields { id: 1 @@ -382,16 +382,21 @@ tables { match_type: EXACT } action_refs { - id: 16797935 + id: 16810012 } - const_default_action_id: 16797935 + action_refs { + id: 16783042 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 16783042 size: 128 } tables { preamble { - id: 33586958 - name: "FabricIngress.spgw_ingress.downlink_pdr_lookup" - alias: "downlink_pdr_lookup" + id: 33566601 + name: "FabricIngress.spgw.downlink_pdrs" + alias: "downlink_pdrs" } match_fields { id: 1 @@ -400,16 +405,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33587070 - name: "FabricIngress.spgw_ingress.uplink_pdr_lookup" - alias: "uplink_pdr_lookup" + id: 33606410 + name: "FabricIngress.spgw.uplink_pdrs" + alias: "uplink_pdrs" } match_fields { id: 1 @@ -424,16 +433,20 @@ tables { match_type: EXACT } action_refs { - id: 16799934 + id: 16800614 + } + action_refs { + id: 16800567 + annotations: "@defaultonly" + scope: DEFAULT_ONLY } - const_default_action_id: 16799934 size: 1024 } tables { preamble { - id: 33613200 - name: "FabricIngress.spgw_ingress.far_lookup" - alias: "far_lookup" + id: 33599560 + name: "FabricIngress.spgw.fars" + alias: "fars" } match_fields { id: 1 @@ -442,12 +455,15 @@ tables { match_type: EXACT } action_refs { - id: 16834935 + id: 16820307 } action_refs { - id: 16787606 + id: 16814785 } - const_default_action_id: 16834935 + action_refs { + id: 16814681 + } + const_default_action_id: 16820307 size: 2048 } tables { @@ -487,6 +503,13 @@ actions { alias: "nop" } } +actions { + preamble { + id: 16800567 + name: "NoAction" + alias: "NoAction" + } +} actions { preamble { id: 16836487 @@ -724,31 +747,28 @@ actions { } actions { preamble { - id: 16797935 - name: "FabricIngress.spgw_ingress.set_source_iface" - alias: "set_source_iface" + id: 16810012 + name: "FabricIngress.spgw.load_iface" + alias: "load_iface" } params { id: 1 name: "src_iface" bitwidth: 8 } - params { - id: 2 - name: "direction" - bitwidth: 2 - } - params { - id: 3 - name: "skip_spgw" - bitwidth: 1 +} +actions { + preamble { + id: 16783042 + name: "FabricIngress.spgw.iface_miss" + alias: "iface_miss" } } actions { preamble { - id: 16799934 - name: "FabricIngress.spgw_ingress.set_pdr_attributes" - alias: "set_pdr_attributes" + id: 16800614 + name: "FabricIngress.spgw.load_pdr" + alias: "load_pdr" } params { id: 1 @@ -768,9 +788,9 @@ actions { } actions { preamble { - id: 16834935 - name: "FabricIngress.spgw_ingress.load_normal_far_attributes" - alias: "load_normal_far_attributes" + id: 16820307 + name: "FabricIngress.spgw.load_normal_far" + alias: "load_normal_far" } params { id: 1 @@ -785,9 +805,9 @@ actions { } actions { preamble { - id: 16787606 - name: "FabricIngress.spgw_ingress.load_tunnel_far_attributes" - alias: "load_tunnel_far_attributes" + id: 16814785 + name: "FabricIngress.spgw.load_tunnel_far" + alias: "load_tunnel_far" } params { id: 1 @@ -822,30 +842,39 @@ actions { } actions { preamble { - id: 16829280 - name: "FabricIngress.spgw_ingress.decap_inner_tcp" - alias: "decap_inner_tcp" + id: 16814681 + name: "FabricIngress.spgw.load_dbuf_far" + alias: "load_dbuf_far" } -} -actions { - preamble { - id: 16815878 - name: "FabricIngress.spgw_ingress.decap_inner_udp" - alias: "decap_inner_udp" + params { + id: 1 + name: "drop" + bitwidth: 1 } -} -actions { - preamble { - id: 16801274 - name: "FabricIngress.spgw_ingress.decap_inner_icmp" - alias: "decap_inner_icmp" + params { + id: 2 + name: "notify_cp" + bitwidth: 1 } -} -actions { - preamble { - id: 16830582 - name: "FabricIngress.spgw_ingress.decap_inner_unknown" - alias: "decap_inner_unknown" + params { + id: 3 + name: "tunnel_src_port" + bitwidth: 16 + } + params { + id: 4 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 5 + name: "tunnel_dst_addr" + bitwidth: 32 + } + params { + id: 6 + name: "teid" + bitwidth: 32 } } actions { @@ -890,9 +919,9 @@ counters { } counters { preamble { - id: 302029884 - name: "FabricIngress.spgw_ingress.pdr_counter" - alias: "spgw_ingress.pdr_counter" + id: 302043952 + name: "FabricIngress.spgw.pdr_counter" + alias: "FabricIngress.spgw.pdr_counter" } spec { unit: BOTH @@ -901,9 +930,9 @@ counters { } counters { preamble { - id: 302012289 - name: "FabricEgress.spgw_egress.pdr_counter" - alias: "spgw_egress.pdr_counter" + id: 302049491 + name: "FabricEgress.spgw.pdr_counter" + alias: "FabricEgress.spgw.pdr_counter" } spec { unit: BOTH diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index 972af8eb42e..2143288c898 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -2387,7 +2387,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 126, + "line" : 116, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2466,7 +2466,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 115, "column" : 31, "source_fragment" : "0x8100; ..." } diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java index a0e61946514..7ee9c888a10 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java @@ -28,6 +28,7 @@ import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; +import org.onosproject.pipelines.fabric.FabricConstants; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java index 18cd132202c..1372a25df64 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java @@ -38,7 +38,7 @@ import org.onosproject.net.flowobjective.ObjectiveError; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.Collection; import java.util.List; diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java index 3d2942fbc17..4c554a95f48 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java @@ -46,7 +46,7 @@ import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.List; diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java index a7d03c28eb2..ffe6221c398 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java @@ -39,7 +39,7 @@ import org.onosproject.net.pi.runtime.PiActionParam; import org.onosproject.net.pi.runtime.PiActionProfileGroupId; import org.onosproject.net.pi.runtime.PiGroupKey; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants; +import org.onosproject.pipelines.fabric.FabricConstants; import java.util.List; import java.util.stream.Collectors; From f8211628f8ac26829a4d183ced65d55cdcc131f3 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 3 Dec 2020 20:01:40 -0800 Subject: [PATCH 010/235] Exposes PiTranslators implementation through the adapter pattern PiTranslators can be used by external apps by adding pom dependency: org.onosproject onos-core-net ${onos.version} test org.onosproject onos-core-net ${onos.version} tests test These deps are used to access the adapters and the impl classes Change-Id: If526a2600d1b2d6d7db906d61c41b3b0d0e5b951 --- .../pi/impl/PiFlowRuleTranslatorAdapter.java | 58 +++++++++++++++++++ .../net/pi/impl/PiGroupTranslatorAdapter.java | 58 +++++++++++++++++++ .../PiReplicationGroupTranslatorAdapter.java | 58 +++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 core/net/src/test/java/org/onosproject/net/pi/impl/PiFlowRuleTranslatorAdapter.java create mode 100644 core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorAdapter.java create mode 100644 core/net/src/test/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorAdapter.java diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiFlowRuleTranslatorAdapter.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiFlowRuleTranslatorAdapter.java new file mode 100644 index 00000000000..07f47b160b3 --- /dev/null +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiFlowRuleTranslatorAdapter.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.pi.impl; + +import com.google.common.collect.Maps; +import org.onosproject.net.flow.FlowRule; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.runtime.PiHandle; +import org.onosproject.net.pi.runtime.PiTableEntry; +import org.onosproject.net.pi.service.PiFlowRuleTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; + +import java.util.Map; +import java.util.Optional; + +/** + * Adapter implementation of PiFlowRuleTranslator. + */ +public class PiFlowRuleTranslatorAdapter implements PiFlowRuleTranslator { + + private final Map> store = Maps.newHashMap(); + + @Override + public PiTableEntry translate(FlowRule original, PiPipeconf pipeconf) throws PiTranslationException { + // NOTE Passing device equals to null is meant only for testing purposes + return PiFlowRuleTranslatorImpl.translate(original, pipeconf, null); + } + + @Override + public void learn(PiHandle handle, PiTranslatedEntity entity) { + store.put(handle, entity); + } + + @Override + public Optional> lookup(PiHandle handle) { + return Optional.ofNullable(store.get(handle)); + } + + @Override + public void forget(PiHandle handle) { + store.remove(handle); + } +} diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorAdapter.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorAdapter.java new file mode 100644 index 00000000000..66383b3c763 --- /dev/null +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorAdapter.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.pi.impl; + +import com.google.common.collect.Maps; +import org.onosproject.net.group.Group; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.runtime.PiActionProfileGroup; +import org.onosproject.net.pi.runtime.PiHandle; +import org.onosproject.net.pi.service.PiGroupTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; + +import java.util.Map; +import java.util.Optional; + +/** + * Adapter implementation of PiGroupTranslator. + */ +public class PiGroupTranslatorAdapter implements PiGroupTranslator { + + private final Map> store = Maps.newHashMap(); + + @Override + public PiActionProfileGroup translate(Group original, PiPipeconf pipeconf) throws PiTranslationException { + // NOTE Passing device equals to null is meant only for testing purposes + return PiGroupTranslatorImpl.translate(original, pipeconf, null); + } + + @Override + public void learn(PiHandle handle, PiTranslatedEntity entity) { + store.put(handle, entity); + } + + @Override + public Optional> lookup(PiHandle handle) { + return Optional.ofNullable(store.get(handle)); + } + + @Override + public void forget(PiHandle handle) { + store.remove(handle); + } +} diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorAdapter.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorAdapter.java new file mode 100644 index 00000000000..8f6f48614b5 --- /dev/null +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorAdapter.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.pi.impl; + +import com.google.common.collect.Maps; +import org.onosproject.net.group.Group; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.runtime.PiHandle; +import org.onosproject.net.pi.runtime.PiPreEntry; +import org.onosproject.net.pi.service.PiReplicationGroupTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; + +import java.util.Map; +import java.util.Optional; + +/** + * Adapter implementation of PiGroupTranslator. + */ +public class PiReplicationGroupTranslatorAdapter implements PiReplicationGroupTranslator { + + private final Map> store = Maps.newHashMap(); + + @Override + public PiPreEntry translate(Group original, PiPipeconf pipeconf) throws PiTranslationException { + // NOTE Passing device equals to null is meant only for testing purposes + return PiReplicationGroupTranslatorImpl.translate(original, pipeconf, null); + } + + @Override + public void learn(PiHandle handle, PiTranslatedEntity entity) { + store.put(handle, entity); + } + + @Override + public Optional> lookup(PiHandle handle) { + return Optional.ofNullable(store.get(handle)); + } + + @Override + public void forget(PiHandle handle) { + store.remove(handle); + } +} From 6fa8cd68339b49a917d746cb0ffe9e6b9b89b2e0 Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 8 Oct 2020 17:21:49 +0200 Subject: [PATCH 011/235] [AETHER-599] Implement FabricPipelineTraceable Core changes supporting fabric traceable implementation. Includes minor fixes to the OFDPA traceable unit tests Change-Id: I2f0d1172022a8fc725df9e96526092c59ddc0e0b --- .../net/PipelineTraceableHitChain.java | 21 +- .../net/PipelineTraceableInput.java | 35 +- .../net/PipelineTraceableMetadata.java | 24 + .../net/PipelineTraceableOutput.java | 27 +- .../net/PipelineTraceablePacket.java | 96 ++++ .../net/flow/criteria/PiCriterion.java | 25 + .../traceable/OfdpaPipelineTraceable.java | 45 +- .../traceable/OfdpaPipelineTraceableTest.java | 494 +++++++++--------- .../traceable/TraceableTestObjects.java | 4 - 9 files changed, 477 insertions(+), 294 deletions(-) create mode 100644 core/api/src/main/java/org/onosproject/net/PipelineTraceableMetadata.java create mode 100644 core/api/src/main/java/org/onosproject/net/PipelineTraceablePacket.java diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java index 4eb26b56063..6e5f566f867 100644 --- a/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java +++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java @@ -17,7 +17,6 @@ package org.onosproject.net; import com.google.common.collect.Lists; -import org.onosproject.net.flow.TrafficSelector; import java.util.List; import java.util.Objects; @@ -25,11 +24,11 @@ /** * Class to represent the pipeline hit chain and the result of the pipeline processing. */ -public class PipelineTraceableHitChain { +public final class PipelineTraceableHitChain { private ConnectPoint outputPort; private List hitChain; - private TrafficSelector egressPacket; + private PipelineTraceablePacket egressPacket; // By default packets are dropped private boolean dropped = true; @@ -42,10 +41,10 @@ private PipelineTraceableHitChain() { * * @param output the output connect point * @param hits the hits in the pipeline (flows, groups and other abstractions) - * @param packet the selector representing the final packet + * @param packet the traceable packet representing the final packet */ public PipelineTraceableHitChain(ConnectPoint output, List hits, - TrafficSelector packet) { + PipelineTraceablePacket packet) { this.outputPort = output; this.hitChain = hits; this.egressPacket = packet; @@ -65,7 +64,7 @@ public static PipelineTraceableHitChain emptyHitChain() { * * @return the connect point */ - public ConnectPoint getOutputPort() { + public ConnectPoint outputPort() { return outputPort; } @@ -83,7 +82,7 @@ public void setOutputPort(ConnectPoint outputPort) { * * @return flows and groups that matched. */ - public List getHitChain() { + public List hitChain() { return hitChain; } @@ -113,9 +112,9 @@ public void removeDataPlaneEntity(DataPlaneEntity dataPlaneEntity) { /** * Returns the egress packet after traversing the pipeline. * - * @return the selector representing the packet infos + * @return the traceable packet representing the packet infos */ - public TrafficSelector getEgressPacket() { + public PipelineTraceablePacket egressPacket() { return egressPacket; } @@ -124,7 +123,7 @@ public TrafficSelector getEgressPacket() { * * @param egressPacket the egress packet */ - public void setEgressPacket(TrafficSelector egressPacket) { + public void setEgressPacket(PipelineTraceablePacket egressPacket) { this.egressPacket = egressPacket; } @@ -164,7 +163,7 @@ public boolean equals(Object obj) { if (obj instanceof PipelineTraceableHitChain) { PipelineTraceableHitChain that = (PipelineTraceableHitChain) obj; return Objects.equals(this.outputPort, that.outputPort) && - Objects.equals(this.hitChain, that.getHitChain()) && + Objects.equals(this.hitChain, that.hitChain) && Objects.equals(this.egressPacket, that.egressPacket) && Objects.equals(this.dropped, that.dropped); } diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java index 2403c5ee88a..8df5d95c467 100644 --- a/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java +++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java @@ -20,7 +20,6 @@ import com.google.common.collect.Maps; import org.onosproject.core.GroupId; import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.group.Group; import java.util.List; @@ -29,20 +28,29 @@ /** * Represents the input of the pipeline traceable processing. */ -public class PipelineTraceableInput { +public final class PipelineTraceableInput { // Input state for the traceable behavior - TrafficSelector ingressPacket; - ConnectPoint ingressPort; + private PipelineTraceablePacket ingressPacket; + private ConnectPoint ingressPort; // List here all possible device state using // possibly an optimized reference - List flows = Lists.newArrayList(); - Map groups = Maps.newHashMap(); + private List flows = Lists.newArrayList(); + private Map groups = Maps.newHashMap(); + private List deviceState; - public PipelineTraceableInput(TrafficSelector ingressPacket, ConnectPoint ingressPort, + /** + * Builds a pipeline traceable input. + * + * @param ingressPacket the input packet + * @param ingressPort the input port + * @param deviceState the device state + */ + public PipelineTraceableInput(PipelineTraceablePacket ingressPacket, ConnectPoint ingressPort, List deviceState) { this.ingressPacket = ingressPacket; this.ingressPort = ingressPort; + this.deviceState = deviceState; processDeviceState(deviceState); } @@ -62,7 +70,7 @@ private void processDeviceState(List deviceState) { * * @return the ingress packet */ - public TrafficSelector ingressPacket() { + public PipelineTraceablePacket ingressPacket() { return ingressPacket; } @@ -75,6 +83,15 @@ public ConnectPoint ingressPort() { return ingressPort; } + /** + * Getter for the device state. + * + * @return the device state + */ + public List deviceState() { + return deviceState; + } + /** * Getter for the flows. * @@ -99,7 +116,7 @@ public Map groups() { * @param groupId the group id * @return the group, otherwise null. */ - public Group getGroup(GroupId groupId) { + public Group groupById(GroupId groupId) { return groups.get(groupId); } diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableMetadata.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableMetadata.java new file mode 100644 index 00000000000..2c92afcf78c --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableMetadata.java @@ -0,0 +1,24 @@ +/* + * Copyright 2020-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net; + +/** + * Stores traceable processing metadata. + */ +public interface PipelineTraceableMetadata { + +} diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java index 21a98194dd1..66a18c098f7 100644 --- a/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java +++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java @@ -74,7 +74,7 @@ private PipelineTraceableOutput(String log, List hitC * * @return the log message */ - public String getLog() { + public String log() { return log; } @@ -83,7 +83,7 @@ public String getLog() { * * @return the pipeline hit chains */ - public List getHitChains() { + public List hitChains() { return hitChains; } @@ -92,7 +92,7 @@ public List getHitChains() { * * @return the pipeline traceable result */ - public PipelineTraceableResult getResult() { + public PipelineTraceableResult result() { return result; } @@ -105,6 +105,16 @@ public static PipelineTraceableOutput.Builder builder() { return new PipelineTraceableOutput.Builder(); } + /** + * Returns a new builder initialized with the traceable output. + * + * @param pipelineTraceableOutput the output used for the initialization + * @return an initialized builder + */ + public static PipelineTraceableOutput.Builder builder(PipelineTraceableOutput pipelineTraceableOutput) { + return new PipelineTraceableOutput.Builder(pipelineTraceableOutput); + } + /** * Builder of pipeline traceable entities. */ @@ -114,6 +124,15 @@ public static final class Builder { private List hitChains = Lists.newArrayList(); private PipelineTraceableResult result = PipelineTraceableResult.SUCCESS; + private Builder() { + } + + private Builder(PipelineTraceableOutput traceableOutput) { + appendToLog("\n" + traceableOutput.log()); + setResult(traceableOutput.result()); + traceableOutput.hitChains().forEach(this::addHitChain); + } + /** * Appends a message to the log. * @@ -128,7 +147,7 @@ public Builder appendToLog(String message) { return this; } - private Builder setResult(PipelineTraceableResult result) { + public Builder setResult(PipelineTraceableResult result) { // Do not override original failure if (this.result == PipelineTraceableResult.SUCCESS) { this.result = result; diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceablePacket.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceablePacket.java new file mode 100644 index 00000000000..ffa2063b735 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceablePacket.java @@ -0,0 +1,96 @@ +/* + * Copyright 2020-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net; + +import org.onosproject.net.flow.TrafficSelector; + +import java.util.Objects; + +/** + * Represents a traceable packet composed by a traffic selector and metadata. + */ +public final class PipelineTraceablePacket { + + // stores metadata associated with the packet + private PipelineTraceableMetadata metadata; + // representation of the packet + private TrafficSelector packet; + + /** + * Builds a traceable packet without metadata. + * Note this can be used for legacy device like ofdpa. + * + * @param packet the packet selector + */ + public PipelineTraceablePacket(TrafficSelector packet) { + this.packet = packet; + } + + /** + * Builds a traceable packet with metadata. + * @param packet the packet selector + * @param metadata the packet metadata + */ + public PipelineTraceablePacket(TrafficSelector packet, PipelineTraceableMetadata metadata) { + this.packet = packet; + this.metadata = metadata; + } + + /** + * Getter for the metadata. + * + * @return the packet metadata + */ + public PipelineTraceableMetadata metadata() { + return metadata; + } + + /** + * Getter for the packet selector. + * + * @return the packet selector + */ + public TrafficSelector packet() { + return packet; + } + + @Override + public int hashCode() { + return Objects.hash(metadata, packet); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof PipelineTraceablePacket) { + PipelineTraceablePacket that = (PipelineTraceablePacket) obj; + return Objects.equals(this.metadata, that.metadata) && + Objects.equals(this.packet, that.packet); + } + return false; + } + + @Override + public String toString() { + return "PipelineTraceablePacket{" + + "metadata=" + metadata + + ", packet=" + packet + + '}'; + } +} diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/PiCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/PiCriterion.java index a346927fd72..17d1270cd91 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/criteria/PiCriterion.java +++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/PiCriterion.java @@ -107,6 +107,16 @@ public static Builder builder() { return new Builder(); } + /** + * Returns the PiCriterion builder initialized by the given PiCriterion. + * + * @param piCriterion the input PiCriterion + * @return PiCriterion builder + */ + public static Builder builder(PiCriterion piCriterion) { + return new Builder(piCriterion); + } + /** * PiCriterion Builder. */ @@ -120,6 +130,21 @@ private Builder() { // ban constructor. } + private Builder(PiCriterion piCriterion) { + piCriterion.fieldMatchMap.forEach(((piMatchFieldId, piFieldMatch) -> add(piFieldMatch))); + } + + /** + * Adds a match field to the builder. + * + * @param field the field value + * @return this + */ + public Builder add(PiFieldMatch field) { + fieldMatchMapBuilder.put(field.fieldId(), field); + return this; + } + /** * Adds an exact field match for the given fieldId and value. * diff --git a/drivers/default/src/main/java/org/onosproject/driver/traceable/OfdpaPipelineTraceable.java b/drivers/default/src/main/java/org/onosproject/driver/traceable/OfdpaPipelineTraceable.java index c26902224e5..fa6a2316fbb 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/traceable/OfdpaPipelineTraceable.java +++ b/drivers/default/src/main/java/org/onosproject/driver/traceable/OfdpaPipelineTraceable.java @@ -30,6 +30,7 @@ import org.onosproject.net.DataPlaneEntity; import org.onosproject.net.PipelineTraceableInput; import org.onosproject.net.PipelineTraceableOutput; +import org.onosproject.net.PipelineTraceablePacket; import org.onosproject.net.PortNumber; import org.onosproject.net.behaviour.PipelineTraceable; import org.onosproject.net.behaviour.Pipeliner; @@ -106,13 +107,14 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { List outputFlows = new ArrayList<>(); List deferredInstructions = new ArrayList<>(); PipelineTraceableHitChain currentHitChain = PipelineTraceableHitChain.emptyHitChain(); - TrafficSelector currentPacket = DefaultTrafficSelector.builder(input.ingressPacket()).build(); + TrafficSelector currentPacket = DefaultTrafficSelector.builder( + input.ingressPacket().packet()).build(); // Init step - find out the first table int initialTableId = -1; FlowEntry nextTableIdEntry = findNextTableIdEntry(initialTableId, input.flows()); if (nextTableIdEntry == null) { - currentHitChain.setEgressPacket(currentPacket); + currentHitChain.setEgressPacket(new PipelineTraceablePacket(currentPacket)); currentHitChain.dropped(); return outputBuilder.appendToLog("No flow rules for device " + deviceId + ". Aborting") .noFlows() @@ -137,7 +139,7 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { if (((IndexTableId) tableId).id() == MPLS_L3_TYPE_TABLE) { // Apparently a miss but Table 27 on OFDPA is a fixed table - currentPacket = handleOfdpa27FixedTable(input.ingressPacket(), currentPacket); + currentPacket = handleOfdpa27FixedTable(input.ingressPacket().packet(), currentPacket); // The nextTable should be ACL tableId = IndexTableId.of(ACL_TABLE - 1); } @@ -147,8 +149,8 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { log.debug("Next table id entry {}", nextTableIdEntry); // FIXME Find better solution that enable granularity greater than 0 or all rules // (another possibility is max tableId) - if (nextTableIdEntry == null && currentHitChain.getHitChain().size() == 0) { - currentHitChain.setEgressPacket(currentPacket); + if (nextTableIdEntry == null && currentHitChain.hitChain().size() == 0) { + currentHitChain.setEgressPacket(new PipelineTraceablePacket(currentPacket)); currentHitChain.dropped(); return outputBuilder.appendToLog("No flow rules for device " + deviceId + ". Aborting") .noFlows() @@ -173,7 +175,7 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { } } else if (flowEntry == null) { - currentHitChain.setEgressPacket(currentPacket); + currentHitChain.setEgressPacket(new PipelineTraceablePacket(currentPacket)); currentHitChain.dropped(); return outputBuilder.appendToLog("Packet has no match on table " + tableId + " in device " + deviceId + ". Dropping") @@ -231,7 +233,7 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { if (secondVlanFlow != null) { currentHitChain.addDataPlaneEntity(new DataPlaneEntity(secondVlanFlow)); } else { - currentHitChain.setEgressPacket(currentPacket); + currentHitChain.setEgressPacket(new PipelineTraceablePacket(currentPacket)); currentHitChain.dropped(); return outputBuilder.appendToLog("Missing forwarding rule for tagged" + " packet on " + deviceId) @@ -253,16 +255,16 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { // need to reflect the updates performed on the packets and on the chain. List outputPorts = new ArrayList<>(); handleOutputFlows(currentPacket, outputFlows, egressPacket, outputPorts, currentHitChain, - outputBuilder, input.ingressPacket()); + outputBuilder, input.ingressPacket().packet()); // Immediate instructions log.debug("Current packet {} - applying immediate instructions", currentPacket); // Handling immediate instructions which basically means handling output to controller. // OVS has immediate -> group -> OUTPUT:CONTROLLER. - List entries = ImmutableList.copyOf(currentHitChain.getHitChain()); + List entries = ImmutableList.copyOf(currentHitChain.hitChain()); // Go to the next step - using a copy of the egress packet and of the hit chain PipelineTraceableHitChain newHitChain = PipelineTraceableHitChain.emptyHitChain(); - currentHitChain.getHitChain().forEach(newHitChain::addDataPlaneEntity); + currentHitChain.hitChain().forEach(newHitChain::addDataPlaneEntity); TrafficSelector.Builder newEgressPacket = DefaultTrafficSelector.builder(egressPacket.build()); for (DataPlaneEntity entry : entries) { flowEntry = entry.getFlowEntry(); @@ -286,7 +288,7 @@ public PipelineTraceableOutput apply(PipelineTraceableInput input) { // If there are no outputs - packet is dropped // Let's store the partial hit chain and set a message if (outputPorts.isEmpty()) { - currentHitChain.setEgressPacket(egressPacket.build()); + currentHitChain.setEgressPacket(new PipelineTraceablePacket(egressPacket.build())); currentHitChain.dropped(); outputBuilder.appendToLog("Packet has no output in device " + deviceId + ". Dropping") .dropped() @@ -563,8 +565,8 @@ private void buildOutputFromDevice(TrafficSelector.Builder egressPacket, // Create the final hit chain from the current one (deep copy) ConnectPoint outputPort = new ConnectPoint(deviceId, outputInstruction.port()); PipelineTraceableHitChain finalHitChain = new PipelineTraceableHitChain(outputPort, - Lists.newArrayList(currentHitChain.getHitChain()), - egressPacket.build()); + Lists.newArrayList(currentHitChain.hitChain()), + new PipelineTraceablePacket(egressPacket.build())); // Dropped early if (dropped) { log.debug("Packet {} has been dropped", egressPacket.build()); @@ -585,11 +587,12 @@ private void handleVlanToController(PipelineTraceableHitChain currentHitChain, T VlanIdCriterion initialVid = (VlanIdCriterion) initialPacket .getCriterion(Criterion.Type.VLAN_VID); - VlanIdCriterion finalVid = (VlanIdCriterion) currentHitChain.getEgressPacket() + VlanIdCriterion finalVid = (VlanIdCriterion) currentHitChain.egressPacket().packet() .getCriterion(Criterion.Type.VLAN_VID); if (initialVid != null && !initialVid.equals(finalVid) && initialVid.vlanId().equals(VlanId.NONE)) { - Set finalCriteria = new HashSet<>(currentHitChain.getEgressPacket().criteria()); + Set finalCriteria = new HashSet<>(currentHitChain.egressPacket() + .packet().criteria()); //removing the final vlanId finalCriteria.remove(finalVid); TrafficSelector.Builder packetUpdated = DefaultTrafficSelector.builder(); @@ -597,7 +600,7 @@ private void handleVlanToController(PipelineTraceableHitChain currentHitChain, T //Initial was none so we set it to that packetUpdated.add(Criteria.matchVlanId(VlanId.NONE)); //Update final packet - currentHitChain.setEgressPacket(packetUpdated.build()); + currentHitChain.setEgressPacket(new PipelineTraceablePacket(packetUpdated.build())); } } @@ -628,7 +631,7 @@ private void getGroupsFromInstructions(Map groups, List groups, List groups, List groups, List> chains = getHitChains(PUNT_IP_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(IN_PUNT_IP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(IN_PUNT_IP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -166,26 +167,26 @@ public void testOvsOfdpaPuntIP() { */ @Test public void testOfdpaPuntIP() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_PUNT_IP_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, PUNT_IP_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_PUNT_IP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, PUNT_IP_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(PUNT_IP_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(IN_PUNT_IP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(IN_PUNT_IP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -193,49 +194,49 @@ public void testOfdpaPuntIP() { */ @Test public void testOvsOfdpaArp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_ARP_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, ARP_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_ARP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, ARP_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(3)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(3)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(ARP_OVS_OFDPA); assertThat(chains.size(), is(3)); // This is the copy sent to the controller - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); // This is the copy sent to the member port - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(8)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(8)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); // This is the copy sent on the input port - hitChain = pipelineOutput.getHitChains().get(2); + hitChain = pipelineOutput.hitChains().get(2); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PORT)); - assertThat(hitChain.getHitChain().size(), is(8)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PORT)); + assertThat(hitChain.hitChain().size(), is(8)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(2), hitChain.getHitChain()); + assertEquals(chains.get(2), hitChain.hitChain()); } /** @@ -243,47 +244,47 @@ public void testOvsOfdpaArp() { */ @Test public void testOfdpaArp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_ARP_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, ARP_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_ARP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, ARP_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(3)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(3)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(ARP_OFDPA); assertThat(chains.size(), is(3)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); - hitChain = pipelineOutput.getHitChains().get(2); + hitChain = pipelineOutput.hitChains().get(2); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PORT)); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(IN_ARP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PORT)); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(2), hitChain.getHitChain()); + assertEquals(chains.get(2), hitChain.hitChain()); } /** @@ -291,26 +292,26 @@ public void testOfdpaArp() { */ @Test public void testOvsOfdpaPuntLldp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_PUNT_LLDP_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, PUNT_LLDP_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_PUNT_LLDP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, PUNT_LLDP_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(PUNT_LLDP_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(IN_PUNT_LLDP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(IN_PUNT_LLDP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -318,26 +319,26 @@ public void testOvsOfdpaPuntLldp() { */ @Test public void testOfdpaPuntLldp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_PUNT_LLDP_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, PUNT_LLDP_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_PUNT_LLDP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, PUNT_LLDP_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(PUNT_LLDP_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PortNumber.CONTROLLER)); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(IN_PUNT_LLDP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER)); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(IN_PUNT_LLDP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -345,26 +346,26 @@ public void testOfdpaPuntLldp() { */ @Test public void testOvsOfdpaL2BridingUntagged() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BRIDG_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BRIDG_UNTAG_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BRIDG_UNTAG_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BRIDG_UNTAG_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -372,26 +373,26 @@ public void testOvsOfdpaL2BridingUntagged() { */ @Test public void testOfdpaL2BridingUntagged() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BRIDG_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_UNTAG_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_UNTAG_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BRIDG_UNTAG_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -399,37 +400,37 @@ public void testOfdpaL2BridingUntagged() { */ @Test public void testOvsOfdpaL2BroadcastUntagged() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BROAD_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_UNTAG_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_UNTAG_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(2)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(2)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BROAD_UNTAG_OVS_OFDPA); assertThat(chains.size(), is(2)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); // Dropped chain - input port! - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PORT)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PORT)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); } /** @@ -437,37 +438,37 @@ public void testOvsOfdpaL2BroadcastUntagged() { */ @Test public void testOfdpaL2BroadcastUntagged() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BROAD_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_UNTAG_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_UNTAG_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(2)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(2)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BROAD_UNTAG_OFDPA); assertThat(chains.size(), is(2)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(5)); - assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(5)); + assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); // Dropped chain - input port! - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(PORT)); - assertThat(hitChain.getHitChain().size(), is(5)); - assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(PORT)); + assertThat(hitChain.hitChain().size(), is(5)); + assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); } /** @@ -475,27 +476,28 @@ public void testOfdpaL2BroadcastUntagged() { */ @Test public void testOvsOfdpaL3Unicast() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L3_UCAST_UNTAG_PACKET, UP_OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L3_UCAST_UNTAG_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L3_UCAST_UNTAG_PACKET), UP_OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, + L3_UCAST_UNTAG_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L3_UCAST_UNTAG_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(7)); - assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(7)); + assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -503,27 +505,27 @@ public void testOvsOfdpaL3Unicast() { */ @Test public void testOfdpaL3Unicast() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L3_UCAST_UNTAG_PACKET, UP_OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L3_UCAST_UNTAG_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L3_UCAST_UNTAG_PACKET), UP_OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L3_UCAST_UNTAG_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L3_UCAST_UNTAG_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -531,38 +533,38 @@ public void testOfdpaL3Unicast() { */ @Test public void testOvsOfdpaL3Ecmp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L3_ECMP_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L3_ECMP_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L3_ECMP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L3_ECMP_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(2)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(2)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L3_ECMP_OVS_OFDPA); assertThat(chains.size(), is(2)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT)); - assertThat(hitChain.getHitChain().size(), is(9)); - assertEquals(OUT_L3_ECMP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT)); + assertThat(hitChain.hitChain().size(), is(9)); + assertEquals(OUT_L3_ECMP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); // 2nd spine! - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT_1)); - assertThat(hitChain.getHitChain().size(), is(9)); - assertEquals(OUT_L3_ECMP_PACKET_1, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT_1)); + assertThat(hitChain.hitChain().size(), is(9)); + assertEquals(OUT_L3_ECMP_PACKET_1, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); } /** @@ -570,37 +572,37 @@ public void testOvsOfdpaL3Ecmp() { */ @Test public void testOfdpaL3Ecmp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L3_ECMP_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L3_ECMP_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L3_ECMP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L3_ECMP_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(2)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(2)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L3_ECMP_OFDPA); assertThat(chains.size(), is(2)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT)); - assertThat(hitChain.getHitChain().size(), is(8)); - assertEquals(OUT_L3_ECMP_PACKET_OFDPA, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT)); + assertThat(hitChain.hitChain().size(), is(8)); + assertEquals(OUT_L3_ECMP_PACKET_OFDPA, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); - hitChain = pipelineOutput.getHitChains().get(1); + hitChain = pipelineOutput.hitChains().get(1); assertNotNull(hitChain); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT_1)); - assertThat(hitChain.getHitChain().size(), is(8)); - assertEquals(OUT_L3_ECMP_PACKET_OFDPA_1, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT_1)); + assertThat(hitChain.hitChain().size(), is(8)); + assertEquals(OUT_L3_ECMP_PACKET_OFDPA_1, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(1), hitChain.getHitChain()); + assertEquals(chains.get(1), hitChain.hitChain()); } /** @@ -608,27 +610,28 @@ public void testOfdpaL3Ecmp() { */ @Test public void testOvsOfdpaMplsEcmp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_MPLS_ECMP_PACKET, UP_OFDPA_CP, + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_MPLS_ECMP_PACKET), UP_OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, MPLS_ECMP_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(MPLS_ECMP_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT_1)); - assertThat(hitChain.getHitChain().size(), is(9)); - assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT_1)); + assertThat(hitChain.hitChain().size(), is(9)); + assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -636,27 +639,27 @@ public void testOvsOfdpaMplsEcmp() { */ @Test public void testOfdpaMplsEcmp() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_MPLS_ECMP_PACKET_OFDPA, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, MPLS_ECMP_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_MPLS_ECMP_PACKET_OFDPA), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, MPLS_ECMP_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(MPLS_ECMP_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(UP_PORT_1)); - assertThat(hitChain.getHitChain().size(), is(7)); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(UP_PORT_1)); + assertThat(hitChain.hitChain().size(), is(7)); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); - assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.getEgressPacket()); + assertEquals(chains.get(0), hitChain.hitChain()); + assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.egressPacket().packet()); } /** @@ -664,25 +667,25 @@ public void testOfdpaMplsEcmp() { */ @Test public void testOvsOfdpaL2BroadEmpty() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BROAD_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_EMPTY_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_EMPTY_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.NO_GROUP_MEMBERS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.NO_GROUP_MEMBERS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BROAD_EMPTY_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNull(hitChain.getOutputPort()); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(OUT_L2_BROAD_EMPTY, hitChain.getEgressPacket()); + assertNull(hitChain.outputPort()); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(OUT_L2_BROAD_EMPTY, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -690,25 +693,25 @@ public void testOvsOfdpaL2BroadEmpty() { */ @Test public void testOfdpaL2BroadEmpty() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BROAD_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_EMPTY_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_EMPTY_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.NO_GROUP_MEMBERS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.NO_GROUP_MEMBERS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BROAD_EMPTY_OFDPA); assertThat(chains.size(), is(1)); - assertNull(hitChain.getOutputPort()); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(OUT_L2_BROAD_EMPTY, hitChain.getEgressPacket()); + assertNull(hitChain.outputPort()); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(OUT_L2_BROAD_EMPTY, hitChain.egressPacket().packet()); assertTrue(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -716,26 +719,27 @@ public void testOfdpaL2BroadEmpty() { */ @Test public void testOvsOfdpaL2BridingNotOrdered() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BRIDG_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BRIDG_NOT_ORDERED_OVS_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, + L2_BRIDG_NOT_ORDERED_OVS_OFDPA)); PipelineTraceable pipelineTraceable = setUpOvsOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BRIDG_NOT_ORDERED_OVS_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(6)); - assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(6)); + assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } /** @@ -743,26 +747,26 @@ public void testOvsOfdpaL2BridingNotOrdered() { */ @Test public void testOfdpaL2BridingNotOrdered() { - PipelineTraceableInput pipelineInput = new PipelineTraceableInput(IN_L2_BRIDG_UNTAG_PACKET, OFDPA_CP, - getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_NOT_ORDERED_OFDPA)); + PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket( + IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_NOT_ORDERED_OFDPA)); PipelineTraceable pipelineTraceable = setUpOfdpa(); PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput); assertNotNull(pipelineOutput); - assertThat(pipelineOutput.getHitChains().size(), is(1)); - assertThat(pipelineOutput.getResult(), is(PipelineTraceableResult.SUCCESS)); + assertThat(pipelineOutput.hitChains().size(), is(1)); + assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS)); - PipelineTraceableHitChain hitChain = pipelineOutput.getHitChains().get(0); + PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0); assertNotNull(hitChain); List> chains = getHitChains(L2_BRIDG_NOT_ORDERED_OFDPA); assertThat(chains.size(), is(1)); - assertNotNull(hitChain.getOutputPort()); - assertThat(hitChain.getOutputPort().port(), is(OUT_PORT)); - assertThat(hitChain.getHitChain().size(), is(4)); - assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.getEgressPacket()); + assertNotNull(hitChain.outputPort()); + assertThat(hitChain.outputPort().port(), is(OUT_PORT)); + assertThat(hitChain.hitChain().size(), is(4)); + assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet()); assertFalse(hitChain.isDropped()); - assertEquals(chains.get(0), hitChain.getHitChain()); + assertEquals(chains.get(0), hitChain.hitChain()); } } \ No newline at end of file diff --git a/drivers/default/src/test/java/org/onosproject/driver/traceable/TraceableTestObjects.java b/drivers/default/src/test/java/org/onosproject/driver/traceable/TraceableTestObjects.java index 4ea803c611a..51a3c05992c 100644 --- a/drivers/default/src/test/java/org/onosproject/driver/traceable/TraceableTestObjects.java +++ b/drivers/default/src/test/java/org/onosproject/driver/traceable/TraceableTestObjects.java @@ -78,7 +78,6 @@ private TraceableTestObjects() { static final TrafficSelector IN_ARP_PACKET = DefaultTrafficSelector.builder() .matchInPort(OFDPA_CP.port()) - .matchIPDst(IpPrefix.valueOf("255.255.255.255/32")) .matchEthType(EthType.EtherType.ARP.ethType().toShort()) .matchVlanId(VlanId.NONE) .build(); @@ -122,7 +121,6 @@ private TraceableTestObjects() { .matchEthDst(LEAF_MAC) .matchEthType(MPLS_UNICAST.ethType().toShort()) .matchVlanId(VlanId.NONE) - .matchIPDst(IP_DST_1) .matchMplsLabel(MPLS_LABEL) .matchMplsBos(true) .build(); @@ -132,7 +130,6 @@ private TraceableTestObjects() { .matchEthDst(LEAF_MAC) .matchEthType(MPLS_UNICAST.ethType().toShort()) .matchVlanId(VlanId.NONE) - .matchIPDst(IP_DST_1) .matchMplsLabel(MPLS_LABEL) .matchMplsBos(true) .matchMetadata(IPV4.ethType().toShort()) @@ -184,7 +181,6 @@ private TraceableTestObjects() { .matchEthDst(SPINE_MAC) .matchEthType(IPV4.ethType().toShort()) .matchVlanId(VlanId.NONE) - .matchIPDst(IP_DST_1) .build(); static final TrafficSelector OUT_L2_BROAD_EMPTY = DefaultTrafficSelector.builder() From cfd08de0717f52f896aa9e03f918cc1efbf3bcf3 Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 15 Dec 2020 17:34:54 +0100 Subject: [PATCH 012/235] [AETHER-1032] Backport AETHER-538 to fabric.p4 AETHER-538 introduces a new design for the egress pipeline where the tagged ports are explicitily matched in the egress_vlan table. Moreover, no match means dropped with this new design. Change-Id: If6f8c73aad0effd01f18c87c147535378e8db84c --- .../pipelines/fabric/FabricConstants.java | 4 + .../behaviour/FabricTreatmentInterpreter.java | 13 +- .../pipeliner/NextObjectiveTranslator.java | 38 +- .../main/resources/include/control/next.p4 | 32 +- .../p4c-out/fabric-bng/bmv2/default/bmv2.json | 593 +++------ .../fabric-bng/bmv2/default/p4info.txt | 21 +- .../fabric-full/bmv2/default/bmv2.json | 1147 +++++++---------- .../fabric-full/bmv2/default/p4info.txt | 21 +- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 759 +++++------ .../fabric-int/bmv2/default/p4info.txt | 23 +- .../fabric-spgw-int/bmv2/default/bmv2.json | 824 +++++------- .../fabric-spgw-int/bmv2/default/p4info.txt | 23 +- .../fabric-spgw/bmv2/default/bmv2.json | 441 ++----- .../fabric-spgw/bmv2/default/p4info.txt | 23 +- .../p4c-out/fabric/bmv2/default/bmv2.json | 392 ++---- .../p4c-out/fabric/bmv2/default/p4info.txt | 23 +- .../pipeliner/FabricNextPipelinerTest.java | 61 +- 17 files changed, 1776 insertions(+), 2662 deletions(-) diff --git a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index 05bf7cfa7c4..05e738f0926 100644 --- a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java +++ b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -266,6 +266,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v6"); public static final PiActionId FABRIC_INGRESS_NEXT_ROUTING_SIMPLE = PiActionId.of("FabricIngress.next.routing_simple"); + public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_PUSH_VLAN = + PiActionId.of("FabricEgress.egress_next.push_vlan"); public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 = PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_HASHED = @@ -282,6 +284,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.acl.punt_to_cpu"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_PRIO = PiActionId.of("FabricIngress.bng_ingress.downstream.qos_prio"); + public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_DROP = + PiActionId.of("FabricEgress.egress_next.drop"); public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_PDR = PiActionId.of("FabricIngress.spgw.load_pdr"); public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java index 21ff675b012..2da557abd0c 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java @@ -38,12 +38,7 @@ import static java.lang.String.format; import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_DST; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_SRC; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_LABEL; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_PUSH; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID; -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP; +import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.*; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.instruction; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instructions; @@ -225,6 +220,12 @@ static PiAction mapAclTreatment(TrafficTreatment treatment, PiTableId tableId) static PiAction mapEgressNextTreatment( TrafficTreatment treatment, PiTableId tableId) throws PiInterpreterException { + L2ModificationInstruction pushVlan = l2Instruction(treatment, VLAN_PUSH); + if (pushVlan != null) { + return PiAction.builder() + .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_PUSH_VLAN) + .build(); + } l2InstructionOrFail(treatment, VLAN_POP, tableId); return PiAction.builder() .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java index 1e0e52d1667..a8c4c6f1c2f 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java @@ -247,35 +247,30 @@ private void handleEgress(NextObjective obj, TrafficTreatment treatment, throws FabricPipelinerException { final PortNumber outPort = outputPort(treatment); final Instruction popVlanInst = l2Instruction(treatment, VLAN_POP); - if (popVlanInst != null && outPort != null) { + if (outPort != null) { if (strict && treatment.allInstructions().size() > 2) { throw new FabricPipelinerException( "Treatment contains instructions other " + "than OUTPUT and VLAN_POP, cannot generate " + "egress rules"); } - egressVlanPop(outPort, obj, resultBuilder); + // We cannot program if there are no proper metadata in the objective + if (obj.meta() != null && obj.meta().getCriterion(Criterion.Type.VLAN_VID) != null) { + egressVlan(outPort, obj, popVlanInst, resultBuilder); + } else { + log.warn("NextObjective {} is trying to program {} without {} information", + obj, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN, + obj.meta() == null ? "metadata" : "vlanId"); + } } } - private void egressVlanPop(PortNumber outPort, NextObjective obj, - ObjectiveTranslation.Builder resultBuilder) + private void egressVlan(PortNumber outPort, NextObjective obj, Instruction popVlanInst, + ObjectiveTranslation.Builder resultBuilder) throws FabricPipelinerException { - if (obj.meta() == null) { - throw new FabricPipelinerException( - "Cannot process egress pop VLAN rule, NextObjective has null meta", - ObjectiveError.BADPARAMS); - } - final VlanIdCriterion vlanIdCriterion = (VlanIdCriterion) criterion( obj.meta(), Criterion.Type.VLAN_VID); - if (vlanIdCriterion == null) { - throw new FabricPipelinerException( - "Cannot process egress pop VLAN rule, missing VLAN_VID criterion " + - "in NextObjective meta", - ObjectiveError.BADPARAMS); - } final PiCriterion egressVlanTableMatch = PiCriterion.builder() .matchExact(FabricConstants.HDR_EG_PORT, outPort.toLong()) @@ -284,13 +279,16 @@ private void egressVlanPop(PortNumber outPort, NextObjective obj, .matchPi(egressVlanTableMatch) .matchVlanId(vlanIdCriterion.vlanId()) .build(); - final TrafficTreatment treatment = DefaultTrafficTreatment.builder() - .popVlan() - .build(); + final TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder(); + if (popVlanInst == null) { + treatmentBuilder.pushVlan(); + } else { + treatmentBuilder.popVlan(); + } resultBuilder.addFlowRule(flowRule( obj, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN, - selector, treatment)); + selector, treatmentBuilder.build())); } private TrafficSelector nextIdSelector(int nextId) { diff --git a/pipelines/fabric/impl/src/main/resources/include/control/next.p4 b/pipelines/fabric/impl/src/main/resources/include/control/next.p4 index 0a624b25f5c..11437b1e417 100644 --- a/pipelines/fabric/impl/src/main/resources/include/control/next.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/control/next.p4 @@ -283,7 +283,7 @@ control EgressNextControl (inout parsed_headers_t hdr, } @hidden - action push_vlan() { + action push_outer_vlan() { // If VLAN is already valid, we overwrite it with a potentially new VLAN // ID, and same CFI, PRI, and eth_type values found in ingress. hdr.vlan_tag.setValid(); @@ -308,25 +308,37 @@ control EgressNextControl (inout parsed_headers_t hdr, /* * Egress VLAN Table. - * Pops the VLAN tag if the pair egress port and VLAN ID is matched. + * Pushes or Pops the VLAN tag if the pair egress port and VLAN ID is matched. + * Instead, it drops the packets on miss. */ 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() { + mark_to_drop(standard_metadata); + egress_vlan_counter.count(); + } + table egress_vlan { key = { fabric_metadata.vlan_id: exact @name("vlan_id"); standard_metadata.egress_port: exact @name("eg_port"); } actions = { + push_vlan; pop_vlan; - @defaultonly nop; + @defaultonly drop; } - const default_action = nop(); + const default_action = drop(); counters = egress_vlan_counter; size = EGRESS_VLAN_TABLE_SIZE; } @@ -346,20 +358,14 @@ control EgressNextControl (inout parsed_headers_t hdr, #ifdef WITH_DOUBLE_VLAN_TERMINATION if (fabric_metadata.push_double_vlan == _TRUE) { // Double VLAN termination. - push_vlan(); + push_outer_vlan(); push_inner_vlan(); } else { // If no push double vlan, inner_vlan_tag must be popped hdr.inner_vlan_tag.setInvalid(); #endif // WITH_DOUBLE_VLAN_TERMINATION - // Port-based VLAN tagging (by default all - // ports are assumed tagged) - if (!egress_vlan.apply().hit) { - // Push VLAN tag if not the default one. - if (fabric_metadata.vlan_id != DEFAULT_VLAN_ID) { - push_vlan(); - } - } + // Port-based VLAN tagging; if there is no match drop the packet! + egress_vlan.apply(); #ifdef WITH_DOUBLE_VLAN_TERMINATION } #endif // WITH_DOUBLE_VLAN_TERMINATION diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json index a44e179f305..9086045a029 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json @@ -4,15 +4,14 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["tmp", 16, false], ["tmp_0", 16, false], - ["tmp_1", 16, false], - ["tmp_2", 4, false], - ["tmp", 32, false], + ["tmp_1", 4, false], + ["tmp_2", 32, false], ["tmp_3", 32, false], ["bng_ingress_upstream_tmp", 1, false], ["bng_ingress_downstream_tmp", 1, false], ["bng_ingress_upstream_hasReturned", 1, false], - ["egress_next_tmp", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], ["fabric_metadata_t._vlan_pri2", 3, false], @@ -40,7 +39,7 @@ ["fabric_metadata_t._bng_ds_meter_result24", 32, false], ["fabric_metadata_t._bng_s_tag25", 12, false], ["fabric_metadata_t._bng_c_tag26", 12, false], - ["_padding_0", 2, false] + ["_padding_0", 3, false] ] }, { @@ -409,7 +408,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] }, { "type" : "lookahead", @@ -447,7 +446,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] } ] }, @@ -481,7 +480,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -507,7 +506,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -682,7 +681,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -708,7 +707,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -1171,7 +1170,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -2778,7 +2777,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -2814,7 +2813,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -3175,15 +3174,9 @@ } ] }, - { - "name" : "nop", - "id" : 50, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.bng_egress.downstream.encap_v4", - "id" : 51, + "id" : 50, "runtime_data" : [], "primitives" : [ { @@ -3380,7 +3373,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 52, + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -3421,7 +3414,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 53, + "id" : 52, "runtime_data" : [], "primitives" : [ { @@ -3537,8 +3530,8 @@ ] }, { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 54, + "name" : "FabricEgress.egress_next.push_outer_vlan", + "id" : 53, "runtime_data" : [], "primitives" : [ { @@ -3635,8 +3628,8 @@ ] }, { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 55, + "name" : "FabricEgress.egress_next.push_inner_vlan", + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -3644,14 +3637,14 @@ "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "inner_vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 289, + "line" : 300, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "source_fragment" : "hdr.inner_vlan_tag.setValid()" } }, { @@ -3659,18 +3652,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_vlan_tag", "cfi"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_cfi3"] + "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi7"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 290, + "line" : 301, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." } }, { @@ -3678,18 +3671,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["inner_vlan_tag", "pri"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_pri2"] + "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri6"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 291, + "line" : 302, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." } }, { @@ -3697,7 +3690,26 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["inner_vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_vlan_id5"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 303, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "eth_type"] }, { "type" : "hexstr", @@ -3716,25 +3728,25 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["vlan_tag", "eth_type"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] + "type" : "hexstr", + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 293, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 31, + "source_fragment" : "0x8100; ..." } } ] }, { - "name" : "FabricEgress.egress_next.push_inner_vlan", - "id" : 56, + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -3742,33 +3754,14 @@ "parameters" : [ { "type" : "header", - "value" : "inner_vlan_tag" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 300, - "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] - }, - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi7"] + "value" : "vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 301, + "line" : 289, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." + "source_fragment" : "hdr.vlan_tag.setValid()" } }, { @@ -3776,18 +3769,18 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "pri"] + "value" : ["vlan_tag", "cfi"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri6"] + "value" : ["scalars", "fabric_metadata_t._vlan_cfi3"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 302, + "line" : 290, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } }, { @@ -3795,18 +3788,18 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] + "value" : ["vlan_tag", "pri"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_id5"] + "value" : ["scalars", "fabric_metadata_t._vlan_pri2"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 303, + "line" : 291, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." } }, { @@ -3814,7 +3807,7 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "eth_type"] + "value" : ["vlan_tag", "eth_type"] }, { "type" : "hexstr", @@ -3833,25 +3826,25 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["vlan_tag", "vlan_id"] }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._vlan_id1"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 115, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/control/next.p4", + "line" : 293, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." } } ] }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 57, + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -3864,13 +3857,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "act_14", "id" : 58, @@ -3954,7 +3969,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -3965,66 +3980,6 @@ "name" : "act_17", "id" : 61, "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_18", - "id" : 62, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_19", - "id" : 63, - "runtime_data" : [], "primitives" : [ { "op" : "remove_header", @@ -4036,7 +3991,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 353, + "line" : 365, "column" : 12, "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" } @@ -4044,8 +3999,8 @@ ] }, { - "name" : "act_20", - "id" : 64, + "name" : "act_18", + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -4058,7 +4013,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -4066,8 +4021,8 @@ ] }, { - "name" : "act_21", - "id" : 65, + "name" : "act_19", + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -4107,7 +4062,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -4115,8 +4070,8 @@ ] }, { - "name" : "act_22", - "id" : 66, + "name" : "act_20", + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -4129,7 +4084,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -4137,8 +4092,8 @@ ] }, { - "name" : "act_23", - "id" : 67, + "name" : "act_21", + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -4178,7 +4133,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -5816,7 +5771,7 @@ "id" : 31, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -5845,7 +5800,7 @@ "id" : 32, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -5856,14 +5811,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [52], + "action_ids" : [51], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "node_60", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "node_60" }, "default_entry" : { - "action_id" : 52, + "action_id" : 51, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5874,7 +5829,7 @@ "id" : 33, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -5885,27 +5840,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], + "action_ids" : [52], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "node_60", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "node_60" }, "default_entry" : { - "action_id" : 53, + "action_id" : 52, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_egress_next_push_vlan", + "name" : "tbl_egress_next_push_outer_vlan", "id" : 34, "source_info" : { "filename" : "include/control/next.p4", - "line" : 349, + "line" : 361, "column" : 12, - "source_fragment" : "push_vlan()" + "source_fragment" : "push_outer_vlan()" }, "key" : [], "match_type" : "exact", @@ -5914,14 +5869,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], - "actions" : ["FabricEgress.egress_next.push_vlan"], + "action_ids" : [53], + "actions" : ["FabricEgress.egress_next.push_outer_vlan"], "base_default_next" : "tbl_egress_next_push_inner_vlan", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "tbl_egress_next_push_inner_vlan" + "FabricEgress.egress_next.push_outer_vlan" : "tbl_egress_next_push_inner_vlan" }, "default_entry" : { - "action_id" : 54, + "action_id" : 53, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5932,7 +5887,7 @@ "id" : 35, "source_info" : { "filename" : "include/control/next.p4", - "line" : 350, + "line" : 362, "column" : 12, "source_fragment" : "push_inner_vlan()" }, @@ -5943,14 +5898,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], + "action_ids" : [54], "actions" : ["FabricEgress.egress_next.push_inner_vlan"], - "base_default_next" : "node_70", + "base_default_next" : "node_65", "next_tables" : { - "FabricEgress.egress_next.push_inner_vlan" : "node_70" + "FabricEgress.egress_next.push_inner_vlan" : "node_65" }, "default_entry" : { - "action_id" : 56, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5961,7 +5916,7 @@ "id" : 36, "source_info" : { "filename" : "include/control/next.p4", - "line" : 353, + "line" : 365, "column" : 12, "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" }, @@ -5972,14 +5927,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63], - "actions" : ["act_19"], + "action_ids" : [61], + "actions" : ["act_17"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { - "act_19" : "FabricEgress.egress_next.egress_vlan" + "act_17" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 63, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5990,7 +5945,7 @@ "id" : 37, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -6014,15 +5969,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57, 50], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [55, 56, 57], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_65", "next_tables" : { - "__HIT__" : "tbl_act_18", - "__MISS__" : "tbl_act_19" + "FabricEgress.egress_next.push_vlan" : "node_65", + "FabricEgress.egress_next.pop_vlan" : "node_65", + "FabricEgress.egress_next.drop" : "node_65" }, "default_entry" : { - "action_id" : 50, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6031,6 +5987,12 @@ { "name" : "tbl_act_18", "id" : 38, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" + }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -6038,14 +6000,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61], - "actions" : ["act_17"], + "action_ids" : [63], + "actions" : ["act_19"], "base_default_next" : "node_67", "next_tables" : { - "act_17" : "node_67" + "act_19" : "node_67" }, "default_entry" : { - "action_id" : 61, + "action_id" : 63, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6054,34 +6016,11 @@ { "name" : "tbl_act_19", "id" : 39, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [62], - "actions" : ["act_18"], - "base_default_next" : "node_67", - "next_tables" : { - "act_18" : "node_67" - }, - "default_entry" : { - "action_id" : 62, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_egress_next_push_vlan_0", - "id" : 40, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -6090,14 +6029,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_70", + "action_ids" : [62], + "actions" : ["act_18"], + "base_default_next" : "node_73", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_70" + "act_18" : "node_73" }, "default_entry" : { - "action_id" : 55, + "action_id" : 62, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6105,11 +6044,11 @@ }, { "name" : "tbl_act_20", - "id" : 41, + "id" : 40, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, + "line" : 379, + "column" : 29, "source_fragment" : "=" }, "key" : [], @@ -6121,9 +6060,9 @@ "direct_meters" : null, "action_ids" : [65], "actions" : ["act_21"], - "base_default_next" : "node_72", + "base_default_next" : "node_71", "next_tables" : { - "act_21" : "node_72" + "act_21" : "node_71" }, "default_entry" : { "action_id" : 65, @@ -6134,11 +6073,11 @@ }, { "name" : "tbl_act_21", - "id" : 42, + "id" : 41, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -6150,9 +6089,9 @@ "direct_meters" : null, "action_ids" : [64], "actions" : ["act_20"], - "base_default_next" : "node_78", + "base_default_next" : "node_73", "next_tables" : { - "act_20" : "node_78" + "act_20" : "node_73" }, "default_entry" : { "action_id" : 64, @@ -6161,67 +6100,9 @@ "action_entry_const" : true } }, - { - "name" : "tbl_act_22", - "id" : 43, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [67], - "actions" : ["act_23"], - "base_default_next" : "node_76", - "next_tables" : { - "act_23" : "node_76" - }, - "default_entry" : { - "action_id" : 67, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_23", - "id" : 44, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [66], - "actions" : ["act_22"], - "base_default_next" : "node_78", - "next_tables" : { - "act_22" : "node_78" - }, - "default_entry" : { - "action_id" : 66, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, { "name" : "tbl_bng_egress_downstream_encap_v4", - "id" : 45, + "id" : 42, "source_info" : { "filename" : "include/bng.p4", "line" : 297, @@ -6235,14 +6116,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [50], "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], "base_default_next" : null, "next_tables" : { "FabricEgress.bng_egress.downstream.encap_v4" : null }, "default_entry" : { - "action_id" : 51, + "action_id" : 50, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6315,7 +6196,7 @@ "id" : 19, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -6368,7 +6249,7 @@ "id" : 20, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -6394,7 +6275,7 @@ "id" : 21, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -6417,7 +6298,7 @@ "id" : 22, "source_info" : { "filename" : "include/control/next.p4", - "line" : 347, + "line" : 359, "column" : 12, "source_fragment" : "fabric_metadata.push_double_vlan == true" }, @@ -6442,71 +6323,15 @@ } } }, - "true_next" : "tbl_egress_next_push_vlan", + "true_next" : "tbl_egress_next_push_outer_vlan", "false_next" : "tbl_act_17" }, { - "name" : "node_67", + "name" : "node_65", "id" : 23, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_68", - "false_next" : "node_70" - }, - { - "name" : "node_68", - "id" : 24, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan_0", - "false_next" : "node_70" - }, - { - "name" : "node_70", - "id" : 25, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -6521,15 +6346,15 @@ } } }, - "true_next" : "tbl_act_20", - "false_next" : "node_74" + "true_next" : "tbl_act_18", + "false_next" : "node_69" }, { - "name" : "node_72", - "id" : 26, + "name" : "node_67", + "id" : 24, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -6547,15 +6372,15 @@ } } }, - "true_next" : "tbl_act_21", - "false_next" : "node_78" + "true_next" : "tbl_act_19", + "false_next" : "node_73" }, { - "name" : "node_74", - "id" : 27, + "name" : "node_69", + "id" : 25, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -6590,15 +6415,15 @@ } } }, - "true_next" : "tbl_act_22", - "false_next" : "node_78" + "true_next" : "tbl_act_20", + "false_next" : "node_73" }, { - "name" : "node_76", - "id" : 28, + "name" : "node_71", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -6616,12 +6441,12 @@ } } }, - "true_next" : "tbl_act_23", - "false_next" : "node_78" + "true_next" : "tbl_act_21", + "false_next" : "node_73" }, { - "name" : "node_78", - "id" : 29, + "name" : "node_73", + "id" : 27, "source_info" : { "filename" : "include/bng.p4", "line" : 358, @@ -6643,11 +6468,11 @@ } }, "false_next" : null, - "true_next" : "node_79" + "true_next" : "node_74" }, { - "name" : "node_79", - "id" : 30, + "name" : "node_74", + "id" : 28, "source_info" : { "filename" : "include/bng.p4", "line" : 296, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt index d95b294b1c9..2ad9fd021a8 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt @@ -510,15 +510,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -830,6 +833,13 @@ actions { alias: "encap_v4" } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -837,6 +847,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 2cca7f842e9..7ff2d8af46c 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -5,18 +5,17 @@ "id" : 0, "fields" : [ ["last_ipv4_dscp_0", 6, false], + ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 16, false], - ["tmp_3", 4, false], + ["tmp_2", 4, false], ["tmp", 32, false], - ["tmp_0", 32, false], + ["tmp_3", 32, false], ["tmp_4", 32, false], ["bng_ingress_upstream_tmp", 1, false], ["bng_ingress_downstream_tmp", 1, false], ["spgw_tmp", 1, false], ["bng_ingress_upstream_hasReturned", 1, false], ["key_0", 64, false], - ["egress_next_tmp", 1, false], ["process_int_main_process_int_transit_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], @@ -68,7 +67,7 @@ ["fabric_metadata_t._int_meta_new_bytes47", 16, false], ["fabric_metadata_t._int_meta_ig_tstamp48", 32, false], ["fabric_metadata_t._int_meta_eg_tstamp49", 32, false], - ["_padding_0", 2, false] + ["_padding_0", 3, false] ] }, { @@ -799,7 +798,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -837,7 +836,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -871,7 +870,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -897,7 +896,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -1084,7 +1083,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -1116,7 +1115,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -2057,7 +2056,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -7162,7 +7161,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -7198,7 +7197,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -7749,7 +7748,7 @@ "primitives" : [] }, { - "name" : "nop", + "name" : "NoAction", "id" : 96, "runtime_data" : [], "primitives" : [] @@ -7760,15 +7759,9 @@ "runtime_data" : [], "primitives" : [] }, - { - "name" : "NoAction", - "id" : 98, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.bng_egress.downstream.encap_v4", - "id" : 99, + "id" : 98, "runtime_data" : [], "primitives" : [ { @@ -7965,7 +7958,7 @@ }, { "name" : "FabricEgress.bng_egress.downstream.encap_v6", - "id" : 100, + "id" : 99, "runtime_data" : [], "primitives" : [ { @@ -8162,7 +8155,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 101, + "id" : 100, "runtime_data" : [ { "name" : "max_hop", @@ -8657,7 +8650,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 102, + "id" : 101, "runtime_data" : [ { "name" : "switch_id", @@ -8717,13 +8710,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 103, + "id" : 102, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 104, + "id" : 103, "runtime_data" : [], "primitives" : [ { @@ -8880,7 +8873,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 105, + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -9005,7 +8998,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 106, + "id" : 105, "runtime_data" : [], "primitives" : [ { @@ -9196,7 +9189,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 107, + "id" : 106, "runtime_data" : [], "primitives" : [ { @@ -9366,7 +9359,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 108, + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -9602,7 +9595,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 109, + "id" : 108, "runtime_data" : [], "primitives" : [ { @@ -9806,7 +9799,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 110, + "id" : 109, "runtime_data" : [], "primitives" : [ { @@ -10076,7 +10069,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 111, + "id" : 110, "runtime_data" : [], "primitives" : [ { @@ -10201,7 +10194,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 112, + "id" : 111, "runtime_data" : [], "primitives" : [ { @@ -10392,7 +10385,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 113, + "id" : 112, "runtime_data" : [], "primitives" : [ { @@ -10551,7 +10544,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 114, + "id" : 113, "runtime_data" : [], "primitives" : [ { @@ -10776,7 +10769,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 115, + "id" : 114, "runtime_data" : [], "primitives" : [ { @@ -10980,7 +10973,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 116, + "id" : 115, "runtime_data" : [], "primitives" : [ { @@ -11250,7 +11243,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 117, + "id" : 116, "runtime_data" : [], "primitives" : [ { @@ -11488,7 +11481,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 118, + "id" : 117, "runtime_data" : [], "primitives" : [ { @@ -11792,13 +11785,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 119, + "id" : 118, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 120, + "id" : 119, "runtime_data" : [], "primitives" : [ { @@ -11923,7 +11916,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 121, + "id" : 120, "runtime_data" : [], "primitives" : [ { @@ -12067,7 +12060,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 122, + "id" : 121, "runtime_data" : [], "primitives" : [ { @@ -12245,7 +12238,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 123, + "id" : 122, "runtime_data" : [], "primitives" : [ { @@ -12393,7 +12386,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 124, + "id" : 123, "runtime_data" : [], "primitives" : [ { @@ -12575,7 +12568,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 125, + "id" : 124, "runtime_data" : [], "primitives" : [ { @@ -12776,7 +12769,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 126, + "id" : 125, "runtime_data" : [], "primitives" : [ { @@ -13011,7 +13004,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 127, + "id" : 126, "runtime_data" : [], "primitives" : [ { @@ -13136,7 +13129,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 128, + "id" : 127, "runtime_data" : [], "primitives" : [ { @@ -13295,7 +13288,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 129, + "id" : 128, "runtime_data" : [], "primitives" : [ { @@ -13473,7 +13466,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 130, + "id" : 129, "runtime_data" : [], "primitives" : [ { @@ -13685,7 +13678,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 131, + "id" : 130, "runtime_data" : [], "primitives" : [ { @@ -13867,7 +13860,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 132, + "id" : 131, "runtime_data" : [], "primitives" : [ { @@ -14083,7 +14076,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 133, + "id" : 132, "runtime_data" : [], "primitives" : [ { @@ -14318,7 +14311,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 134, + "id" : 133, "runtime_data" : [], "primitives" : [ { @@ -14587,7 +14580,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", - "id" : 135, + "id" : 134, "runtime_data" : [ { "name" : "src_mac", @@ -15249,7 +15242,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", - "id" : 136, + "id" : 135, "runtime_data" : [], "primitives" : [ { @@ -15294,7 +15287,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", - "id" : 137, + "id" : 136, "runtime_data" : [], "primitives" : [ { @@ -15625,7 +15618,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 138, + "id" : 137, "runtime_data" : [], "primitives" : [ { @@ -15666,7 +15659,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 139, + "id" : 138, "runtime_data" : [], "primitives" : [ { @@ -15782,8 +15775,8 @@ ] }, { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 140, + "name" : "FabricEgress.egress_next.push_outer_vlan", + "id" : 139, "runtime_data" : [], "primitives" : [ { @@ -15880,8 +15873,8 @@ ] }, { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 141, + "name" : "FabricEgress.egress_next.push_inner_vlan", + "id" : 140, "runtime_data" : [], "primitives" : [ { @@ -15889,14 +15882,14 @@ "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "inner_vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 289, + "line" : 300, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "source_fragment" : "hdr.inner_vlan_tag.setValid()" } }, { @@ -15904,18 +15897,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_vlan_tag", "cfi"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_cfi3"] + "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi7"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 290, + "line" : 301, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." } }, { @@ -15923,18 +15916,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["inner_vlan_tag", "pri"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_pri2"] + "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri6"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 291, + "line" : 302, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." } }, { @@ -15942,7 +15935,26 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["inner_vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._inner_vlan_id5"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 303, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "eth_type"] }, { "type" : "hexstr", @@ -15961,25 +15973,25 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["vlan_tag", "eth_type"] }, { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] + "type" : "hexstr", + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 293, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 31, + "source_fragment" : "0x8100; ..." } } ] }, { - "name" : "FabricEgress.egress_next.push_inner_vlan", - "id" : 142, + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 141, "runtime_data" : [], "primitives" : [ { @@ -15987,33 +15999,14 @@ "parameters" : [ { "type" : "header", - "value" : "inner_vlan_tag" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 300, - "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] - }, - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi7"] + "value" : "vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 301, + "line" : 289, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." + "source_fragment" : "hdr.vlan_tag.setValid()" } }, { @@ -16021,18 +16014,18 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "pri"] + "value" : ["vlan_tag", "cfi"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri6"] + "value" : ["scalars", "fabric_metadata_t._vlan_cfi3"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 302, + "line" : 290, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } }, { @@ -16040,18 +16033,18 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] + "value" : ["vlan_tag", "pri"] }, { "type" : "field", - "value" : ["scalars", "fabric_metadata_t._inner_vlan_id5"] + "value" : ["scalars", "fabric_metadata_t._vlan_pri2"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 303, + "line" : 291, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." } }, { @@ -16059,7 +16052,7 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "eth_type"] + "value" : ["vlan_tag", "eth_type"] }, { "type" : "hexstr", @@ -16078,25 +16071,25 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["vlan_tag", "vlan_id"] }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["scalars", "fabric_metadata_t._vlan_id1"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 115, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/control/next.p4", + "line" : 293, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." } } ] }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 143, + "id" : 142, "runtime_data" : [], "primitives" : [ { @@ -16109,13 +16102,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 143, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "FabricEgress.spgw.gtpu_encap", "id" : 144, @@ -16791,7 +16806,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -16804,67 +16819,7 @@ "runtime_data" : [], "primitives" : [ { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_27", - "id" : 149, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_28", - "id" : 150, - "runtime_data" : [], - "primitives" : [ - { - "op" : "remove_header", + "op" : "remove_header", "parameters" : [ { "type" : "header", @@ -16873,7 +16828,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 353, + "line" : 365, "column" : 12, "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" } @@ -16881,8 +16836,8 @@ ] }, { - "name" : "act_29", - "id" : 151, + "name" : "act_27", + "id" : 149, "runtime_data" : [], "primitives" : [ { @@ -16895,7 +16850,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -16903,8 +16858,8 @@ ] }, { - "name" : "act_30", - "id" : 152, + "name" : "act_28", + "id" : 150, "runtime_data" : [], "primitives" : [ { @@ -16944,7 +16899,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -16952,8 +16907,8 @@ ] }, { - "name" : "act_31", - "id" : 153, + "name" : "act_29", + "id" : 151, "runtime_data" : [], "primitives" : [ { @@ -16966,7 +16921,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -16974,8 +16929,8 @@ ] }, { - "name" : "act_32", - "id" : 154, + "name" : "act_30", + "id" : 152, "runtime_data" : [], "primitives" : [ { @@ -17015,7 +16970,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -17023,8 +16978,8 @@ ] }, { - "name" : "act_33", - "id" : 155, + "name" : "act_31", + "id" : 153, "runtime_data" : [], "primitives" : [ { @@ -17037,7 +16992,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 379, + "line" : 385, "column" : 45, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -17045,8 +17000,8 @@ ] }, { - "name" : "act_34", - "id" : 156, + "name" : "act_32", + "id" : 154, "runtime_data" : [], "primitives" : [ { @@ -17086,7 +17041,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 378, + "line" : 384, "column" : 16, "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1" } @@ -17094,8 +17049,8 @@ ] }, { - "name" : "act_35", - "id" : 157, + "name" : "act_33", + "id" : 155, "runtime_data" : [], "primitives" : [ { @@ -17120,8 +17075,8 @@ ] }, { - "name" : "act_36", - "id" : 158, + "name" : "act_34", + "id" : 156, "runtime_data" : [], "primitives" : [ { @@ -17150,8 +17105,8 @@ ] }, { - "name" : "act_37", - "id" : 159, + "name" : "act_35", + "id" : 157, "runtime_data" : [], "primitives" : [ { @@ -17186,8 +17141,8 @@ ] }, { - "name" : "act_38", - "id" : 160, + "name" : "act_36", + "id" : 158, "runtime_data" : [], "primitives" : [ { @@ -17235,8 +17190,8 @@ ] }, { - "name" : "act_39", - "id" : 161, + "name" : "act_37", + "id" : 159, "runtime_data" : [], "primitives" : [ { @@ -17284,8 +17239,8 @@ ] }, { - "name" : "act_40", - "id" : 162, + "name" : "act_38", + "id" : 160, "runtime_data" : [], "primitives" : [ { @@ -17333,8 +17288,8 @@ ] }, { - "name" : "act_41", - "id" : 163, + "name" : "act_39", + "id" : 161, "runtime_data" : [], "primitives" : [ { @@ -20212,7 +20167,7 @@ "id" : 53, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -20241,7 +20196,7 @@ "id" : 54, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -20252,14 +20207,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [138], + "action_ids" : [137], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "node_91", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "node_91" }, "default_entry" : { - "action_id" : 138, + "action_id" : 137, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20270,7 +20225,7 @@ "id" : 55, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -20281,27 +20236,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [139], + "action_ids" : [138], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "node_91", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "node_91" }, "default_entry" : { - "action_id" : 139, + "action_id" : 138, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_egress_next_push_vlan", + "name" : "tbl_egress_next_push_outer_vlan", "id" : 56, "source_info" : { "filename" : "include/control/next.p4", - "line" : 349, + "line" : 361, "column" : 12, - "source_fragment" : "push_vlan()" + "source_fragment" : "push_outer_vlan()" }, "key" : [], "match_type" : "exact", @@ -20310,14 +20265,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [140], - "actions" : ["FabricEgress.egress_next.push_vlan"], + "action_ids" : [139], + "actions" : ["FabricEgress.egress_next.push_outer_vlan"], "base_default_next" : "tbl_egress_next_push_inner_vlan", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "tbl_egress_next_push_inner_vlan" + "FabricEgress.egress_next.push_outer_vlan" : "tbl_egress_next_push_inner_vlan" }, "default_entry" : { - "action_id" : 140, + "action_id" : 139, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20328,7 +20283,7 @@ "id" : 57, "source_info" : { "filename" : "include/control/next.p4", - "line" : 350, + "line" : 362, "column" : 12, "source_fragment" : "push_inner_vlan()" }, @@ -20339,14 +20294,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [142], + "action_ids" : [140], "actions" : ["FabricEgress.egress_next.push_inner_vlan"], - "base_default_next" : "node_101", + "base_default_next" : "node_96", "next_tables" : { - "FabricEgress.egress_next.push_inner_vlan" : "node_101" + "FabricEgress.egress_next.push_inner_vlan" : "node_96" }, "default_entry" : { - "action_id" : 142, + "action_id" : 140, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20357,7 +20312,7 @@ "id" : 58, "source_info" : { "filename" : "include/control/next.p4", - "line" : 353, + "line" : 365, "column" : 12, "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" }, @@ -20368,14 +20323,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [150], - "actions" : ["act_28"], + "action_ids" : [148], + "actions" : ["act_26"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { - "act_28" : "FabricEgress.egress_next.egress_vlan" + "act_26" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 150, + "action_id" : 148, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20386,7 +20341,7 @@ "id" : 59, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -20410,15 +20365,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [143, 96], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [141, 142, 143], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_96", "next_tables" : { - "__HIT__" : "tbl_act_27", - "__MISS__" : "tbl_act_28" + "FabricEgress.egress_next.push_vlan" : "node_96", + "FabricEgress.egress_next.pop_vlan" : "node_96", + "FabricEgress.egress_next.drop" : "node_96" }, "default_entry" : { - "action_id" : 96, + "action_id" : 143, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20427,6 +20383,12 @@ { "name" : "tbl_act_27", "id" : 60, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" + }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -20434,14 +20396,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [148], - "actions" : ["act_26"], + "action_ids" : [150], + "actions" : ["act_28"], "base_default_next" : "node_98", "next_tables" : { - "act_26" : "node_98" + "act_28" : "node_98" }, "default_entry" : { - "action_id" : 148, + "action_id" : 150, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20450,34 +20412,11 @@ { "name" : "tbl_act_28", "id" : 61, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [149], - "actions" : ["act_27"], - "base_default_next" : "node_98", - "next_tables" : { - "act_27" : "node_98" - }, - "default_entry" : { - "action_id" : 149, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_egress_next_push_vlan_0", - "id" : 62, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -20486,14 +20425,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [141], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_101", + "action_ids" : [149], + "actions" : ["act_27"], + "base_default_next" : "node_108", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_101" + "act_27" : "node_108" }, "default_entry" : { - "action_id" : 141, + "action_id" : 149, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20501,11 +20440,11 @@ }, { "name" : "tbl_act_29", - "id" : 63, + "id" : 62, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, + "line" : 379, + "column" : 29, "source_fragment" : "=" }, "key" : [], @@ -20517,9 +20456,9 @@ "direct_meters" : null, "action_ids" : [152], "actions" : ["act_30"], - "base_default_next" : "node_103", + "base_default_next" : "node_102", "next_tables" : { - "act_30" : "node_103" + "act_30" : "node_102" }, "default_entry" : { "action_id" : 152, @@ -20530,11 +20469,11 @@ }, { "name" : "tbl_act_30", - "id" : 64, + "id" : 63, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -20546,9 +20485,9 @@ "direct_meters" : null, "action_ids" : [151], "actions" : ["act_29"], - "base_default_next" : "node_113", + "base_default_next" : "node_108", "next_tables" : { - "act_29" : "node_113" + "act_29" : "node_108" }, "default_entry" : { "action_id" : 151, @@ -20559,11 +20498,11 @@ }, { "name" : "tbl_act_31", - "id" : 65, + "id" : 64, "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, + "line" : 384, + "column" : 35, "source_fragment" : "=" }, "key" : [], @@ -20575,9 +20514,9 @@ "direct_meters" : null, "action_ids" : [154], "actions" : ["act_32"], - "base_default_next" : "node_107", + "base_default_next" : "node_106", "next_tables" : { - "act_32" : "node_107" + "act_32" : "node_106" }, "default_entry" : { "action_id" : 154, @@ -20588,11 +20527,11 @@ }, { "name" : "tbl_act_32", - "id" : 66, + "id" : 65, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, + "line" : 385, + "column" : 45, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -20604,9 +20543,9 @@ "direct_meters" : null, "action_ids" : [153], "actions" : ["act_31"], - "base_default_next" : "node_113", + "base_default_next" : "node_108", "next_tables" : { - "act_31" : "node_113" + "act_31" : "node_108" }, "default_entry" : { "action_id" : 153, @@ -20616,13 +20555,13 @@ } }, { - "name" : "tbl_act_33", - "id" : 67, + "name" : "tbl_spgw_gtpu_encap", + "id" : 66, "source_info" : { - "filename" : "include/control/next.p4", - "line" : 378, - "column" : 35, - "source_fragment" : "=" + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 16, + "source_fragment" : "gtpu_encap()" }, "key" : [], "match_type" : "exact", @@ -20631,27 +20570,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [156], - "actions" : ["act_34"], + "action_ids" : [144], + "actions" : ["FabricEgress.spgw.gtpu_encap"], "base_default_next" : "node_111", "next_tables" : { - "act_34" : "node_111" + "FabricEgress.spgw.gtpu_encap" : "node_111" }, "default_entry" : { - "action_id" : 156, + "action_id" : 144, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_34", - "id" : 68, + "name" : "tbl_act_33", + "id" : 67, "source_info" : { - "filename" : "include/control/next.p4", - "line" : 379, - "column" : 45, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 333, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, "key" : [], "match_type" : "exact", @@ -20674,13 +20613,13 @@ } }, { - "name" : "tbl_spgw_gtpu_encap", - "id" : 69, + "name" : "tbl_bng_egress_downstream_encap_v4", + "id" : 68, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 330, - "column" : 16, - "source_fragment" : "gtpu_encap()" + "filename" : "include/bng.p4", + "line" : 297, + "column" : 12, + "source_fragment" : "encap_v4()" }, "key" : [], "match_type" : "exact", @@ -20689,80 +20628,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [144], - "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_116", + "action_ids" : [98], + "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], + "base_default_next" : "node_118", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_116" + "FabricEgress.bng_egress.downstream.encap_v4" : "node_118" }, "default_entry" : { - "action_id" : 144, + "action_id" : 98, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_35", - "id" : 70, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 333, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [157], - "actions" : ["act_35"], - "base_default_next" : "node_118", - "next_tables" : { - "act_35" : "node_118" - }, - "default_entry" : { - "action_id" : 157, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_bng_egress_downstream_encap_v4", - "id" : 71, - "source_info" : { - "filename" : "include/bng.p4", - "line" : 297, - "column" : 12, - "source_fragment" : "encap_v4()" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [99], - "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], - "base_default_next" : "node_123", - "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v4" : "node_123" - }, - "default_entry" : { - "action_id" : 99, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_bng_egress_downstream_encap_v6", - "id" : 72, + "name" : "tbl_bng_egress_downstream_encap_v6", + "id" : 69, "source_info" : { "filename" : "include/bng.p4", "line" : 302, @@ -20776,14 +20657,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [100], + "action_ids" : [99], "actions" : ["FabricEgress.bng_egress.downstream.encap_v6"], - "base_default_next" : "node_123", + "base_default_next" : "node_118", "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v6" : "node_123" + "FabricEgress.bng_egress.downstream.encap_v6" : "node_118" }, "default_entry" : { - "action_id" : 100, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20791,7 +20672,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 73, + "id" : 70, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -20830,12 +20711,12 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [101, 93], + "action_ids" : [100, 93], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_126", + "base_default_next" : "node_121", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_126", - "nop" : "node_126" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_121", + "nop" : "node_121" }, "default_entry" : { "action_id" : 93, @@ -20845,8 +20726,8 @@ } }, { - "name" : "tbl_act_36", - "id" : 74, + "name" : "tbl_act_34", + "id" : 71, "key" : [], "match_type" : "exact", "type" : "simple", @@ -20854,14 +20735,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [158], - "actions" : ["act_36"], + "action_ids" : [156], + "actions" : ["act_34"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "act_36" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + "act_34" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 158, + "action_id" : 156, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20869,7 +20750,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 75, + "id" : 72, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -20890,12 +20771,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102, 94], + "action_ids" : [101, 94], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_129", + "base_default_next" : "node_124", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_129", - "nop" : "node_129" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_124", + "nop" : "node_124" }, "default_entry" : { "action_id" : 94, @@ -20905,8 +20786,8 @@ } }, { - "name" : "tbl_act_37", - "id" : 76, + "name" : "tbl_act_35", + "id" : 73, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -20920,14 +20801,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [159], - "actions" : ["act_37"], - "base_default_next" : "node_131", + "action_ids" : [157], + "actions" : ["act_35"], + "base_default_next" : "node_126", "next_tables" : { - "act_37" : "node_131" + "act_35" : "node_126" }, "default_entry" : { - "action_id" : 159, + "action_id" : 157, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20935,7 +20816,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 77, + "id" : 74, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -20956,7 +20837,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 97], + "action_ids" : [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 96], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -20979,7 +20860,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 97, + "action_id" : 96, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -20999,7 +20880,7 @@ } ], "action_entry" : { - "action_id" : 103, + "action_id" : 102, "action_data" : [] }, "priority" : 1 @@ -21018,7 +20899,7 @@ } ], "action_entry" : { - "action_id" : 104, + "action_id" : 103, "action_data" : [] }, "priority" : 2 @@ -21037,7 +20918,7 @@ } ], "action_entry" : { - "action_id" : 105, + "action_id" : 104, "action_data" : [] }, "priority" : 3 @@ -21056,7 +20937,7 @@ } ], "action_entry" : { - "action_id" : 106, + "action_id" : 105, "action_data" : [] }, "priority" : 4 @@ -21075,7 +20956,7 @@ } ], "action_entry" : { - "action_id" : 107, + "action_id" : 106, "action_data" : [] }, "priority" : 5 @@ -21094,7 +20975,7 @@ } ], "action_entry" : { - "action_id" : 108, + "action_id" : 107, "action_data" : [] }, "priority" : 6 @@ -21113,7 +20994,7 @@ } ], "action_entry" : { - "action_id" : 109, + "action_id" : 108, "action_data" : [] }, "priority" : 7 @@ -21132,7 +21013,7 @@ } ], "action_entry" : { - "action_id" : 110, + "action_id" : 109, "action_data" : [] }, "priority" : 8 @@ -21151,7 +21032,7 @@ } ], "action_entry" : { - "action_id" : 111, + "action_id" : 110, "action_data" : [] }, "priority" : 9 @@ -21170,7 +21051,7 @@ } ], "action_entry" : { - "action_id" : 112, + "action_id" : 111, "action_data" : [] }, "priority" : 10 @@ -21189,7 +21070,7 @@ } ], "action_entry" : { - "action_id" : 113, + "action_id" : 112, "action_data" : [] }, "priority" : 11 @@ -21208,7 +21089,7 @@ } ], "action_entry" : { - "action_id" : 114, + "action_id" : 113, "action_data" : [] }, "priority" : 12 @@ -21227,7 +21108,7 @@ } ], "action_entry" : { - "action_id" : 115, + "action_id" : 114, "action_data" : [] }, "priority" : 13 @@ -21246,7 +21127,7 @@ } ], "action_entry" : { - "action_id" : 116, + "action_id" : 115, "action_data" : [] }, "priority" : 14 @@ -21265,7 +21146,7 @@ } ], "action_entry" : { - "action_id" : 117, + "action_id" : 116, "action_data" : [] }, "priority" : 15 @@ -21284,7 +21165,7 @@ } ], "action_entry" : { - "action_id" : 118, + "action_id" : 117, "action_data" : [] }, "priority" : 16 @@ -21293,7 +21174,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 78, + "id" : 75, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -21314,30 +21195,30 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 98], + "action_ids" : [118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 97], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_act_38", + "base_default_next" : "tbl_act_36", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_38", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_38", - "NoAction" : "tbl_act_38" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_36", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_36", + "NoAction" : "tbl_act_36" }, "default_entry" : { - "action_id" : 98, + "action_id" : 97, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -21357,7 +21238,7 @@ } ], "action_entry" : { - "action_id" : 119, + "action_id" : 118, "action_data" : [] }, "priority" : 1 @@ -21376,7 +21257,7 @@ } ], "action_entry" : { - "action_id" : 120, + "action_id" : 119, "action_data" : [] }, "priority" : 2 @@ -21395,7 +21276,7 @@ } ], "action_entry" : { - "action_id" : 121, + "action_id" : 120, "action_data" : [] }, "priority" : 3 @@ -21414,7 +21295,7 @@ } ], "action_entry" : { - "action_id" : 122, + "action_id" : 121, "action_data" : [] }, "priority" : 4 @@ -21433,7 +21314,7 @@ } ], "action_entry" : { - "action_id" : 123, + "action_id" : 122, "action_data" : [] }, "priority" : 5 @@ -21452,7 +21333,7 @@ } ], "action_entry" : { - "action_id" : 124, + "action_id" : 123, "action_data" : [] }, "priority" : 6 @@ -21471,7 +21352,7 @@ } ], "action_entry" : { - "action_id" : 125, + "action_id" : 124, "action_data" : [] }, "priority" : 7 @@ -21490,7 +21371,7 @@ } ], "action_entry" : { - "action_id" : 126, + "action_id" : 125, "action_data" : [] }, "priority" : 8 @@ -21509,7 +21390,7 @@ } ], "action_entry" : { - "action_id" : 127, + "action_id" : 126, "action_data" : [] }, "priority" : 9 @@ -21528,7 +21409,7 @@ } ], "action_entry" : { - "action_id" : 128, + "action_id" : 127, "action_data" : [] }, "priority" : 10 @@ -21547,7 +21428,7 @@ } ], "action_entry" : { - "action_id" : 129, + "action_id" : 128, "action_data" : [] }, "priority" : 11 @@ -21566,7 +21447,7 @@ } ], "action_entry" : { - "action_id" : 130, + "action_id" : 129, "action_data" : [] }, "priority" : 12 @@ -21585,7 +21466,7 @@ } ], "action_entry" : { - "action_id" : 131, + "action_id" : 130, "action_data" : [] }, "priority" : 13 @@ -21604,7 +21485,7 @@ } ], "action_entry" : { - "action_id" : 132, + "action_id" : 131, "action_data" : [] }, "priority" : 14 @@ -21623,7 +21504,7 @@ } ], "action_entry" : { - "action_id" : 133, + "action_id" : 132, "action_data" : [] }, "priority" : 15 @@ -21642,7 +21523,7 @@ } ], "action_entry" : { - "action_id" : 134, + "action_id" : 133, "action_data" : [] }, "priority" : 16 @@ -21650,8 +21531,8 @@ ] }, { - "name" : "tbl_act_38", - "id" : 79, + "name" : "tbl_act_36", + "id" : 76, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -21665,22 +21546,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [161], - "actions" : ["act_39"], - "base_default_next" : "node_135", + "action_ids" : [159], + "actions" : ["act_37"], + "base_default_next" : "node_130", "next_tables" : { - "act_39" : "node_135" + "act_37" : "node_130" }, "default_entry" : { - "action_id" : 161, + "action_id" : 159, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_39", - "id" : 80, + "name" : "tbl_act_37", + "id" : 77, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -21694,22 +21575,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [160], - "actions" : ["act_38"], - "base_default_next" : "node_137", + "action_ids" : [158], + "actions" : ["act_36"], + "base_default_next" : "node_132", "next_tables" : { - "act_38" : "node_137" + "act_36" : "node_132" }, "default_entry" : { - "action_id" : 160, + "action_id" : 158, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_40", - "id" : 81, + "name" : "tbl_act_38", + "id" : 78, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -21723,22 +21604,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [162], - "actions" : ["act_40"], - "base_default_next" : "node_139", + "action_ids" : [160], + "actions" : ["act_38"], + "base_default_next" : "node_134", "next_tables" : { - "act_40" : "node_139" + "act_38" : "node_134" }, "default_entry" : { - "action_id" : 162, + "action_id" : 160, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_41", - "id" : 82, + "name" : "tbl_act_39", + "id" : 79, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -21752,14 +21633,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [163], - "actions" : ["act_41"], - "base_default_next" : "node_141", + "action_ids" : [161], + "actions" : ["act_39"], + "base_default_next" : "node_136", "next_tables" : { - "act_41" : "node_141" + "act_39" : "node_136" }, "default_entry" : { - "action_id" : 163, + "action_id" : 161, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21767,7 +21648,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "id" : 83, + "id" : 80, "source_info" : { "filename" : "include/int/int_report.p4", "line" : 87, @@ -21781,12 +21662,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [135, 95], + "action_ids" : [134, 95], "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"], - "base_default_next" : "node_143", + "base_default_next" : "node_138", "next_tables" : { - "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_143", - "nop" : "node_143" + "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_138", + "nop" : "node_138" }, "default_entry" : { "action_id" : 95, @@ -21797,7 +21678,7 @@ }, { "name" : "tbl_process_int_main_process_int_sink_restore_header", - "id" : 84, + "id" : 81, "source_info" : { "filename" : "include/int/int_sink.p4", "line" : 53, @@ -21811,14 +21692,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [136], + "action_ids" : [135], "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"], "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink", "next_tables" : { "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" }, "default_entry" : { - "action_id" : 136, + "action_id" : 135, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21826,7 +21707,7 @@ }, { "name" : "tbl_process_int_main_process_int_sink_int_sink", - "id" : 85, + "id" : 82, "source_info" : { "filename" : "include/int/int_sink.p4", "line" : 54, @@ -21840,14 +21721,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [137], + "action_ids" : [136], "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], "base_default_next" : null, "next_tables" : { "FabricEgress.process_int_main.process_int_sink.int_sink" : null }, "default_entry" : { - "action_id" : 137, + "action_id" : 136, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21920,7 +21801,7 @@ "id" : 28, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -21973,7 +21854,7 @@ "id" : 29, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -21999,7 +21880,7 @@ "id" : 30, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -22022,7 +21903,7 @@ "id" : 31, "source_info" : { "filename" : "include/control/next.p4", - "line" : 347, + "line" : 359, "column" : 12, "source_fragment" : "fabric_metadata.push_double_vlan == true" }, @@ -22047,71 +21928,15 @@ } } }, - "true_next" : "tbl_egress_next_push_vlan", + "true_next" : "tbl_egress_next_push_outer_vlan", "false_next" : "tbl_act_26" }, { - "name" : "node_98", + "name" : "node_96", "id" : 32, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_99", - "false_next" : "node_101" - }, - { - "name" : "node_99", - "id" : 33, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan_0", - "false_next" : "node_101" - }, - { - "name" : "node_101", - "id" : 34, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -22126,15 +21951,15 @@ } } }, - "true_next" : "tbl_act_29", - "false_next" : "node_105" + "true_next" : "tbl_act_27", + "false_next" : "node_100" }, { - "name" : "node_103", - "id" : 35, + "name" : "node_98", + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -22152,15 +21977,15 @@ } } }, - "true_next" : "tbl_act_30", - "false_next" : "node_113" + "true_next" : "tbl_act_28", + "false_next" : "node_108" }, { - "name" : "node_105", - "id" : 36, + "name" : "node_100", + "id" : 34, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -22195,15 +22020,15 @@ } } }, - "true_next" : "tbl_act_31", - "false_next" : "node_109" + "true_next" : "tbl_act_29", + "false_next" : "node_104" }, { - "name" : "node_107", - "id" : 37, + "name" : "node_102", + "id" : 35, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -22221,15 +22046,15 @@ } } }, - "true_next" : "tbl_act_32", - "false_next" : "node_113" + "true_next" : "tbl_act_30", + "false_next" : "node_108" }, { - "name" : "node_109", - "id" : 38, + "name" : "node_104", + "id" : 36, "source_info" : { "filename" : "include/control/next.p4", - "line" : 377, + "line" : 383, "column" : 21, "source_fragment" : "hdr.ipv6.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -22264,15 +22089,15 @@ } } }, - "true_next" : "tbl_act_33", - "false_next" : "node_113" + "true_next" : "tbl_act_31", + "false_next" : "node_108" }, { - "name" : "node_111", - "id" : 39, + "name" : "node_106", + "id" : 37, "source_info" : { "filename" : "include/control/next.p4", - "line" : 379, + "line" : 385, "column" : 20, "source_fragment" : "hdr.ipv6.hop_limit == 0" }, @@ -22290,12 +22115,12 @@ } } }, - "true_next" : "tbl_act_34", - "false_next" : "node_113" + "true_next" : "tbl_act_32", + "false_next" : "node_108" }, { - "name" : "node_113", - "id" : 40, + "name" : "node_108", + "id" : 38, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 328, @@ -22323,12 +22148,12 @@ } } }, - "true_next" : "node_114", - "false_next" : "node_118" + "true_next" : "node_109", + "false_next" : "node_113" }, { - "name" : "node_114", - "id" : 41, + "name" : "node_109", + "id" : 39, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 329, @@ -22357,11 +22182,11 @@ } }, "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_116" + "false_next" : "node_111" }, { - "name" : "node_116", - "id" : 42, + "name" : "node_111", + "id" : 40, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 332, @@ -22389,12 +22214,12 @@ } } }, - "true_next" : "tbl_act_35", - "false_next" : "node_118" + "true_next" : "tbl_act_33", + "false_next" : "node_113" }, { - "name" : "node_118", - "id" : 43, + "name" : "node_113", + "id" : 41, "source_info" : { "filename" : "include/bng.p4", "line" : 358, @@ -22415,12 +22240,12 @@ } } }, - "true_next" : "node_119", - "false_next" : "node_123" + "true_next" : "node_114", + "false_next" : "node_118" }, { - "name" : "node_119", - "id" : 44, + "name" : "node_114", + "id" : 42, "source_info" : { "filename" : "include/bng.p4", "line" : 296, @@ -22439,11 +22264,11 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v4", - "false_next" : "node_121" + "false_next" : "node_116" }, { - "name" : "node_121", - "id" : 45, + "name" : "node_116", + "id" : 43, "source_info" : { "filename" : "include/bng.p4", "line" : 301, @@ -22462,11 +22287,11 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v6", - "false_next" : "node_123" + "false_next" : "node_118" }, { - "name" : "node_123", - "id" : 46, + "name" : "node_118", + "id" : 44, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -22542,11 +22367,11 @@ } }, "false_next" : null, - "true_next" : "node_124" + "true_next" : "node_119" }, { - "name" : "node_124", - "id" : 47, + "name" : "node_119", + "id" : 45, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 106, @@ -22575,11 +22400,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_126" + "false_next" : "node_121" }, { - "name" : "node_126", - "id" : 48, + "name" : "node_121", + "id" : 46, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -22598,11 +22423,11 @@ } }, "false_next" : null, - "true_next" : "tbl_act_36" + "true_next" : "tbl_act_34" }, { - "name" : "node_129", - "id" : 49, + "name" : "node_124", + "id" : 47, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -22630,12 +22455,12 @@ } } }, - "true_next" : "tbl_act_37", - "false_next" : "node_131" + "true_next" : "tbl_act_35", + "false_next" : "node_126" }, { - "name" : "node_131", - "id" : 50, + "name" : "node_126", + "id" : 48, "expression" : { "type" : "expression", "value" : { @@ -22655,11 +22480,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "false_next" : "node_141" + "false_next" : "node_136" }, { - "name" : "node_135", - "id" : 51, + "name" : "node_130", + "id" : 49, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -22677,12 +22502,12 @@ } } }, - "true_next" : "tbl_act_39", - "false_next" : "node_137" + "true_next" : "tbl_act_37", + "false_next" : "node_132" }, { - "name" : "node_137", - "id" : 52, + "name" : "node_132", + "id" : 50, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -22700,12 +22525,12 @@ } } }, - "true_next" : "tbl_act_40", - "false_next" : "node_139" + "true_next" : "tbl_act_38", + "false_next" : "node_134" }, { - "name" : "node_139", - "id" : 53, + "name" : "node_134", + "id" : 51, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -22723,12 +22548,12 @@ } } }, - "true_next" : "tbl_act_41", - "false_next" : "node_141" + "true_next" : "tbl_act_39", + "false_next" : "node_136" }, { - "name" : "node_141", - "id" : 54, + "name" : "node_136", + "id" : 52, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 115, @@ -22750,11 +22575,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "false_next" : "node_143" + "false_next" : "node_138" }, { - "name" : "node_143", - "id" : 55, + "name" : "node_138", + "id" : 53, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 119, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index dd55cdeb872..c02e04b27fe 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -897,15 +897,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -1552,6 +1555,13 @@ actions { bitwidth: 16 } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -1559,6 +1569,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index 1151554b9f0..739695af814 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -5,12 +5,11 @@ "id" : 0, "fields" : [ ["last_ipv4_dscp_0", 6, false], + ["tmp", 16, false], ["tmp_0", 16, false], - ["tmp_1", 16, false], - ["tmp_2", 4, false], - ["tmp", 32, false], + ["tmp_1", 4, false], + ["tmp_2", 32, false], ["tmp_3", 32, false], - ["egress_next_tmp", 1, false], ["process_int_main_process_int_transit_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], @@ -37,7 +36,7 @@ ["fabric_metadata_t._int_meta_new_bytes22", 16, false], ["fabric_metadata_t._int_meta_ig_tstamp23", 32, false], ["fabric_metadata_t._int_meta_eg_tstamp24", 32, false], - ["_padding_0", 6, false] + ["_padding_0", 7, false] ] }, { @@ -562,7 +561,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] }, { "type" : "lookahead", @@ -600,7 +599,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] } ] }, @@ -621,7 +620,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -647,7 +646,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -757,7 +756,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -783,7 +782,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -1309,7 +1308,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -2492,7 +2491,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -2528,7 +2527,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -2611,7 +2610,7 @@ "primitives" : [] }, { - "name" : "nop", + "name" : "NoAction", "id" : 36, "runtime_data" : [], "primitives" : [] @@ -2622,15 +2621,9 @@ "runtime_data" : [], "primitives" : [] }, - { - "name" : "NoAction", - "id" : 38, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 39, + "id" : 38, "runtime_data" : [ { "name" : "max_hop", @@ -3125,7 +3118,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 40, + "id" : 39, "runtime_data" : [ { "name" : "switch_id", @@ -3185,13 +3178,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 41, + "id" : 40, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 42, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -3348,7 +3341,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 43, + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -3473,7 +3466,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 44, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -3664,7 +3657,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 45, + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -3834,7 +3827,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 46, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -4070,7 +4063,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 47, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -4274,7 +4267,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 48, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -4544,7 +4537,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 49, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -4669,7 +4662,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 50, + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -4860,7 +4853,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 51, + "id" : 50, "runtime_data" : [], "primitives" : [ { @@ -5019,7 +5012,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 52, + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -5244,7 +5237,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 53, + "id" : 52, "runtime_data" : [], "primitives" : [ { @@ -5448,7 +5441,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 54, + "id" : 53, "runtime_data" : [], "primitives" : [ { @@ -5718,7 +5711,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 55, + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -5956,7 +5949,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 56, + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -6260,13 +6253,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 57, + "id" : 56, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 58, + "id" : 57, "runtime_data" : [], "primitives" : [ { @@ -6391,7 +6384,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 59, + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -6535,7 +6528,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 60, + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -6713,7 +6706,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 61, + "id" : 60, "runtime_data" : [], "primitives" : [ { @@ -6861,7 +6854,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 62, + "id" : 61, "runtime_data" : [], "primitives" : [ { @@ -7043,7 +7036,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 63, + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -7244,7 +7237,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 64, + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -7479,7 +7472,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 65, + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -7604,7 +7597,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 66, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -7763,7 +7756,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 67, + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -7941,7 +7934,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 68, + "id" : 67, "runtime_data" : [], "primitives" : [ { @@ -8153,7 +8146,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 69, + "id" : 68, "runtime_data" : [], "primitives" : [ { @@ -8335,7 +8328,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 70, + "id" : 69, "runtime_data" : [], "primitives" : [ { @@ -8551,7 +8544,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 71, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -8786,7 +8779,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 72, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -9055,7 +9048,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 73, + "id" : 72, "runtime_data" : [], "primitives" : [ { @@ -9096,7 +9089,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 74, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -9213,7 +9206,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 75, + "id" : 74, "runtime_data" : [], "primitives" : [ { @@ -9311,7 +9304,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 76, + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -9324,13 +9317,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "act_4", "id" : 77, @@ -9414,7 +9429,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -9425,66 +9440,6 @@ "name" : "act_7", "id" : 80, "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_8", - "id" : 81, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_9", - "id" : 82, - "runtime_data" : [], "primitives" : [ { "op" : "mark_to_drop", @@ -9496,7 +9451,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -9504,8 +9459,8 @@ ] }, { - "name" : "act_10", - "id" : 83, + "name" : "act_8", + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -9545,7 +9500,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -9553,8 +9508,8 @@ ] }, { - "name" : "act_11", - "id" : 84, + "name" : "act_9", + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -9567,7 +9522,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -9575,8 +9530,8 @@ ] }, { - "name" : "act_12", - "id" : 85, + "name" : "act_10", + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -9616,7 +9571,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -9624,8 +9579,8 @@ ] }, { - "name" : "act_13", - "id" : 86, + "name" : "act_11", + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -9654,8 +9609,8 @@ ] }, { - "name" : "act_14", - "id" : 87, + "name" : "act_12", + "id" : 85, "runtime_data" : [], "primitives" : [ { @@ -9690,8 +9645,8 @@ ] }, { - "name" : "act_15", - "id" : 88, + "name" : "act_13", + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -9739,8 +9694,8 @@ ] }, { - "name" : "act_16", - "id" : 89, + "name" : "act_14", + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -9788,8 +9743,8 @@ ] }, { - "name" : "act_17", - "id" : 90, + "name" : "act_15", + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -9837,8 +9792,8 @@ ] }, { - "name" : "act_18", - "id" : 91, + "name" : "act_16", + "id" : 89, "runtime_data" : [], "primitives" : [ { @@ -10948,7 +10903,7 @@ "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -10977,7 +10932,7 @@ "id" : 19, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -10988,14 +10943,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [73], + "action_ids" : [72], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 73, + "action_id" : 72, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11006,7 +10961,7 @@ "id" : 20, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -11017,14 +10972,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [74], + "action_ids" : [73], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 74, + "action_id" : 73, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11035,7 +10990,7 @@ "id" : 21, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -11059,15 +11014,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [76, 36], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [74, 75, 76], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_41", "next_tables" : { - "__HIT__" : "tbl_act_7", - "__MISS__" : "tbl_act_8" + "FabricEgress.egress_next.push_vlan" : "node_41", + "FabricEgress.egress_next.pop_vlan" : "node_41", + "FabricEgress.egress_next.drop" : "node_41" }, "default_entry" : { - "action_id" : 36, + "action_id" : 76, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11076,29 +11032,12 @@ { "name" : "tbl_act_7", "id" : 22, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [80], - "actions" : ["act_7"], - "base_default_next" : "node_43", - "next_tables" : { - "act_7" : "node_43" + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" }, - "default_entry" : { - "action_id" : 80, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_8", - "id" : 23, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11120,13 +11059,13 @@ } }, { - "name" : "tbl_egress_next_push_vlan", - "id" : 24, + "name" : "tbl_act_8", + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -11135,14 +11074,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [75], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_46", + "action_ids" : [80], + "actions" : ["act_7"], + "base_default_next" : "node_49", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_46" + "act_7" : "node_49" }, "default_entry" : { - "action_id" : 75, + "action_id" : 80, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11150,11 +11089,11 @@ }, { "name" : "tbl_act_9", - "id" : 25, + "id" : 24, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, + "line" : 379, + "column" : 29, "source_fragment" : "=" }, "key" : [], @@ -11166,9 +11105,9 @@ "direct_meters" : null, "action_ids" : [83], "actions" : ["act_10"], - "base_default_next" : "node_48", + "base_default_next" : "node_47", "next_tables" : { - "act_10" : "node_48" + "act_10" : "node_47" }, "default_entry" : { "action_id" : 83, @@ -11179,11 +11118,11 @@ }, { "name" : "tbl_act_10", - "id" : 26, + "id" : 25, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -11195,9 +11134,9 @@ "direct_meters" : null, "action_ids" : [82], "actions" : ["act_9"], - "base_default_next" : "node_54", + "base_default_next" : "node_49", "next_tables" : { - "act_9" : "node_54" + "act_9" : "node_49" }, "default_entry" : { "action_id" : 82, @@ -11206,67 +11145,9 @@ "action_entry_const" : true } }, - { - "name" : "tbl_act_11", - "id" : 27, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [85], - "actions" : ["act_12"], - "base_default_next" : "node_52", - "next_tables" : { - "act_12" : "node_52" - }, - "default_entry" : { - "action_id" : 85, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_12", - "id" : 28, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [84], - "actions" : ["act_11"], - "base_default_next" : "node_54", - "next_tables" : { - "act_11" : "node_54" - }, - "default_entry" : { - "action_id" : 84, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 29, + "id" : 26, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -11305,12 +11186,12 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39, 34], + "action_ids" : [38, 34], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_57", + "base_default_next" : "node_52", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_57", - "nop" : "node_57" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_52", + "nop" : "node_52" }, "default_entry" : { "action_id" : 34, @@ -11320,8 +11201,8 @@ } }, { - "name" : "tbl_act_13", - "id" : 30, + "name" : "tbl_act_11", + "id" : 27, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11329,14 +11210,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86], - "actions" : ["act_13"], + "action_ids" : [84], + "actions" : ["act_11"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "act_13" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + "act_11" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 86, + "action_id" : 84, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11344,7 +11225,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 31, + "id" : 28, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -11365,12 +11246,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40, 35], + "action_ids" : [39, 35], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_60", + "base_default_next" : "node_55", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_60", - "nop" : "node_60" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_55", + "nop" : "node_55" }, "default_entry" : { "action_id" : 35, @@ -11380,8 +11261,8 @@ } }, { - "name" : "tbl_act_14", - "id" : 32, + "name" : "tbl_act_12", + "id" : 29, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -11395,14 +11276,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87], - "actions" : ["act_14"], - "base_default_next" : "node_62", + "action_ids" : [85], + "actions" : ["act_12"], + "base_default_next" : "node_57", "next_tables" : { - "act_14" : "node_62" + "act_12" : "node_57" }, "default_entry" : { - "action_id" : 87, + "action_id" : 85, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11410,7 +11291,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 33, + "id" : 30, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -11431,7 +11312,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 37], + "action_ids" : [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 36], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -11454,7 +11335,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 37, + "action_id" : 36, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -11474,7 +11355,7 @@ } ], "action_entry" : { - "action_id" : 41, + "action_id" : 40, "action_data" : [] }, "priority" : 1 @@ -11493,7 +11374,7 @@ } ], "action_entry" : { - "action_id" : 42, + "action_id" : 41, "action_data" : [] }, "priority" : 2 @@ -11512,7 +11393,7 @@ } ], "action_entry" : { - "action_id" : 43, + "action_id" : 42, "action_data" : [] }, "priority" : 3 @@ -11531,7 +11412,7 @@ } ], "action_entry" : { - "action_id" : 44, + "action_id" : 43, "action_data" : [] }, "priority" : 4 @@ -11550,7 +11431,7 @@ } ], "action_entry" : { - "action_id" : 45, + "action_id" : 44, "action_data" : [] }, "priority" : 5 @@ -11569,7 +11450,7 @@ } ], "action_entry" : { - "action_id" : 46, + "action_id" : 45, "action_data" : [] }, "priority" : 6 @@ -11588,7 +11469,7 @@ } ], "action_entry" : { - "action_id" : 47, + "action_id" : 46, "action_data" : [] }, "priority" : 7 @@ -11607,7 +11488,7 @@ } ], "action_entry" : { - "action_id" : 48, + "action_id" : 47, "action_data" : [] }, "priority" : 8 @@ -11626,7 +11507,7 @@ } ], "action_entry" : { - "action_id" : 49, + "action_id" : 48, "action_data" : [] }, "priority" : 9 @@ -11645,7 +11526,7 @@ } ], "action_entry" : { - "action_id" : 50, + "action_id" : 49, "action_data" : [] }, "priority" : 10 @@ -11664,7 +11545,7 @@ } ], "action_entry" : { - "action_id" : 51, + "action_id" : 50, "action_data" : [] }, "priority" : 11 @@ -11683,7 +11564,7 @@ } ], "action_entry" : { - "action_id" : 52, + "action_id" : 51, "action_data" : [] }, "priority" : 12 @@ -11702,7 +11583,7 @@ } ], "action_entry" : { - "action_id" : 53, + "action_id" : 52, "action_data" : [] }, "priority" : 13 @@ -11721,7 +11602,7 @@ } ], "action_entry" : { - "action_id" : 54, + "action_id" : 53, "action_data" : [] }, "priority" : 14 @@ -11740,7 +11621,7 @@ } ], "action_entry" : { - "action_id" : 55, + "action_id" : 54, "action_data" : [] }, "priority" : 15 @@ -11759,7 +11640,7 @@ } ], "action_entry" : { - "action_id" : 56, + "action_id" : 55, "action_data" : [] }, "priority" : 16 @@ -11768,7 +11649,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 34, + "id" : 31, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -11789,30 +11670,30 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 38], + "action_ids" : [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 37], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_act_15", + "base_default_next" : "tbl_act_13", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_15", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_15", - "NoAction" : "tbl_act_15" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_13", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_13", + "NoAction" : "tbl_act_13" }, "default_entry" : { - "action_id" : 38, + "action_id" : 37, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -11832,7 +11713,7 @@ } ], "action_entry" : { - "action_id" : 57, + "action_id" : 56, "action_data" : [] }, "priority" : 1 @@ -11851,7 +11732,7 @@ } ], "action_entry" : { - "action_id" : 58, + "action_id" : 57, "action_data" : [] }, "priority" : 2 @@ -11870,7 +11751,7 @@ } ], "action_entry" : { - "action_id" : 59, + "action_id" : 58, "action_data" : [] }, "priority" : 3 @@ -11889,7 +11770,7 @@ } ], "action_entry" : { - "action_id" : 60, + "action_id" : 59, "action_data" : [] }, "priority" : 4 @@ -11908,7 +11789,7 @@ } ], "action_entry" : { - "action_id" : 61, + "action_id" : 60, "action_data" : [] }, "priority" : 5 @@ -11927,7 +11808,7 @@ } ], "action_entry" : { - "action_id" : 62, + "action_id" : 61, "action_data" : [] }, "priority" : 6 @@ -11946,7 +11827,7 @@ } ], "action_entry" : { - "action_id" : 63, + "action_id" : 62, "action_data" : [] }, "priority" : 7 @@ -11965,7 +11846,7 @@ } ], "action_entry" : { - "action_id" : 64, + "action_id" : 63, "action_data" : [] }, "priority" : 8 @@ -11984,7 +11865,7 @@ } ], "action_entry" : { - "action_id" : 65, + "action_id" : 64, "action_data" : [] }, "priority" : 9 @@ -12003,7 +11884,7 @@ } ], "action_entry" : { - "action_id" : 66, + "action_id" : 65, "action_data" : [] }, "priority" : 10 @@ -12022,7 +11903,7 @@ } ], "action_entry" : { - "action_id" : 67, + "action_id" : 66, "action_data" : [] }, "priority" : 11 @@ -12041,7 +11922,7 @@ } ], "action_entry" : { - "action_id" : 68, + "action_id" : 67, "action_data" : [] }, "priority" : 12 @@ -12060,7 +11941,7 @@ } ], "action_entry" : { - "action_id" : 69, + "action_id" : 68, "action_data" : [] }, "priority" : 13 @@ -12079,7 +11960,7 @@ } ], "action_entry" : { - "action_id" : 70, + "action_id" : 69, "action_data" : [] }, "priority" : 14 @@ -12098,7 +11979,7 @@ } ], "action_entry" : { - "action_id" : 71, + "action_id" : 70, "action_data" : [] }, "priority" : 15 @@ -12117,7 +11998,7 @@ } ], "action_entry" : { - "action_id" : 72, + "action_id" : 71, "action_data" : [] }, "priority" : 16 @@ -12125,8 +12006,8 @@ ] }, { - "name" : "tbl_act_15", - "id" : 35, + "name" : "tbl_act_13", + "id" : 32, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -12140,22 +12021,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [89], - "actions" : ["act_16"], - "base_default_next" : "node_66", + "action_ids" : [87], + "actions" : ["act_14"], + "base_default_next" : "node_61", "next_tables" : { - "act_16" : "node_66" + "act_14" : "node_61" }, "default_entry" : { - "action_id" : 89, + "action_id" : 87, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_16", - "id" : 36, + "name" : "tbl_act_14", + "id" : 33, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -12169,22 +12050,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [88], - "actions" : ["act_15"], - "base_default_next" : "node_68", + "action_ids" : [86], + "actions" : ["act_13"], + "base_default_next" : "node_63", "next_tables" : { - "act_15" : "node_68" + "act_13" : "node_63" }, "default_entry" : { - "action_id" : 88, + "action_id" : 86, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_17", - "id" : 37, + "name" : "tbl_act_15", + "id" : 34, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -12198,22 +12079,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [90], - "actions" : ["act_17"], - "base_default_next" : "node_70", + "action_ids" : [88], + "actions" : ["act_15"], + "base_default_next" : "node_65", "next_tables" : { - "act_17" : "node_70" + "act_15" : "node_65" }, "default_entry" : { - "action_id" : 90, + "action_id" : 88, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_18", - "id" : 38, + "name" : "tbl_act_16", + "id" : 35, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -12227,14 +12108,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [91], - "actions" : ["act_18"], + "action_ids" : [89], + "actions" : ["act_16"], "base_default_next" : null, "next_tables" : { - "act_18" : null + "act_16" : null }, "default_entry" : { - "action_id" : 91, + "action_id" : 89, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12307,7 +12188,7 @@ "id" : 12, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -12360,7 +12241,7 @@ "id" : 13, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -12386,7 +12267,7 @@ "id" : 14, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -12405,67 +12286,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_43", + "name" : "node_41", "id" : 15, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_44", - "false_next" : "node_46" - }, - { - "name" : "node_44", - "id" : 16, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan", - "false_next" : "node_46" - }, - { - "name" : "node_46", - "id" : 17, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -12480,15 +12305,15 @@ } } }, - "true_next" : "tbl_act_9", - "false_next" : "node_50" + "true_next" : "tbl_act_7", + "false_next" : "node_45" }, { - "name" : "node_48", - "id" : 18, + "name" : "node_43", + "id" : 16, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -12506,15 +12331,15 @@ } } }, - "true_next" : "tbl_act_10", - "false_next" : "node_54" + "true_next" : "tbl_act_8", + "false_next" : "node_49" }, { - "name" : "node_50", - "id" : 19, + "name" : "node_45", + "id" : 17, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -12549,15 +12374,15 @@ } } }, - "true_next" : "tbl_act_11", - "false_next" : "node_54" + "true_next" : "tbl_act_9", + "false_next" : "node_49" }, { - "name" : "node_52", - "id" : 20, + "name" : "node_47", + "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -12575,12 +12400,12 @@ } } }, - "true_next" : "tbl_act_12", - "false_next" : "node_54" + "true_next" : "tbl_act_10", + "false_next" : "node_49" }, { - "name" : "node_54", - "id" : 21, + "name" : "node_49", + "id" : 19, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -12656,11 +12481,11 @@ } }, "false_next" : null, - "true_next" : "node_55" + "true_next" : "node_50" }, { - "name" : "node_55", - "id" : 22, + "name" : "node_50", + "id" : 20, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 106, @@ -12689,11 +12514,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_57" + "false_next" : "node_52" }, { - "name" : "node_57", - "id" : 23, + "name" : "node_52", + "id" : 21, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -12712,11 +12537,11 @@ } }, "false_next" : null, - "true_next" : "tbl_act_13" + "true_next" : "tbl_act_11" }, { - "name" : "node_60", - "id" : 24, + "name" : "node_55", + "id" : 22, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -12744,12 +12569,12 @@ } } }, - "true_next" : "tbl_act_14", - "false_next" : "node_62" + "true_next" : "tbl_act_12", + "false_next" : "node_57" }, { - "name" : "node_62", - "id" : 25, + "name" : "node_57", + "id" : 23, "expression" : { "type" : "expression", "value" : { @@ -12772,8 +12597,8 @@ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" }, { - "name" : "node_66", - "id" : 26, + "name" : "node_61", + "id" : 24, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -12791,12 +12616,12 @@ } } }, - "true_next" : "tbl_act_16", - "false_next" : "node_68" + "true_next" : "tbl_act_14", + "false_next" : "node_63" }, { - "name" : "node_68", - "id" : 27, + "name" : "node_63", + "id" : 25, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -12814,12 +12639,12 @@ } } }, - "true_next" : "tbl_act_17", - "false_next" : "node_70" + "true_next" : "tbl_act_15", + "false_next" : "node_65" }, { - "name" : "node_70", - "id" : 28, + "name" : "node_65", + "id" : 26, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -12838,7 +12663,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_18" + "true_next" : "tbl_act_16" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt index a661e7a371f..add34cf6e20 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt @@ -470,15 +470,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -612,7 +615,7 @@ actions { preamble { id: 16820765 name: "FabricIngress.acl.drop" - alias: "drop" + alias: "acl.drop" } } actions { @@ -777,6 +780,13 @@ actions { bitwidth: 32 } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -784,6 +794,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json index f5064b58fa2..0f817fa54ea 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -5,13 +5,12 @@ "id" : 0, "fields" : [ ["last_ipv4_dscp_0", 6, false], + ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 16, false], - ["tmp_3", 4, false], + ["tmp_2", 4, false], ["tmp", 32, false], - ["tmp_0", 32, false], + ["tmp_3", 32, false], ["spgw_tmp", 1, false], - ["egress_next_tmp", 1, false], ["process_int_main_process_int_transit_hasReturned", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], @@ -52,7 +51,8 @@ ["fabric_metadata_t._int_meta_new_words36", 8, false], ["fabric_metadata_t._int_meta_new_bytes37", 16, false], ["fabric_metadata_t._int_meta_ig_tstamp38", 32, false], - ["fabric_metadata_t._int_meta_eg_tstamp39", 32, false] + ["fabric_metadata_t._int_meta_eg_tstamp39", 32, false], + ["_padding_0", 1, false] ] }, { @@ -648,7 +648,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -686,7 +686,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -707,7 +707,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -733,7 +733,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -843,7 +843,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -869,7 +869,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -1530,7 +1530,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -5753,7 +5753,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -5789,7 +5789,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -5814,7 +5814,7 @@ "primitives" : [] }, { - "name" : "nop", + "name" : "NoAction", "id" : 57, "runtime_data" : [], "primitives" : [] @@ -5825,15 +5825,9 @@ "runtime_data" : [], "primitives" : [] }, - { - "name" : "NoAction", - "id" : 59, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 60, + "id" : 59, "runtime_data" : [ { "name" : "max_hop", @@ -6328,7 +6322,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 61, + "id" : 60, "runtime_data" : [ { "name" : "switch_id", @@ -6388,13 +6382,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 62, + "id" : 61, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 63, + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -6551,7 +6545,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 64, + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -6676,7 +6670,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 65, + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -6867,7 +6861,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 66, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -7037,7 +7031,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 67, + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -7273,7 +7267,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 68, + "id" : 67, "runtime_data" : [], "primitives" : [ { @@ -7477,7 +7471,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 69, + "id" : 68, "runtime_data" : [], "primitives" : [ { @@ -7747,7 +7741,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 70, + "id" : 69, "runtime_data" : [], "primitives" : [ { @@ -7872,7 +7866,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 71, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -8063,7 +8057,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 72, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -8222,7 +8216,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 73, + "id" : 72, "runtime_data" : [], "primitives" : [ { @@ -8447,7 +8441,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 74, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -8651,7 +8645,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 75, + "id" : 74, "runtime_data" : [], "primitives" : [ { @@ -8921,7 +8915,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 76, + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -9159,7 +9153,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 77, + "id" : 76, "runtime_data" : [], "primitives" : [ { @@ -9463,13 +9457,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 78, + "id" : 77, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 79, + "id" : 78, "runtime_data" : [], "primitives" : [ { @@ -9594,7 +9588,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 80, + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -9738,7 +9732,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 81, + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -9916,7 +9910,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 82, + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -10064,7 +10058,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 83, + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -10246,7 +10240,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 84, + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -10447,7 +10441,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 85, + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -10682,7 +10676,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 86, + "id" : 85, "runtime_data" : [], "primitives" : [ { @@ -10807,7 +10801,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 87, + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -10966,7 +10960,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 88, + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -11144,7 +11138,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 89, + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -11356,7 +11350,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 90, + "id" : 89, "runtime_data" : [], "primitives" : [ { @@ -11538,7 +11532,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 91, + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -11754,7 +11748,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 92, + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -11989,7 +11983,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 93, + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -12258,7 +12252,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 94, + "id" : 93, "runtime_data" : [], "primitives" : [ { @@ -12299,7 +12293,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 95, + "id" : 94, "runtime_data" : [], "primitives" : [ { @@ -12416,7 +12410,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 96, + "id" : 95, "runtime_data" : [], "primitives" : [ { @@ -12514,7 +12508,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 97, + "id" : 96, "runtime_data" : [], "primitives" : [ { @@ -12527,13 +12521,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "FabricEgress.spgw.gtpu_encap", "id" : 98, @@ -13209,7 +13225,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -13220,66 +13236,6 @@ "name" : "act_11", "id" : 102, "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_12", - "id" : 103, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_13", - "id" : 104, - "runtime_data" : [], "primitives" : [ { "op" : "mark_to_drop", @@ -13291,7 +13247,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -13299,8 +13255,8 @@ ] }, { - "name" : "act_14", - "id" : 105, + "name" : "act_12", + "id" : 103, "runtime_data" : [], "primitives" : [ { @@ -13340,7 +13296,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -13348,8 +13304,8 @@ ] }, { - "name" : "act_15", - "id" : 106, + "name" : "act_13", + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -13362,7 +13318,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -13370,8 +13326,8 @@ ] }, { - "name" : "act_16", - "id" : 107, + "name" : "act_14", + "id" : 105, "runtime_data" : [], "primitives" : [ { @@ -13411,7 +13367,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -13419,8 +13375,8 @@ ] }, { - "name" : "act_17", - "id" : 108, + "name" : "act_15", + "id" : 106, "runtime_data" : [], "primitives" : [ { @@ -13445,8 +13401,8 @@ ] }, { - "name" : "act_18", - "id" : 109, + "name" : "act_16", + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -13475,8 +13431,8 @@ ] }, { - "name" : "act_19", - "id" : 110, + "name" : "act_17", + "id" : 108, "runtime_data" : [], "primitives" : [ { @@ -13511,8 +13467,8 @@ ] }, { - "name" : "act_20", - "id" : 111, + "name" : "act_18", + "id" : 109, "runtime_data" : [], "primitives" : [ { @@ -13560,8 +13516,8 @@ ] }, { - "name" : "act_21", - "id" : 112, + "name" : "act_19", + "id" : 110, "runtime_data" : [], "primitives" : [ { @@ -13609,8 +13565,8 @@ ] }, { - "name" : "act_22", - "id" : 113, + "name" : "act_20", + "id" : 111, "runtime_data" : [], "primitives" : [ { @@ -13658,8 +13614,8 @@ ] }, { - "name" : "act_23", - "id" : 114, + "name" : "act_21", + "id" : 112, "runtime_data" : [], "primitives" : [ { @@ -15427,7 +15383,7 @@ "id" : 28, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -15456,7 +15412,7 @@ "id" : 29, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -15467,14 +15423,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [94], + "action_ids" : [93], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 94, + "action_id" : 93, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15485,7 +15441,7 @@ "id" : 30, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -15496,14 +15452,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95], + "action_ids" : [94], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 95, + "action_id" : 94, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15514,7 +15470,7 @@ "id" : 31, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -15538,15 +15494,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [97, 57], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [95, 96, 97], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_56", "next_tables" : { - "__HIT__" : "tbl_act_11", - "__MISS__" : "tbl_act_12" + "FabricEgress.egress_next.push_vlan" : "node_56", + "FabricEgress.egress_next.pop_vlan" : "node_56", + "FabricEgress.egress_next.drop" : "node_56" }, "default_entry" : { - "action_id" : 57, + "action_id" : 97, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15555,6 +15512,12 @@ { "name" : "tbl_act_11", "id" : 32, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" + }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -15562,14 +15525,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], - "actions" : ["act_11"], + "action_ids" : [103], + "actions" : ["act_12"], "base_default_next" : "node_58", "next_tables" : { - "act_11" : "node_58" + "act_12" : "node_58" }, "default_entry" : { - "action_id" : 102, + "action_id" : 103, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15578,6 +15541,12 @@ { "name" : "tbl_act_12", "id" : 33, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + }, "key" : [], "match_type" : "exact", "type" : "simple", @@ -15585,27 +15554,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103], - "actions" : ["act_12"], - "base_default_next" : "node_58", + "action_ids" : [102], + "actions" : ["act_11"], + "base_default_next" : "node_64", "next_tables" : { - "act_12" : "node_58" + "act_11" : "node_64" }, "default_entry" : { - "action_id" : 103, + "action_id" : 102, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_egress_next_push_vlan", + "name" : "tbl_act_13", "id" : 34, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 379, + "column" : 29, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -15614,40 +15583,11 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [96], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_61", + "action_ids" : [105], + "actions" : ["act_14"], + "base_default_next" : "node_62", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_61" - }, - "default_entry" : { - "action_id" : 96, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_13", - "id" : 35, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [105], - "actions" : ["act_14"], - "base_default_next" : "node_63", - "next_tables" : { - "act_14" : "node_63" + "act_14" : "node_62" }, "default_entry" : { "action_id" : 105, @@ -15658,11 +15598,11 @@ }, { "name" : "tbl_act_14", - "id" : 36, + "id" : 35, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -15674,9 +15614,9 @@ "direct_meters" : null, "action_ids" : [104], "actions" : ["act_13"], - "base_default_next" : "node_69", + "base_default_next" : "node_64", "next_tables" : { - "act_13" : "node_69" + "act_13" : "node_64" }, "default_entry" : { "action_id" : 104, @@ -15685,67 +15625,9 @@ "action_entry_const" : true } }, - { - "name" : "tbl_act_15", - "id" : 37, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [107], - "actions" : ["act_16"], - "base_default_next" : "node_67", - "next_tables" : { - "act_16" : "node_67" - }, - "default_entry" : { - "action_id" : 107, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_16", - "id" : 38, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [106], - "actions" : ["act_15"], - "base_default_next" : "node_69", - "next_tables" : { - "act_15" : "node_69" - }, - "default_entry" : { - "action_id" : 106, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, { "name" : "tbl_spgw_gtpu_encap", - "id" : 39, + "id" : 36, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 330, @@ -15761,9 +15643,9 @@ "direct_meters" : null, "action_ids" : [98], "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_72", + "base_default_next" : "node_67", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_72" + "FabricEgress.spgw.gtpu_encap" : "node_67" }, "default_entry" : { "action_id" : 98, @@ -15773,8 +15655,8 @@ } }, { - "name" : "tbl_act_17", - "id" : 40, + "name" : "tbl_act_15", + "id" : 37, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 333, @@ -15788,14 +15670,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [108], - "actions" : ["act_17"], - "base_default_next" : "node_74", + "action_ids" : [106], + "actions" : ["act_15"], + "base_default_next" : "node_69", "next_tables" : { - "act_17" : "node_74" + "act_15" : "node_69" }, "default_entry" : { - "action_id" : 108, + "action_id" : 106, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15803,7 +15685,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 41, + "id" : 38, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -15842,12 +15724,12 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [60, 55], + "action_ids" : [59, 55], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_77", + "base_default_next" : "node_72", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_77", - "nop" : "node_77" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_72", + "nop" : "node_72" }, "default_entry" : { "action_id" : 55, @@ -15857,8 +15739,8 @@ } }, { - "name" : "tbl_act_18", - "id" : 42, + "name" : "tbl_act_16", + "id" : 39, "key" : [], "match_type" : "exact", "type" : "simple", @@ -15866,14 +15748,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [109], - "actions" : ["act_18"], + "action_ids" : [107], + "actions" : ["act_16"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "act_18" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + "act_16" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 109, + "action_id" : 107, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15881,7 +15763,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 43, + "id" : 40, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -15902,12 +15784,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61, 56], + "action_ids" : [60, 56], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_80", + "base_default_next" : "node_75", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_80", - "nop" : "node_80" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_75", + "nop" : "node_75" }, "default_entry" : { "action_id" : 56, @@ -15917,8 +15799,8 @@ } }, { - "name" : "tbl_act_19", - "id" : 44, + "name" : "tbl_act_17", + "id" : 41, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -15932,14 +15814,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [110], - "actions" : ["act_19"], - "base_default_next" : "node_82", + "action_ids" : [108], + "actions" : ["act_17"], + "base_default_next" : "node_77", "next_tables" : { - "act_19" : "node_82" + "act_17" : "node_77" }, "default_entry" : { - "action_id" : 110, + "action_id" : 108, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15947,7 +15829,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 45, + "id" : 42, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -15968,7 +15850,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 58], + "action_ids" : [61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 57], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -15991,7 +15873,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 58, + "action_id" : 57, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -16011,7 +15893,7 @@ } ], "action_entry" : { - "action_id" : 62, + "action_id" : 61, "action_data" : [] }, "priority" : 1 @@ -16030,7 +15912,7 @@ } ], "action_entry" : { - "action_id" : 63, + "action_id" : 62, "action_data" : [] }, "priority" : 2 @@ -16049,7 +15931,7 @@ } ], "action_entry" : { - "action_id" : 64, + "action_id" : 63, "action_data" : [] }, "priority" : 3 @@ -16068,7 +15950,7 @@ } ], "action_entry" : { - "action_id" : 65, + "action_id" : 64, "action_data" : [] }, "priority" : 4 @@ -16087,7 +15969,7 @@ } ], "action_entry" : { - "action_id" : 66, + "action_id" : 65, "action_data" : [] }, "priority" : 5 @@ -16106,7 +15988,7 @@ } ], "action_entry" : { - "action_id" : 67, + "action_id" : 66, "action_data" : [] }, "priority" : 6 @@ -16125,7 +16007,7 @@ } ], "action_entry" : { - "action_id" : 68, + "action_id" : 67, "action_data" : [] }, "priority" : 7 @@ -16144,7 +16026,7 @@ } ], "action_entry" : { - "action_id" : 69, + "action_id" : 68, "action_data" : [] }, "priority" : 8 @@ -16163,7 +16045,7 @@ } ], "action_entry" : { - "action_id" : 70, + "action_id" : 69, "action_data" : [] }, "priority" : 9 @@ -16182,7 +16064,7 @@ } ], "action_entry" : { - "action_id" : 71, + "action_id" : 70, "action_data" : [] }, "priority" : 10 @@ -16201,7 +16083,7 @@ } ], "action_entry" : { - "action_id" : 72, + "action_id" : 71, "action_data" : [] }, "priority" : 11 @@ -16220,7 +16102,7 @@ } ], "action_entry" : { - "action_id" : 73, + "action_id" : 72, "action_data" : [] }, "priority" : 12 @@ -16239,7 +16121,7 @@ } ], "action_entry" : { - "action_id" : 74, + "action_id" : 73, "action_data" : [] }, "priority" : 13 @@ -16258,7 +16140,7 @@ } ], "action_entry" : { - "action_id" : 75, + "action_id" : 74, "action_data" : [] }, "priority" : 14 @@ -16277,7 +16159,7 @@ } ], "action_entry" : { - "action_id" : 76, + "action_id" : 75, "action_data" : [] }, "priority" : 15 @@ -16296,7 +16178,7 @@ } ], "action_entry" : { - "action_id" : 77, + "action_id" : 76, "action_data" : [] }, "priority" : 16 @@ -16305,7 +16187,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 46, + "id" : 43, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -16326,30 +16208,30 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 59], + "action_ids" : [77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 58], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_act_20", + "base_default_next" : "tbl_act_18", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_20", - "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_20", - "NoAction" : "tbl_act_20" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_18", + "NoAction" : "tbl_act_18" }, "default_entry" : { - "action_id" : 59, + "action_id" : 58, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -16369,7 +16251,7 @@ } ], "action_entry" : { - "action_id" : 78, + "action_id" : 77, "action_data" : [] }, "priority" : 1 @@ -16388,7 +16270,7 @@ } ], "action_entry" : { - "action_id" : 79, + "action_id" : 78, "action_data" : [] }, "priority" : 2 @@ -16407,7 +16289,7 @@ } ], "action_entry" : { - "action_id" : 80, + "action_id" : 79, "action_data" : [] }, "priority" : 3 @@ -16426,7 +16308,7 @@ } ], "action_entry" : { - "action_id" : 81, + "action_id" : 80, "action_data" : [] }, "priority" : 4 @@ -16445,7 +16327,7 @@ } ], "action_entry" : { - "action_id" : 82, + "action_id" : 81, "action_data" : [] }, "priority" : 5 @@ -16464,7 +16346,7 @@ } ], "action_entry" : { - "action_id" : 83, + "action_id" : 82, "action_data" : [] }, "priority" : 6 @@ -16483,7 +16365,7 @@ } ], "action_entry" : { - "action_id" : 84, + "action_id" : 83, "action_data" : [] }, "priority" : 7 @@ -16502,7 +16384,7 @@ } ], "action_entry" : { - "action_id" : 85, + "action_id" : 84, "action_data" : [] }, "priority" : 8 @@ -16521,7 +16403,7 @@ } ], "action_entry" : { - "action_id" : 86, + "action_id" : 85, "action_data" : [] }, "priority" : 9 @@ -16540,7 +16422,7 @@ } ], "action_entry" : { - "action_id" : 87, + "action_id" : 86, "action_data" : [] }, "priority" : 10 @@ -16559,7 +16441,7 @@ } ], "action_entry" : { - "action_id" : 88, + "action_id" : 87, "action_data" : [] }, "priority" : 11 @@ -16578,7 +16460,7 @@ } ], "action_entry" : { - "action_id" : 89, + "action_id" : 88, "action_data" : [] }, "priority" : 12 @@ -16597,7 +16479,7 @@ } ], "action_entry" : { - "action_id" : 90, + "action_id" : 89, "action_data" : [] }, "priority" : 13 @@ -16616,7 +16498,7 @@ } ], "action_entry" : { - "action_id" : 91, + "action_id" : 90, "action_data" : [] }, "priority" : 14 @@ -16635,7 +16517,7 @@ } ], "action_entry" : { - "action_id" : 92, + "action_id" : 91, "action_data" : [] }, "priority" : 15 @@ -16654,7 +16536,7 @@ } ], "action_entry" : { - "action_id" : 93, + "action_id" : 92, "action_data" : [] }, "priority" : 16 @@ -16662,8 +16544,8 @@ ] }, { - "name" : "tbl_act_20", - "id" : 47, + "name" : "tbl_act_18", + "id" : 44, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -16677,22 +16559,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [112], - "actions" : ["act_21"], - "base_default_next" : "node_86", + "action_ids" : [110], + "actions" : ["act_19"], + "base_default_next" : "node_81", "next_tables" : { - "act_21" : "node_86" + "act_19" : "node_81" }, "default_entry" : { - "action_id" : 112, + "action_id" : 110, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_21", - "id" : 48, + "name" : "tbl_act_19", + "id" : 45, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -16706,22 +16588,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [111], - "actions" : ["act_20"], - "base_default_next" : "node_88", + "action_ids" : [109], + "actions" : ["act_18"], + "base_default_next" : "node_83", "next_tables" : { - "act_20" : "node_88" + "act_18" : "node_83" }, "default_entry" : { - "action_id" : 111, + "action_id" : 109, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_22", - "id" : 49, + "name" : "tbl_act_20", + "id" : 46, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -16735,22 +16617,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [113], - "actions" : ["act_22"], - "base_default_next" : "node_90", + "action_ids" : [111], + "actions" : ["act_20"], + "base_default_next" : "node_85", "next_tables" : { - "act_22" : "node_90" + "act_20" : "node_85" }, "default_entry" : { - "action_id" : 113, + "action_id" : 111, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_act_23", - "id" : 50, + "name" : "tbl_act_21", + "id" : 47, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -16764,14 +16646,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [114], - "actions" : ["act_23"], + "action_ids" : [112], + "actions" : ["act_21"], "base_default_next" : null, "next_tables" : { - "act_23" : null + "act_21" : null }, "default_entry" : { - "action_id" : 114, + "action_id" : 112, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -16844,7 +16726,7 @@ "id" : 17, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -16897,7 +16779,7 @@ "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -16923,7 +16805,7 @@ "id" : 19, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -16942,67 +16824,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_58", + "name" : "node_56", "id" : 20, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_59", - "false_next" : "node_61" - }, - { - "name" : "node_59", - "id" : 21, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan", - "false_next" : "node_61" - }, - { - "name" : "node_61", - "id" : 22, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -17017,15 +16843,15 @@ } } }, - "true_next" : "tbl_act_13", - "false_next" : "node_65" + "true_next" : "tbl_act_11", + "false_next" : "node_60" }, { - "name" : "node_63", - "id" : 23, + "name" : "node_58", + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -17043,15 +16869,15 @@ } } }, - "true_next" : "tbl_act_14", - "false_next" : "node_69" + "true_next" : "tbl_act_12", + "false_next" : "node_64" }, { - "name" : "node_65", - "id" : 24, + "name" : "node_60", + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -17086,15 +16912,15 @@ } } }, - "true_next" : "tbl_act_15", - "false_next" : "node_69" + "true_next" : "tbl_act_13", + "false_next" : "node_64" }, { - "name" : "node_67", - "id" : 25, + "name" : "node_62", + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -17112,12 +16938,12 @@ } } }, - "true_next" : "tbl_act_16", - "false_next" : "node_69" + "true_next" : "tbl_act_14", + "false_next" : "node_64" }, { - "name" : "node_69", - "id" : 26, + "name" : "node_64", + "id" : 24, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 328, @@ -17145,12 +16971,12 @@ } } }, - "true_next" : "node_70", - "false_next" : "node_74" + "true_next" : "node_65", + "false_next" : "node_69" }, { - "name" : "node_70", - "id" : 27, + "name" : "node_65", + "id" : 25, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 329, @@ -17179,11 +17005,11 @@ } }, "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_72" + "false_next" : "node_67" }, { - "name" : "node_72", - "id" : 28, + "name" : "node_67", + "id" : 26, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 332, @@ -17211,12 +17037,12 @@ } } }, - "true_next" : "tbl_act_17", - "false_next" : "node_74" + "true_next" : "tbl_act_15", + "false_next" : "node_69" }, { - "name" : "node_74", - "id" : 29, + "name" : "node_69", + "id" : 27, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -17292,11 +17118,11 @@ } }, "false_next" : null, - "true_next" : "node_75" + "true_next" : "node_70" }, { - "name" : "node_75", - "id" : 30, + "name" : "node_70", + "id" : 28, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 106, @@ -17325,11 +17151,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_77" + "false_next" : "node_72" }, { - "name" : "node_77", - "id" : 31, + "name" : "node_72", + "id" : 29, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -17348,11 +17174,11 @@ } }, "false_next" : null, - "true_next" : "tbl_act_18" + "true_next" : "tbl_act_16" }, { - "name" : "node_80", - "id" : 32, + "name" : "node_75", + "id" : 30, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -17380,12 +17206,12 @@ } } }, - "true_next" : "tbl_act_19", - "false_next" : "node_82" + "true_next" : "tbl_act_17", + "false_next" : "node_77" }, { - "name" : "node_82", - "id" : 33, + "name" : "node_77", + "id" : 31, "expression" : { "type" : "expression", "value" : { @@ -17408,8 +17234,8 @@ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" }, { - "name" : "node_86", - "id" : 34, + "name" : "node_81", + "id" : 32, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -17427,12 +17253,12 @@ } } }, - "true_next" : "tbl_act_21", - "false_next" : "node_88" + "true_next" : "tbl_act_19", + "false_next" : "node_83" }, { - "name" : "node_88", - "id" : 35, + "name" : "node_83", + "id" : 33, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -17450,12 +17276,12 @@ } } }, - "true_next" : "tbl_act_22", - "false_next" : "node_90" + "true_next" : "tbl_act_20", + "false_next" : "node_85" }, { - "name" : "node_90", - "id" : 36, + "name" : "node_85", + "id" : 34, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -17474,7 +17300,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_23" + "true_next" : "tbl_act_21" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt index 100c35a7c24..c658bdd75d0 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -573,15 +573,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -722,7 +725,7 @@ actions { preamble { id: 16820765 name: "FabricIngress.acl.drop" - alias: "drop" + alias: "acl.drop" } } actions { @@ -1012,6 +1015,13 @@ actions { bitwidth: 32 } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -1019,6 +1029,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index 036ea1d62a7..8f5381e4473 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -4,13 +4,12 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["tmp_0", 16, false], ["tmp_1", 16, false], - ["tmp_2", 16, false], - ["tmp_3", 4, false], + ["tmp_2", 4, false], ["tmp", 32, false], - ["tmp_0", 32, false], + ["tmp_3", 32, false], ["spgw_tmp", 1, false], - ["egress_next_tmp", 1, false], ["fabric_metadata_t._ip_eth_type0", 16, false], ["fabric_metadata_t._vlan_id1", 12, false], ["fabric_metadata_t._vlan_pri2", 3, false], @@ -43,7 +42,7 @@ ["fabric_metadata_t._spgw_needs_gtpu_encap29", 1, false], ["fabric_metadata_t._spgw_needs_gtpu_decap30", 1, false], ["fabric_metadata_t._spgw_skip_egress_pdr_ctr31", 1, false], - ["_padding_0", 2, false] + ["_padding_0", 3, false] ] }, { @@ -464,7 +463,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -502,7 +501,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -523,7 +522,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -549,7 +548,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -659,7 +658,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] }, { "type" : "lookahead", @@ -685,7 +684,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_2"] } ] }, @@ -1193,7 +1192,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -5374,7 +5373,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -5410,7 +5409,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -5422,15 +5421,9 @@ } ] }, - { - "name" : "nop", - "id" : 53, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 54, + "id" : 53, "runtime_data" : [], "primitives" : [ { @@ -5471,7 +5464,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 55, + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -5588,7 +5581,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 56, + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -5686,7 +5679,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 57, + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -5699,13 +5692,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "FabricEgress.spgw.gtpu_encap", "id" : 58, @@ -6381,7 +6396,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -6392,66 +6407,6 @@ "name" : "act_11", "id" : 62, "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_12", - "id" : 63, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_13", - "id" : 64, - "runtime_data" : [], "primitives" : [ { "op" : "mark_to_drop", @@ -6463,7 +6418,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -6471,8 +6426,8 @@ ] }, { - "name" : "act_14", - "id" : 65, + "name" : "act_12", + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -6512,7 +6467,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -6520,8 +6475,8 @@ ] }, { - "name" : "act_15", - "id" : 66, + "name" : "act_13", + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -6534,7 +6489,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -6542,8 +6497,8 @@ ] }, { - "name" : "act_16", - "id" : 67, + "name" : "act_14", + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -6583,7 +6538,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -6591,8 +6546,8 @@ ] }, { - "name" : "act_17", - "id" : 68, + "name" : "act_15", + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -8300,7 +8255,7 @@ "id" : 27, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -8329,7 +8284,7 @@ "id" : 28, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -8340,14 +8295,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], + "action_ids" : [53], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 54, + "action_id" : 53, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8358,7 +8313,7 @@ "id" : 29, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -8369,14 +8324,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], + "action_ids" : [54], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 55, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8387,7 +8342,7 @@ "id" : 30, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -8411,15 +8366,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57, 53], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [55, 56, 57], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_55", "next_tables" : { - "__HIT__" : "tbl_act_11", - "__MISS__" : "tbl_act_12" + "FabricEgress.egress_next.push_vlan" : "node_55", + "FabricEgress.egress_next.pop_vlan" : "node_55", + "FabricEgress.egress_next.drop" : "node_55" }, "default_entry" : { - "action_id" : 53, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8428,29 +8384,12 @@ { "name" : "tbl_act_11", "id" : 31, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [62], - "actions" : ["act_11"], - "base_default_next" : "node_57", - "next_tables" : { - "act_11" : "node_57" + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" }, - "default_entry" : { - "action_id" : 62, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_12", - "id" : 32, "key" : [], "match_type" : "exact", "type" : "simple", @@ -8472,13 +8411,13 @@ } }, { - "name" : "tbl_egress_next_push_vlan", - "id" : 33, + "name" : "tbl_act_12", + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -8487,14 +8426,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_60", + "action_ids" : [62], + "actions" : ["act_11"], + "base_default_next" : "node_63", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_60" + "act_11" : "node_63" }, "default_entry" : { - "action_id" : 56, + "action_id" : 62, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8502,11 +8441,11 @@ }, { "name" : "tbl_act_13", - "id" : 34, + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, + "line" : 379, + "column" : 29, "source_fragment" : "=" }, "key" : [], @@ -8518,9 +8457,9 @@ "direct_meters" : null, "action_ids" : [65], "actions" : ["act_14"], - "base_default_next" : "node_62", + "base_default_next" : "node_61", "next_tables" : { - "act_14" : "node_62" + "act_14" : "node_61" }, "default_entry" : { "action_id" : 65, @@ -8531,11 +8470,11 @@ }, { "name" : "tbl_act_14", - "id" : 35, + "id" : 34, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -8547,9 +8486,9 @@ "direct_meters" : null, "action_ids" : [64], "actions" : ["act_13"], - "base_default_next" : "node_68", + "base_default_next" : "node_63", "next_tables" : { - "act_13" : "node_68" + "act_13" : "node_63" }, "default_entry" : { "action_id" : 64, @@ -8558,67 +8497,9 @@ "action_entry_const" : true } }, - { - "name" : "tbl_act_15", - "id" : 36, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [67], - "actions" : ["act_16"], - "base_default_next" : "node_66", - "next_tables" : { - "act_16" : "node_66" - }, - "default_entry" : { - "action_id" : 67, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_16", - "id" : 37, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [66], - "actions" : ["act_15"], - "base_default_next" : "node_68", - "next_tables" : { - "act_15" : "node_68" - }, - "default_entry" : { - "action_id" : 66, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, { "name" : "tbl_spgw_gtpu_encap", - "id" : 38, + "id" : 35, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 330, @@ -8634,9 +8515,9 @@ "direct_meters" : null, "action_ids" : [58], "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_71", + "base_default_next" : "node_66", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_71" + "FabricEgress.spgw.gtpu_encap" : "node_66" }, "default_entry" : { "action_id" : 58, @@ -8646,8 +8527,8 @@ } }, { - "name" : "tbl_act_17", - "id" : 39, + "name" : "tbl_act_15", + "id" : 36, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 333, @@ -8661,14 +8542,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68], - "actions" : ["act_17"], + "action_ids" : [66], + "actions" : ["act_15"], "base_default_next" : null, "next_tables" : { - "act_17" : null + "act_15" : null }, "default_entry" : { - "action_id" : 68, + "action_id" : 66, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8741,7 +8622,7 @@ "id" : 17, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -8794,7 +8675,7 @@ "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -8820,7 +8701,7 @@ "id" : 19, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -8839,67 +8720,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_57", + "name" : "node_55", "id" : 20, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_58", - "false_next" : "node_60" - }, - { - "name" : "node_58", - "id" : 21, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t._vlan_id1"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan", - "false_next" : "node_60" - }, - { - "name" : "node_60", - "id" : 22, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -8914,15 +8739,15 @@ } } }, - "true_next" : "tbl_act_13", - "false_next" : "node_64" + "true_next" : "tbl_act_11", + "false_next" : "node_59" }, { - "name" : "node_62", - "id" : 23, + "name" : "node_57", + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -8940,15 +8765,15 @@ } } }, - "true_next" : "tbl_act_14", - "false_next" : "node_68" + "true_next" : "tbl_act_12", + "false_next" : "node_63" }, { - "name" : "node_64", - "id" : 24, + "name" : "node_59", + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -8983,15 +8808,15 @@ } } }, - "true_next" : "tbl_act_15", - "false_next" : "node_68" + "true_next" : "tbl_act_13", + "false_next" : "node_63" }, { - "name" : "node_66", - "id" : 25, + "name" : "node_61", + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -9009,12 +8834,12 @@ } } }, - "true_next" : "tbl_act_16", - "false_next" : "node_68" + "true_next" : "tbl_act_14", + "false_next" : "node_63" }, { - "name" : "node_68", - "id" : 26, + "name" : "node_63", + "id" : 24, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 328, @@ -9043,11 +8868,11 @@ } }, "false_next" : null, - "true_next" : "node_69" + "true_next" : "node_64" }, { - "name" : "node_69", - "id" : 27, + "name" : "node_64", + "id" : 25, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 329, @@ -9076,11 +8901,11 @@ } }, "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_71" + "false_next" : "node_66" }, { - "name" : "node_71", - "id" : 28, + "name" : "node_66", + "id" : 26, "source_info" : { "filename" : "include/control/spgw.p4", "line" : 332, @@ -9109,7 +8934,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_17" + "true_next" : "tbl_act_15" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt index 13a2236b11a..aaee8be4ebe 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt @@ -484,15 +484,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -626,7 +629,7 @@ actions { preamble { id: 16820765 name: "FabricIngress.acl.drop" - alias: "drop" + alias: "acl.drop" } } actions { @@ -877,6 +880,13 @@ actions { bitwidth: 32 } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -884,6 +894,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index 2143288c898..f6c42ee7a3c 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -4,12 +4,11 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["tmp", 16, false], ["tmp_0", 16, false], - ["tmp_1", 16, false], - ["tmp_2", 4, false], - ["tmp", 32, false], + ["tmp_1", 4, false], + ["tmp_2", 32, false], ["tmp_3", 32, false], - ["egress_next_tmp", 1, false], ["fabric_metadata_t.ip_eth_type", 16, false], ["fabric_metadata_t.vlan_id", 12, false], ["fabric_metadata_t.vlan_pri", 3, false], @@ -26,7 +25,8 @@ ["fabric_metadata_t.l4_sport", 16, false], ["fabric_metadata_t.l4_dport", 16, false], ["fabric_metadata_t.ipv4_src_addr", 32, false], - ["fabric_metadata_t.ipv4_dst_addr", 32, false] + ["fabric_metadata_t.ipv4_dst_addr", 32, false], + ["_padding_0", 1, false] ] }, { @@ -376,7 +376,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] }, { "type" : "lookahead", @@ -414,7 +414,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp"] } ] }, @@ -435,7 +435,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] }, { "type" : "lookahead", @@ -461,7 +461,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -571,7 +571,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] }, { "type" : "lookahead", @@ -597,7 +597,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_1"] } ] }, @@ -983,7 +983,7 @@ "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, + "line" : 314, "column" : 50, "source_fragment" : "egress_vlan_counter" } @@ -2124,7 +2124,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -2160,7 +2160,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -2230,15 +2230,9 @@ } ] }, - { - "name" : "nop", - "id" : 32, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 33, + "id" : 32, "runtime_data" : [], "primitives" : [ { @@ -2279,7 +2273,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 34, + "id" : 33, "runtime_data" : [], "primitives" : [ { @@ -2396,7 +2390,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 35, + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -2494,7 +2488,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 36, + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -2507,13 +2501,35 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 316, + "line" : 322, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } } ] }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 36, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, { "name" : "act_4", "id" : 37, @@ -2597,7 +2613,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -2608,66 +2624,6 @@ "name" : "act_7", "id" : 40, "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ] - } - ] - }, - { - "name" : "act_8", - "id" : 41, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "act_9", - "id" : 42, - "runtime_data" : [], "primitives" : [ { "op" : "mark_to_drop", @@ -2679,7 +2635,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 35, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -2687,8 +2643,8 @@ ] }, { - "name" : "act_10", - "id" : 43, + "name" : "act_8", + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -2728,7 +2684,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, + "line" : 375, "column" : 12, "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" } @@ -2736,8 +2692,8 @@ ] }, { - "name" : "act_11", - "id" : 44, + "name" : "act_9", + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -2750,7 +2706,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -2758,8 +2714,8 @@ ] }, { - "name" : "act_12", - "id" : 45, + "name" : "act_10", + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -2799,7 +2755,7 @@ ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 373, + "line" : 379, "column" : 16, "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" } @@ -3832,7 +3788,7 @@ "id" : 17, "source_info" : { "filename" : "include/control/next.p4", - "line" : 337, + "line" : 349, "column" : 12, "source_fragment" : "mark_to_drop(standard_metadata)" }, @@ -3861,7 +3817,7 @@ "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 36, "source_fragment" : "pop_mpls_if_present()" }, @@ -3872,14 +3828,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [33], + "action_ids" : [32], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 33, + "action_id" : 32, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -3890,7 +3846,7 @@ "id" : 19, "source_info" : { "filename" : "include/control/next.p4", - "line" : 343, + "line" : 355, "column" : 12, "source_fragment" : "set_mpls()" }, @@ -3901,14 +3857,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [34], + "action_ids" : [33], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 34, + "action_id" : 33, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -3919,7 +3875,7 @@ "id" : 20, "source_info" : { "filename" : "include/control/next.p4", - "line" : 320, + "line" : 331, "column" : 10, "source_fragment" : "egress_vlan" }, @@ -3943,15 +3899,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36, 32], - "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : null, + "action_ids" : [34, 35, 36], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_40", "next_tables" : { - "__HIT__" : "tbl_act_7", - "__MISS__" : "tbl_act_8" + "FabricEgress.egress_next.push_vlan" : "node_40", + "FabricEgress.egress_next.pop_vlan" : "node_40", + "FabricEgress.egress_next.drop" : "node_40" }, "default_entry" : { - "action_id" : 32, + "action_id" : 36, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -3960,29 +3917,12 @@ { "name" : "tbl_act_7", "id" : 21, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [40], - "actions" : ["act_7"], - "base_default_next" : "node_42", - "next_tables" : { - "act_7" : "node_42" + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 375, + "column" : 25, + "source_fragment" : "=" }, - "default_entry" : { - "action_id" : 40, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_8", - "id" : 22, "key" : [], "match_type" : "exact", "type" : "simple", @@ -4004,13 +3944,13 @@ } }, { - "name" : "tbl_egress_next_push_vlan", - "id" : 23, + "name" : "tbl_act_8", + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", - "line" : 360, - "column" : 20, - "source_fragment" : "push_vlan()" + "line" : 376, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], "match_type" : "exact", @@ -4019,14 +3959,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [35], - "actions" : ["FabricEgress.egress_next.push_vlan"], - "base_default_next" : "node_45", + "action_ids" : [40], + "actions" : ["act_7"], + "base_default_next" : null, "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_45" + "act_7" : null }, "default_entry" : { - "action_id" : 35, + "action_id" : 40, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -4034,11 +3974,11 @@ }, { "name" : "tbl_act_9", - "id" : 24, + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", - "line" : 369, - "column" : 25, + "line" : 379, + "column" : 29, "source_fragment" : "=" }, "key" : [], @@ -4050,9 +3990,9 @@ "direct_meters" : null, "action_ids" : [43], "actions" : ["act_10"], - "base_default_next" : "node_47", + "base_default_next" : "node_46", "next_tables" : { - "act_10" : "node_47" + "act_10" : "node_46" }, "default_entry" : { "action_id" : 43, @@ -4063,11 +4003,11 @@ }, { "name" : "tbl_act_10", - "id" : 25, + "id" : 24, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, - "column" : 35, + "line" : 380, + "column" : 39, "source_fragment" : "mark_to_drop(standard_metadata)" }, "key" : [], @@ -4089,64 +4029,6 @@ "action_data" : [], "action_entry_const" : true } - }, - { - "name" : "tbl_act_11", - "id" : 26, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 373, - "column" : 29, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [45], - "actions" : ["act_12"], - "base_default_next" : "node_51", - "next_tables" : { - "act_12" : "node_51" - }, - "default_entry" : { - "action_id" : 45, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_12", - "id" : 27, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 374, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [44], - "actions" : ["act_11"], - "base_default_next" : null, - "next_tables" : { - "act_11" : null - }, - "default_entry" : { - "action_id" : 44, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } } ], "action_profiles" : [], @@ -4215,7 +4097,7 @@ "id" : 12, "source_info" : { "filename" : "include/control/next.p4", - "line" : 335, + "line" : 347, "column" : 12, "source_fragment" : "fabric_metadata.is_multicast == true ..." }, @@ -4268,7 +4150,7 @@ "id" : 13, "source_info" : { "filename" : "include/control/next.p4", - "line" : 340, + "line" : 352, "column" : 12, "source_fragment" : "fabric_metadata.mpls_label == 0" }, @@ -4294,7 +4176,7 @@ "id" : 14, "source_info" : { "filename" : "include/control/next.p4", - "line" : 341, + "line" : 353, "column" : 16, "source_fragment" : "hdr.mpls.isValid()" }, @@ -4313,67 +4195,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_42", + "name" : "node_40", "id" : 15, "source_info" : { "filename" : "include/control/next.p4", - "line" : 357, - "column" : 16, - "source_fragment" : "!egress_vlan.apply().hit" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "not", - "left" : null, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "egress_next_tmp"] - } - } - } - } - }, - "true_next" : "node_43", - "false_next" : "node_45" - }, - { - "name" : "node_43", - "id" : 16, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 359, - "column" : 20, - "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t.vlan_id"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0ffe" - } - } - }, - "true_next" : "tbl_egress_next_push_vlan", - "false_next" : "node_45" - }, - { - "name" : "node_45", - "id" : 17, - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 368, + "line" : 374, "column" : 12, "source_fragment" : "hdr.mpls.isValid()" }, @@ -4388,15 +4214,15 @@ } } }, - "true_next" : "tbl_act_9", - "false_next" : "node_49" + "true_next" : "tbl_act_7", + "false_next" : "node_44" }, { - "name" : "node_47", - "id" : 18, + "name" : "node_42", + "id" : 16, "source_info" : { "filename" : "include/control/next.p4", - "line" : 370, + "line" : 376, "column" : 16, "source_fragment" : "hdr.mpls.ttl == 0" }, @@ -4415,14 +4241,14 @@ } }, "false_next" : null, - "true_next" : "tbl_act_10" + "true_next" : "tbl_act_8" }, { - "name" : "node_49", - "id" : 19, + "name" : "node_44", + "id" : 17, "source_info" : { "filename" : "include/control/next.p4", - "line" : 372, + "line" : 378, "column" : 15, "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING" }, @@ -4458,14 +4284,14 @@ } }, "false_next" : null, - "true_next" : "tbl_act_11" + "true_next" : "tbl_act_9" }, { - "name" : "node_51", - "id" : 20, + "name" : "node_46", + "id" : 18, "source_info" : { "filename" : "include/control/next.p4", - "line" : 374, + "line" : 380, "column" : 20, "source_fragment" : "hdr.ipv4.ttl == 0" }, @@ -4484,7 +4310,7 @@ } }, "false_next" : null, - "true_next" : "tbl_act_12" + "true_next" : "tbl_act_10" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt index d036bed7af5..122ff9d64d2 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt @@ -381,15 +381,18 @@ tables { bitwidth: 9 match_type: EXACT } + action_refs { + id: 16807339 + } action_refs { id: 16790030 } action_refs { - id: 16819938 + id: 16787838 annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 16819938 + const_default_action_id: 16787838 direct_resource_ids: 318827144 size: 1024 } @@ -516,7 +519,7 @@ actions { preamble { id: 16820765 name: "FabricIngress.acl.drop" - alias: "drop" + alias: "acl.drop" } } actions { @@ -635,6 +638,13 @@ actions { bitwidth: 16 } } +actions { + preamble { + id: 16807339 + name: "FabricEgress.egress_next.push_vlan" + alias: "push_vlan" + } +} actions { preamble { id: 16790030 @@ -642,6 +652,13 @@ actions { alias: "pop_vlan" } } +actions { + preamble { + id: 16787838 + name: "FabricEgress.egress_next.drop" + alias: "egress_next.drop" + } +} action_profiles { preamble { id: 285217164 diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java index ffe6221c398..8dfe8873644 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; +import org.onosproject.net.PortNumber; import org.onosproject.net.flow.DefaultFlowRule; import org.onosproject.net.flow.DefaultTrafficSelector; import org.onosproject.net.flow.DefaultTrafficTreatment; @@ -45,6 +46,7 @@ import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort; /** * Test cases for fabric.p4 pipeline next control block. @@ -197,10 +199,35 @@ private void testSimple(TrafficTreatment treatment, PiAction piAction) throws Fa .withTreatment(DefaultTrafficTreatment.builder() .piTableAction(piAction).build()) .build(); + // Expected egress VLAN_PUSH flow rule. + final PortNumber outPort = outputPort(treatment); + PiCriterion egressVlanTableMatch = PiCriterion.builder() + .matchExact(FabricConstants.HDR_EG_PORT, outPort.toLong()) + .build(); + TrafficSelector selectorForEgressVlan = DefaultTrafficSelector.builder() + .matchPi(egressVlanTableMatch) + .matchVlanId(VLAN_100) + .build(); + PiAction piActionForEgressVlan = PiAction.builder() + .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_PUSH_VLAN) + .build(); + TrafficTreatment treatmentForEgressVlan = DefaultTrafficTreatment.builder() + .piTableAction(piActionForEgressVlan) + .build(); + FlowRule expectedEgressVlanPushRule = DefaultFlowRule.builder() + .withSelector(selectorForEgressVlan) + .withTreatment(treatmentForEgressVlan) + .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN) + .makePermanent() + .withPriority(nextObjective.priority()) + .forDevice(DEVICE_ID) + .fromApp(APP_ID) + .build(); ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder() .addFlowRule(vlanMetaFlowRule) .addFlowRule(expectedFlowRule) + .addFlowRule(expectedEgressVlanPushRule) .build(); assertEquals(expectedTranslation, actualTranslation); @@ -438,21 +465,44 @@ public void testBroadcastOutput() throws FabricPipelinerException { .withTreatment(treatment) .build(); - // Expected egress VLAN POP flow rule. + // Expected egress VLAN_PUSH flow rule. PiCriterion egressVlanTableMatch = PiCriterion.builder() - .matchExact(FabricConstants.HDR_EG_PORT, PORT_2.toLong()) + .matchExact(FabricConstants.HDR_EG_PORT, PORT_1.toLong()) .build(); TrafficSelector selectorForEgressVlan = DefaultTrafficSelector.builder() .matchPi(egressVlanTableMatch) .matchVlanId(VLAN_100) .build(); PiAction piActionForEgressVlan = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN) + .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_PUSH_VLAN) .build(); TrafficTreatment treatmentForEgressVlan = DefaultTrafficTreatment.builder() .piTableAction(piActionForEgressVlan) .build(); - FlowRule expectedEgressVlanRule = DefaultFlowRule.builder() + FlowRule expectedEgressVlanPushRule = DefaultFlowRule.builder() + .withSelector(selectorForEgressVlan) + .withTreatment(treatmentForEgressVlan) + .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN) + .makePermanent() + .withPriority(nextObjective.priority()) + .forDevice(DEVICE_ID) + .fromApp(APP_ID) + .build(); + // Expected egress VLAN POP flow rule. + egressVlanTableMatch = PiCriterion.builder() + .matchExact(FabricConstants.HDR_EG_PORT, PORT_2.toLong()) + .build(); + selectorForEgressVlan = DefaultTrafficSelector.builder() + .matchPi(egressVlanTableMatch) + .matchVlanId(VLAN_100) + .build(); + piActionForEgressVlan = PiAction.builder() + .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN) + .build(); + treatmentForEgressVlan = DefaultTrafficTreatment.builder() + .piTableAction(piActionForEgressVlan) + .build(); + FlowRule expectedEgressVlanPopRule = DefaultFlowRule.builder() .withSelector(selectorForEgressVlan) .withTreatment(treatmentForEgressVlan) .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN) @@ -488,7 +538,8 @@ public void testBroadcastOutput() throws FabricPipelinerException { ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder() .addFlowRule(expectedHashedFlowRule) .addFlowRule(vlanMetaFlowRule) - .addFlowRule(expectedEgressVlanRule) + .addFlowRule(expectedEgressVlanPushRule) + .addFlowRule(expectedEgressVlanPopRule) .addGroup(expectedAllGroup) .build(); From 135cb7a3fd3f423aeeaf03fad76c71e4f97fb249 Mon Sep 17 00:00:00 2001 From: Anurag Chadha Date: Fri, 4 Dec 2020 19:48:56 +0530 Subject: [PATCH 013/235] [ONOS-8129] Bug fixed for duplicate events when netconf device goes down along with some fixes for NPE in NetconfControllerImpl Change-Id: I4ea6100ce4c4e56ff8219cf846f107f49c50cd2d --- .../netconf/NetconfController.java | 13 ++++ .../ctl/impl/NetconfControllerImpl.java | 26 ++++++- .../device/impl/NetconfDeviceProvider.java | 67 +++++++++++-------- 3 files changed, 77 insertions(+), 29 deletions(-) diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfController.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfController.java index daf92fa8dbc..c7e89237df7 100644 --- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfController.java +++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfController.java @@ -140,6 +140,19 @@ default CompletableFuture executeAtMaster(NetconfProxyMessage proxyMessag return errorFuture; } + /** + * If master, will execute the call locally else will use + * clusterCommunicationManager to execute at master controller. + * Meant only for internal synchronization and not to be used by applications. + * + * @param deviceId deviceId of device + * @param for handling reply of generic type + * @return true or false + */ + default boolean pingDevice(DeviceId deviceId) { + return false; + } + /** * Get a contoller node Id . * diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java index 90f6d146121..c32004c248c 100644 --- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java +++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java @@ -558,6 +558,27 @@ public CompletableFuture executeAtMaster(NetconfProxyMessage proxyMessage } } + @Override + public boolean pingDevice(DeviceId deviceId) { + NetconfProxyMessage proxyMessage = new DefaultNetconfProxyMessage( + NetconfProxyMessage.SubjectType.GET_DEVICE_CAPABILITIES_SET, deviceId, null, localNodeId); + CompletableFuture reply; + if (deviceService.getRole(deviceId).equals(MastershipRole.MASTER)) { + reply = handleProxyMessage(proxyMessage); + } else { + reply = relayMessageToMaster(proxyMessage); + } + try { + T deviceCapabilities = reply.get(); + log.debug("Get device capabilities from device : {} -> {}", deviceId, deviceCapabilities); + } catch (InterruptedException | ExecutionException e) { + log.error("Error while getting device capabilities for device : {}", deviceId); + log.error("Error details : ", e); + return false; + } + return true; + } + public CompletableFuture relayMessageToMaster(NetconfProxyMessage proxyMessage) { DeviceId deviceId = proxyMessage.deviceId(); @@ -592,6 +613,7 @@ public CompletableFuture relayMessageToMaster(NetconfProxyMessage proxyMe } private CompletableFuture handleProxyMessage(NetconfProxyMessage proxyMessage) { + countDownLatch = new CountDownLatch(1); try { switch (proxyMessage.subjectType()) { case GET_DEVICE_CAPABILITIES_SET: @@ -639,7 +661,7 @@ public T handleIncomingMessage(NetconfProxyMessage proxyMessage) throws Netc NetconfProxyMessage.SubjectType subjectType = proxyMessage.subjectType(); NetconfSession secureTransportSession; - if (netconfDeviceMap.get(deviceId).isMasterSession()) { + if (netconfDeviceMap.get(deviceId) != null && netconfDeviceMap.get(deviceId).isMasterSession()) { secureTransportSession = netconfDeviceMap.get(deviceId).getSession(); } else { throw new NetconfException("Ssh session not present"); @@ -709,7 +731,7 @@ public Set handleIncomingSetMessage(NetconfProxyMessage proxyMessage) th NetconfProxyMessage.SubjectType subjectType = proxyMessage.subjectType(); NetconfSession secureTransportSession; - if (netconfDeviceMap.get(deviceId).isMasterSession()) { + if (netconfDeviceMap.get(deviceId) != null && netconfDeviceMap.get(deviceId).isMasterSession()) { secureTransportSession = netconfDeviceMap.get(deviceId).getSession(); } else { throw new NetconfException("SSH session not present"); diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java index 9ff800284f5..2a0533f3276 100644 --- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java +++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java @@ -320,6 +320,15 @@ public void roleChanged(DeviceId deviceId, MastershipRole newRole) { } } + @Override + public boolean isAvailable(DeviceId deviceId) { + boolean isReachable = isTcpConnectionAvailable(deviceId); + if (isReachable) { + return controller.pingDevice(deviceId); + } + return false; + } + @Override public boolean isReachable(DeviceId deviceId) { boolean sessionExists = @@ -332,33 +341,7 @@ public boolean isReachable(DeviceId deviceId) { //FIXME this is a workaround util device state is shared // between controller instances. - Device device = deviceService.getDevice(deviceId); - String ip; - int port; - if (device != null) { - ip = device.annotations().value(IPADDRESS); - port = Integer.parseInt(device.annotations().value(PORT)); - } else { - Triple> info = extractIpPortPath(deviceId); - ip = info.getLeft(); - port = info.getMiddle(); - } - // FIXME just opening TCP session probably is not the appropriate - // method to test reachability. - //test connection to device opening a socket to it. - log.debug("Testing reachability for {}:{}", ip, port); - Socket socket = new Socket(); - try { - socket.connect(new InetSocketAddress(ip, port), 1000); - log.debug("rechability of {}, {}, {}", deviceId, socket.isConnected(), !socket.isClosed()); - boolean isConnected = socket.isConnected() && !socket.isClosed(); - socket.close(); - return isConnected; - } catch (IOException e) { - log.info("Device {} is not reachable", deviceId); - log.debug(" error details", e); - return false; - } + return isTcpConnectionAvailable(deviceId); } @Override @@ -409,6 +392,36 @@ public void triggerDisconnect(DeviceId deviceId) { controller.disconnectDevice(deviceId, true); } + private boolean isTcpConnectionAvailable(DeviceId deviceId) { + Device device = deviceService.getDevice(deviceId); + String ip; + int port; + if (device != null) { + ip = device.annotations().value(IPADDRESS); + port = Integer.parseInt(device.annotations().value(PORT)); + } else { + Triple> info = extractIpPortPath(deviceId); + ip = info.getLeft(); + port = info.getMiddle(); + } + // FIXME just opening TCP session probably is not the appropriate + // method to test reachability. + //test connection to device opening a socket to it. + log.debug("Testing reachability for {}:{}", ip, port); + Socket socket = new Socket(); + try { + socket.connect(new InetSocketAddress(ip, port), 1000); + log.debug("rechability of {}, {}, {}", deviceId, socket.isConnected(), !socket.isClosed()); + boolean isConnected = socket.isConnected() && !socket.isClosed(); + socket.close(); + return isConnected; + } catch (IOException e) { + log.info("Device {} is not reachable", deviceId); + log.debug(" error details", e); + return false; + } + } + private ScheduledFuture schedulePolling() { return pollingExecutor.scheduleAtFixedRate(exceptionSafe(this::checkAndUpdateDevices), pollFrequency / 10, From 0bd777c3cb9b38314e3a9ec51c32c8b76b5dd097 Mon Sep 17 00:00:00 2001 From: Sean Condon Date: Fri, 1 Jan 2021 14:23:29 +0000 Subject: [PATCH 014/235] Upgraded to bazel 3.7.2 and rules_nodejs 2.3.2 Change-Id: If53686f2475c4f367909de577b4da95de8e16768 (cherry picked from commit 436c60a1f65d3c7dbdbd664c7b0e65f5362ef24d) --- .bazelignore | 1 + .bazelrc | 4 +- .bazelversion | 2 +- BUILD | 9 + WORKSPACE | 8 +- .../cpman/gui/CpmanViewMessageHandler.java | 1 + apps/faultmanagement/fm-gui2-lib/BUILD.bazel | 12 +- .../intApp-gui2/intApp/BUILD.bazel | 12 +- apps/roadm/web/roadm-gui/BUILD.bazel | 12 +- .../impl/VirtualNetworkDeviceManager.java | 4 +- apps/yang-gui/yang-gui2-lib/BUILD.bazel | 10 +- .../net/device/impl/DeviceManager.java | 4 +- .../net/region/impl/RegionManager.java | 4 +- .../net/topology/impl/TopologyManager.java | 6 +- .../mcast/impl/MulticastRouteManagerTest.java | 5 +- .../pi/impl/PiCriterionTranslatorsTest.java | 16 +- .../server/ServerControllerConfig.java | 6 +- tools/build/bazel/angular_workspace.bzl | 7 +- tools/gui/BUILD | 2 +- tools/gui/package-lock.json | 374 +- tools/gui/package.json | 2 +- .../web/__artifactId__-gui/WORKSPACE | 17 +- .../web/__artifactId__-gui/e2e/BUILD.rename | 4 +- .../web/__artifactId__-gui/src/BUILD.rename | 43 +- web/gui/BUILD | 10 +- web/gui2-fw-lib/BUILD.bazel | 36 +- .../lib/remote/websocket.service.ts | 2 +- .../lib/widget/detailspanel.base.ts | 9 +- web/gui2-topo-lib/BUILD.bazel | 13 +- web/gui2/BUILD | 4 +- web/gui2/README.md | 8 +- web/gui2/angular.json | 24 - web/gui2/package.json | 54 +- web/gui2/src/main/webapp/BUILD.bazel | 22 +- web/gui2/src/main/webapp/app/BUILD.bazel | 10 +- .../src/main/webapp/app/view/apps/BUILD.bazel | 12 +- .../main/webapp/app/view/cluster/BUILD.bazel | 12 +- .../main/webapp/app/view/device/BUILD.bazel | 12 +- .../src/main/webapp/app/view/flow/BUILD.bazel | 12 +- .../main/webapp/app/view/group/BUILD.bazel | 12 +- .../src/main/webapp/app/view/host/BUILD.bazel | 12 +- .../main/webapp/app/view/intent/BUILD.bazel | 12 +- .../src/main/webapp/app/view/link/BUILD.bazel | 12 +- .../main/webapp/app/view/meter/BUILD.bazel | 12 +- .../webapp/app/view/partition/BUILD.bazel | 12 +- .../main/webapp/app/view/pipeconf/BUILD.bazel | 12 +- .../src/main/webapp/app/view/port/BUILD.bazel | 12 +- .../webapp/app/view/processor/BUILD.bazel | 12 +- .../main/webapp/app/view/settings/BUILD.bazel | 12 +- .../main/webapp/app/view/tunnel/BUILD.bazel | 12 +- web/gui2/src/main/webapp/rollup.config.js | 8 +- web/gui2/src/main/webapp/terser.config.json | 11 + web/gui2/yarn.lock | 5259 +++++++++-------- 53 files changed, 3224 insertions(+), 2991 deletions(-) create mode 100644 .bazelignore delete mode 100644 web/gui2/angular.json create mode 100644 web/gui2/src/main/webapp/terser.config.json diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 00000000000..4ea82e8d97f --- /dev/null +++ b/.bazelignore @@ -0,0 +1 @@ +web/gui2/node_modules diff --git a/.bazelrc b/.bazelrc index e3d266a8a78..0d3b7999009 100644 --- a/.bazelrc +++ b/.bazelrc @@ -21,10 +21,12 @@ build --host_force_python=PY2 build --nouse_ijars build --experimental_strict_action_env +# For external/io_grpc_grpc_java/core/src/main/java/io/grpc/internal/RetriableStream.java +build --javacopt="-Xep:GuardedBy:WARN -Xep:ComparableType:WARN" + # intellij-bazel plugin needs this build --incompatible_new_actions_api=false build --incompatible_generated_protos_in_virtual_imports=false -build --incompatible_depset_union=false # For bazelbuild/rules_nodejs build --define=angular_ivy_enabled=True diff --git a/.bazelversion b/.bazelversion index 4a36342fcab..47b6be3fafe 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -3.0.0 +3.7.2 \ No newline at end of file diff --git a/BUILD b/BUILD index 4ec3f7e1d5a..1ac4159699d 100644 --- a/BUILD +++ b/BUILD @@ -184,6 +184,11 @@ buildifier( "./web/gui2/node_modules/@angular/bazel/src/esm5.bzl", "./web/gui2/node_modules/@bazel/typescript/internal/common/tsconfig.bzl", "./web/gui2/node_modules/@bazel/typescript/internal/common/compilation.bzl", + "./web/gui2/node_modules/@bazel/rollup/rollup_bundle.bzl", + "./web/gui2/node_modules/@bazel/typescript/internal/ts_project.bzl", + "./web/gui2/node_modules/@bazel/typescript/internal/build_defs.bzl", + "./web/gui2/node_modules/@bazel/protractor/protractor_web_test.bzl", + "./web/gui2/node_modules/@bazel/typescript/third_party/github.com/bazelbuild/bazel/src/main/protobuf/BUILD.bazel", ], mode = "check", ) @@ -195,6 +200,10 @@ buildifier( "./web/gui2/node_modules/@angular/bazel/src/esm5.bzl", "./web/gui2/node_modules/@bazel/typescript/internal/common/tsconfig.bzl", "./web/gui2/node_modules/@bazel/typescript/internal/common/compilation.bzl", + "./web/gui2/node_modules/@bazel/typescript/internal/ts_project.bzl", + "./web/gui2/node_modules/@bazel/typescript/internal/build_defs.bzl", + "./web/gui2/node_modules/@bazel/protractor/protractor_web_test.bzl", + "./web/gui2/node_modules/@bazel/typescript/third_party/github.com/bazelbuild/bazel/src/main/protobuf/BUILD.bazel", ], mode = "fix", ) diff --git a/WORKSPACE b/WORKSPACE index 2e11e8411e2..bb3caf71d54 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -124,9 +124,9 @@ load("//tools/build/bazel:gnoi_workspace.bzl", "generate_gnoi") generate_gnoi() # For GUI2 build -RULES_NODEJS_VERSION = "1.6.0" +RULES_NODEJS_VERSION = "2.3.2" -RULES_NODEJS_SHA256 = "f9e7b9f42ae202cc2d2ce6d698ccb49a9f7f7ea572a78fd451696d03ef2ee116" +RULES_NODEJS_SHA256 = "b3521b29c7cb0c47a1a735cce7e7e811a4f80d8e3720cf3a1b624533e4bb7cb6" load("//tools/build/bazel:topo_workspace.bzl", "generate_topo_device") @@ -161,6 +161,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install" # because "selenium-webdriver" which is required for "ng e2e" cannot be installed. node_repositories( node_repositories = { + "10.16.0-linux_arm64": ("node-v10.16.0-linux-arm64.tar.gz", "node-v10.16.0-linux-arm64", "2d84a777318bc95dd2a201ab8d700aea7e20641b3ece0c048399398dc645cbd7"), "10.16.0-darwin_amd64": ("node-v10.16.0-darwin-x64.tar.gz", "node-v10.16.0-darwin-x64", "6c009df1b724026d84ae9a838c5b382662e30f6c5563a0995532f2bece39fa9c"), "10.16.0-linux_amd64": ("node-v10.16.0-linux-x64.tar.xz", "node-v10.16.0-linux-x64", "1827f5b99084740234de0c506f4dd2202a696ed60f76059696747c34339b9d48"), "10.16.0-windows_amd64": ("node-v10.16.0-win-x64.zip", "node-v10.16.0-win-x64", "aa22cb357f0fb54ccbc06b19b60e37eefea5d7dd9940912675d3ed988bf9a059"), @@ -185,9 +186,6 @@ npm_install( # Install any Bazel rules which were extracted earlier by the npm_install rule. # Versions are set in web/gui2-fw-lib/package.json -load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") - -install_bazel_dependencies() RULES_WEBTESTING_VERSION = "0.3.3" diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java index 873d23dfddc..b3c1038f5a5 100644 --- a/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java +++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java @@ -100,6 +100,7 @@ protected void populateChart(ChartModel cm, ObjectNode payload) { DeviceId deviceId = DeviceId.deviceId(uri); if (cpms.availableResourcesSync(localNodeId, CONTROL_MESSAGE).contains(deviceId.toString())) { Map data = generateMatrix(cpms, cs, deviceId); + @SuppressWarnings("FromTemporalAccessor") LocalDateTime ldt = LocalDateTime.from(Instant.ofEpochMilli(timestamp * MILLI_CONV_UNIT)); populateMetrics(cm, data, ldt, NUM_OF_DATA_POINTS); diff --git a/apps/faultmanagement/fm-gui2-lib/BUILD.bazel b/apps/faultmanagement/fm-gui2-lib/BUILD.bazel index 66967777663..2a3fa358088 100644 --- a/apps/faultmanagement/fm-gui2-lib/BUILD.bazel +++ b/apps/faultmanagement/fm-gui2-lib/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "fm-gui2-lib", srcs = glob( include = [ @@ -28,14 +28,18 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel b/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel index aecef14c246..dd62c0897b0 100644 --- a/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel +++ b/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "intapp-gui2-lib", srcs = glob( include = [ @@ -28,14 +28,18 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/apps/roadm/web/roadm-gui/BUILD.bazel b/apps/roadm/web/roadm-gui/BUILD.bazel index dd6bd335ff8..b489b624603 100644 --- a/apps/roadm/web/roadm-gui/BUILD.bazel +++ b/apps/roadm/web/roadm-gui/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "roadm-gui", srcs = glob( include = [ @@ -28,14 +28,18 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java index 21ba3b92991..d64b5b810ad 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java @@ -142,7 +142,7 @@ public List getPortDeltaStatistics(DeviceId deviceId) { public PortStatistics getStatisticsForPort(DeviceId deviceId, PortNumber portNumber) { checkNotNull(deviceId, DEVICE_NULL); - checkNotNull(deviceId, PORT_NUMBER_NULL); + checkNotNull(portNumber, PORT_NUMBER_NULL); // TODO not supported at the moment. return null; } @@ -151,7 +151,7 @@ public PortStatistics getStatisticsForPort(DeviceId deviceId, public PortStatistics getDeltaStatisticsForPort(DeviceId deviceId, PortNumber portNumber) { checkNotNull(deviceId, DEVICE_NULL); - checkNotNull(deviceId, PORT_NUMBER_NULL); + checkNotNull(portNumber, PORT_NUMBER_NULL); // TODO not supported at the moment. return null; } diff --git a/apps/yang-gui/yang-gui2-lib/BUILD.bazel b/apps/yang-gui/yang-gui2-lib/BUILD.bazel index 2ba37148cb6..38d2e14a069 100644 --- a/apps/yang-gui/yang-gui2-lib/BUILD.bazel +++ b/apps/yang-gui/yang-gui2-lib/BUILD.bazel @@ -14,9 +14,10 @@ limitations under the License. """ +load("@npm//@bazel/typescript:index.bzl", "ts_library") + package(default_visibility = ["//:__subpackages__"]) -load("@npm_angular_bazel//:index.bzl", "ng_module") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") sass_binary( @@ -39,7 +40,7 @@ sass_binary( src = ":lib/yangdetails/yangdetails.theme.scss", ) -ng_module( +ts_library( name = "yang-gui2-lib", srcs = glob( include = [ @@ -49,18 +50,21 @@ ng_module( "**/*.spec.ts", ], ), - assets = [ + angular_assets = [ ":yangtable-styles", ":yangdetails-styles", ":yangtable-theme", ":yangdetails-theme", + "//web/gui2-fw-lib:extra_css", ] + glob([ "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index e40b14d1608..c7a31efa8f3 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -413,7 +413,7 @@ public void removeDevicePorts(DeviceId deviceId) { private void handlePortRequest(InternalPortUpDownEvent event) { DeviceId deviceId = event.deviceId(); checkNotNull(deviceId, DEVICE_ID_NULL); - checkNotNull(deviceId, PORT_NUMBER_NULL); + checkNotNull(event.portNumber(), PORT_NUMBER_NULL); checkState(mastershipService.isLocalMaster(deviceId), EVENT_NON_MASTER); changePortStateAtMaster(event.deviceId(), event.portNumber(), event.isEnable()); } @@ -435,7 +435,7 @@ private void changePortStateAtMaster(DeviceId deviceId, PortNumber portNumber, public void changePortState(DeviceId deviceId, PortNumber portNumber, boolean enable) { checkNotNull(deviceId, DEVICE_ID_NULL); - checkNotNull(deviceId, PORT_NUMBER_NULL); + checkNotNull(portNumber, PORT_NUMBER_NULL); NodeId masterId = mastershipService.getMasterFor(deviceId); if (masterId == null) { diff --git a/core/net/src/main/java/org/onosproject/net/region/impl/RegionManager.java b/core/net/src/main/java/org/onosproject/net/region/impl/RegionManager.java index c1b932752db..fa27c876a67 100644 --- a/core/net/src/main/java/org/onosproject/net/region/impl/RegionManager.java +++ b/core/net/src/main/java/org/onosproject/net/region/impl/RegionManager.java @@ -139,7 +139,7 @@ public Region createRegion(RegionId regionId, String name, Region.Type type, List> masterNodeIds) { checkNotNull(regionId, REGION_ID_NULL); checkNotNull(name, NAME_NULL); - checkNotNull(name, REGION_TYPE_NULL); + checkNotNull(type, REGION_TYPE_NULL); return store.createRegion(regionId, name, type, genAnnots(regionId), masterNodeIds == null ? of() : masterNodeIds); @@ -150,7 +150,7 @@ public Region updateRegion(RegionId regionId, String name, Region.Type type, List> masterNodeIds) { checkNotNull(regionId, REGION_ID_NULL); checkNotNull(name, NAME_NULL); - checkNotNull(name, REGION_TYPE_NULL); + checkNotNull(type, REGION_TYPE_NULL); return store.updateRegion(regionId, name, type, genAnnots(regionId), masterNodeIds == null ? of() : masterNodeIds); diff --git a/core/net/src/main/java/org/onosproject/net/topology/impl/TopologyManager.java b/core/net/src/main/java/org/onosproject/net/topology/impl/TopologyManager.java index d972601d7ad..280df9ea419 100644 --- a/core/net/src/main/java/org/onosproject/net/topology/impl/TopologyManager.java +++ b/core/net/src/main/java/org/onosproject/net/topology/impl/TopologyManager.java @@ -116,7 +116,7 @@ public Set getClusters(Topology topology) { public TopologyCluster getCluster(Topology topology, ClusterId clusterId) { checkPermission(TOPOLOGY_READ); checkNotNull(topology, TOPOLOGY_NULL); - checkNotNull(topology, CLUSTER_ID_NULL); + checkNotNull(clusterId, CLUSTER_ID_NULL); return store.getCluster(topology, clusterId); } @@ -124,7 +124,7 @@ public TopologyCluster getCluster(Topology topology, ClusterId clusterId) { public Set getClusterDevices(Topology topology, TopologyCluster cluster) { checkPermission(TOPOLOGY_READ); checkNotNull(topology, TOPOLOGY_NULL); - checkNotNull(topology, CLUSTER_NULL); + checkNotNull(cluster, CLUSTER_NULL); return store.getClusterDevices(topology, cluster); } @@ -132,7 +132,7 @@ public Set getClusterDevices(Topology topology, TopologyCluster cluste public Set getClusterLinks(Topology topology, TopologyCluster cluster) { checkPermission(TOPOLOGY_READ); checkNotNull(topology, TOPOLOGY_NULL); - checkNotNull(topology, CLUSTER_NULL); + checkNotNull(cluster, CLUSTER_NULL); return store.getClusterLinks(topology, cluster); } diff --git a/core/net/src/test/java/org/onosproject/net/mcast/impl/MulticastRouteManagerTest.java b/core/net/src/test/java/org/onosproject/net/mcast/impl/MulticastRouteManagerTest.java index f5b26c27462..9272668a762 100644 --- a/core/net/src/test/java/org/onosproject/net/mcast/impl/MulticastRouteManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/mcast/impl/MulticastRouteManagerTest.java @@ -34,6 +34,7 @@ import org.onosproject.net.mcast.McastRoute; import org.onosproject.store.service.TestStorageService; +import java.util.Arrays; import java.util.List; import static junit.framework.Assert.fail; @@ -141,13 +142,13 @@ public void testRemoveSink() { private void validateEvents(McastEvent.Type... evs) { if (events.size() != evs.length) { fail(String.format("Mismatch number of events# obtained -> %s : expected %s", - events, evs)); + events, Arrays.toString(evs))); } for (int i = 0; i < evs.length; i++) { if (evs[i] != events.get(i).type()) { fail(String.format("Mismatched events# obtained -> %s : expected %s", - events, evs)); + events, Arrays.toString(evs))); } } } diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiCriterionTranslatorsTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiCriterionTranslatorsTest.java index ee27ef2a244..ce3584f732b 100644 --- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiCriterionTranslatorsTest.java +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiCriterionTranslatorsTest.java @@ -319,7 +319,7 @@ public void testMplsBosCriterion() throws Exception { @Test public void testMplsCriterion() throws Exception { - MplsLabel mplsLabel = MplsLabel.mplsLabel(random.nextInt(2 ^ 20)); + MplsLabel mplsLabel = MplsLabel.mplsLabel(random.nextInt(1 << 20)); int bitWidth = 32; MplsCriterion criterion = (MplsCriterion) Criteria.matchMplsLabel(mplsLabel); @@ -357,9 +357,9 @@ public void testPbbIsidCriterion() throws Exception { @Test public void testSctpPortCriterion() throws Exception { - TpPort value1 = TpPort.tpPort(random.nextInt(2 ^ 16)); - TpPort value2 = TpPort.tpPort(random.nextInt(2 ^ 16)); - TpPort mask = TpPort.tpPort(random.nextInt(2 ^ 16)); + TpPort value1 = TpPort.tpPort(random.nextInt(1 << 16)); + TpPort value2 = TpPort.tpPort(random.nextInt(1 << 16)); + TpPort mask = TpPort.tpPort(random.nextInt(1 << 16)); int bitWidth = 16; @@ -377,7 +377,7 @@ public void testSctpPortCriterion() throws Exception { @Test public void testTcpFlagsCriterion() throws Exception { - int pbbIsid = random.nextInt(2 ^ 12); + int pbbIsid = random.nextInt(1 << 12); int bitWidth = 12; TcpFlagsCriterion criterion = (TcpFlagsCriterion) Criteria.matchTcpFlags(pbbIsid); @@ -389,9 +389,9 @@ public void testTcpFlagsCriterion() throws Exception { @Test public void testTcpPortCriterion() throws Exception { - TpPort value1 = TpPort.tpPort(random.nextInt(2 ^ 16)); - TpPort value2 = TpPort.tpPort(random.nextInt(2 ^ 16)); - TpPort mask = TpPort.tpPort(random.nextInt(2 ^ 16)); + TpPort value1 = TpPort.tpPort(random.nextInt(1 << 16)); + TpPort value2 = TpPort.tpPort(random.nextInt(1 << 16)); + TpPort mask = TpPort.tpPort(random.nextInt(1 << 16)); int bitWidth = 16; diff --git a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerControllerConfig.java b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerControllerConfig.java index 184b8b7d828..b3d3aa2f2e1 100644 --- a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerControllerConfig.java +++ b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerControllerConfig.java @@ -77,7 +77,7 @@ public List getControllers() { checkNotNull(deviceId, MSG_DEVICE_ID_NULL); MastershipService mastershipService = getHandler().get(MastershipService.class); - checkNotNull(deviceId, MSG_MASTERSHIP_NULL); + checkNotNull(mastershipService, MSG_MASTERSHIP_NULL); if (!mastershipService.isLocalMaster(deviceId)) { log.warn( @@ -158,7 +158,7 @@ public void setControllers(List controllers) { checkNotNull(deviceId, MSG_DEVICE_ID_NULL); MastershipService mastershipService = getHandler().get(MastershipService.class); - checkNotNull(deviceId, MSG_MASTERSHIP_NULL); + checkNotNull(mastershipService, MSG_MASTERSHIP_NULL); if (!mastershipService.isLocalMaster(deviceId)) { log.warn( @@ -203,7 +203,7 @@ public void removeControllers(List controllers) { checkNotNull(deviceId, MSG_DEVICE_ID_NULL); MastershipService mastershipService = getHandler().get(MastershipService.class); - checkNotNull(deviceId, MSG_MASTERSHIP_NULL); + checkNotNull(mastershipService, MSG_MASTERSHIP_NULL); if (!mastershipService.isLocalMaster(deviceId)) { log.warn( diff --git a/tools/build/bazel/angular_workspace.bzl b/tools/build/bazel/angular_workspace.bzl index 6369a0142c1..a1c4efe71e2 100644 --- a/tools/build/bazel/angular_workspace.bzl +++ b/tools/build/bazel/angular_workspace.bzl @@ -1,9 +1,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies") -load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies") +load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies") +load("@npm//@bazel/karma:package.bzl", "npm_bazel_karma_dependencies") load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.2.bzl", "browser_repositories") -load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories") def load_angular(): @@ -18,6 +17,4 @@ def load_angular(): firefox = True, ) - ts_setup_workspace() - sass_repositories() diff --git a/tools/gui/BUILD b/tools/gui/BUILD index 0cec9eaa1d9..feadcb528b9 100644 --- a/tools/gui/BUILD +++ b/tools/gui/BUILD @@ -12,6 +12,6 @@ genrule( name = "tools-gui-gulp", srcs = [":_tools-gui-gulp-files"], outs = ["tools-gui-gulp.jar"], - cmd = "cd tools/gui && find . -type f -exec touch -t 201806280000 {} \; && jar Mcf ../../$@ .", + cmd = "cd tools/gui && find . -type f -exec touch -t 201806280000 {} \\; && jar Mcf ../../$@ .", visibility = ["//visibility:public"], ) diff --git a/tools/gui/package-lock.json b/tools/gui/package-lock.json index 88c041de401..a1fab13d02b 100755 --- a/tools/gui/package-lock.json +++ b/tools/gui/package-lock.json @@ -1201,49 +1201,6 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, - "bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", - "dev": true, - "requires": { - "readable-stream": "~2.0.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -1323,15 +1280,6 @@ } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "bower": { "version": "1.8.8", "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", @@ -1850,15 +1798,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, "css": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", @@ -3682,24 +3621,6 @@ "globule": "~0.1.0" } }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dev": true, - "requires": { - "is-property": "^1.0.2" - } - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -4801,24 +4722,6 @@ "pinkie-promise": "^2.0.0" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -5308,25 +5211,6 @@ "is-extglob": "^2.1.1" } }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", - "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5371,12 +5255,6 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -5707,12 +5585,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -7267,131 +7139,34 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "phantomjs": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-2.1.7.tgz", - "integrity": "sha1-xpEPZ5NcNyhbYRQyn8LyfV8+MTQ=", + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, "requires": { - "extract-zip": "~1.5.0", - "fs-extra": "~0.26.4", + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", "hasha": "^2.2.0", - "kew": "~0.7.0", - "progress": "~1.1.8", - "request": "~2.67.0", - "request-progress": "~2.0.1", - "which": "~1.2.2" + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" }, "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "concat-stream": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", - "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" - } - }, - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true - }, - "extract-zip": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", - "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", - "dev": true, - "requires": { - "concat-stream": "1.5.0", - "debug": "0.7.4", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - } - }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", - "dev": true, - "requires": { - "async": "^2.0.1", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" - } - }, "fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "klaw": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", @@ -7401,113 +7176,11 @@ "graceful-fs": "^4.1.6" } }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, "progress": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true - }, - "qs": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", - "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "request": { - "version": "2.67.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", - "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "bl": "~1.0.0", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~1.0.0-rc3", - "har-validator": "~2.0.2", - "hawk": "~3.1.0", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.7", - "oauth-sign": "~0.8.0", - "qs": "~5.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.2.0", - "tunnel-agent": "~0.4.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "tough-cookie": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -8408,15 +8081,6 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "socket.io": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", @@ -8817,12 +8481,6 @@ "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", diff --git a/tools/gui/package.json b/tools/gui/package.json index a2eab71f890..dd02d79129e 100644 --- a/tools/gui/package.json +++ b/tools/gui/package.json @@ -38,7 +38,7 @@ "karma-mocha-reporter": "^2.2.5", "karma-ng-html2js-preprocessor": "^1.0.0", "karma-phantomjs-launcher": "^1.0.4", - "phantomjs": "^2.1.7", + "phantomjs-prebuilt": "^2.1.16", "@bazel/hide-bazel-files": "0.40.0" }, "babel": { diff --git a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/WORKSPACE b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/WORKSPACE index dfb2138d329..44d301e17be 100644 --- a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/WORKSPACE +++ b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/WORKSPACE @@ -15,9 +15,9 @@ workspace( load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -RULES_NODEJS_VERSION = "1.0.1" +RULES_NODEJS_VERSION = "3.0.0" -RULES_NODEJS_SHA256 = "e1a0d6eb40ec89f61a13a028e7113aa3630247253bcb1406281b627e44395145" +RULES_NODEJS_SHA256 = "6142e9586162b179fdd570a55e50d1332e7d9c030efd853453438d607569721d" http_archive( name = "build_bazel_rules_nodejs", @@ -26,12 +26,14 @@ http_archive( ) # Rules for compiling sass -RULES_SASS_VERSION = "1.24.0" +RULES_SASS_VERSION = "1.30.0" -RULES_SASS_SHA256 = "77e241148f26d5dbb98f96fe0029d8f221c6cb75edbb83e781e08ac7f5322c5f" +RULES_SASS_SHA256 = "8392cf8910db2b1dc3b488ea18113bfe4fd666037bf8ec30d2a3f08fc602a6d8" http_archive( name = "io_bazel_rules_sass", + patch_args = ["-p1"], + patches = ["@build_bazel_rules_nodejs//:rules_sass.issue127.patch"], sha256 = RULES_SASS_SHA256, strip_prefix = "rules_sass-%s" % RULES_SASS_VERSION, urls = [ @@ -66,6 +68,7 @@ Try running `yarn bazel` instead. # TODO: remove the custom repositories once "rules_nodejs" supports v10.16.0 by default. node_repositories( node_repositories = { + "10.16.0-linux_arm64": ("node-v10.16.0-linux-arm64.tar.gz", "node-v10.16.0-linux-arm64", "2d84a777318bc95dd2a201ab8d700aea7e20641b3ece0c048399398dc645cbd7"), "10.16.0-darwin_amd64": ("node-v10.16.0-darwin-x64.tar.gz", "node-v10.16.0-darwin-x64", "6c009df1b724026d84ae9a838c5b382662e30f6c5563a0995532f2bece39fa9c"), "10.16.0-linux_amd64": ("node-v10.16.0-linux-x64.tar.xz", "node-v10.16.0-linux-x64", "1827f5b99084740234de0c506f4dd2202a696ed60f76059696747c34339b9d48"), "10.16.0-windows_amd64": ("node-v10.16.0-win-x64.zip", "node-v10.16.0-win-x64", "aa22cb357f0fb54ccbc06b19b60e37eefea5d7dd9940912675d3ed988bf9a059"), @@ -83,11 +86,11 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") install_bazel_dependencies() -load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies") +load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies") npm_bazel_protractor_dependencies() -load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies") +load("@npm//@bazel/karma:package.bzl", "npm_bazel_karma_dependencies") npm_bazel_karma_dependencies() @@ -101,7 +104,7 @@ browser_repositories( firefox = True, ) -load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") +load("@npm//@bazel/typescript:index.bzl", "ts_setup_workspace") ts_setup_workspace() diff --git a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/e2e/BUILD.rename b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/e2e/BUILD.rename index 296b97e2f6e..d47f88a36dd 100755 --- a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/e2e/BUILD.rename +++ b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/e2e/BUILD.rename @@ -1,5 +1,5 @@ -load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite") -load("@npm_bazel_typescript//:index.bzl", "ts_library") +load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite") +load("@npm//@bazel/typescript:index.bzl", "ts_library") ts_library( name = "e2e_lib", diff --git a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/src/BUILD.rename b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/src/BUILD.rename index 6c391e270da..b33b098fad0 100755 --- a/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/src/BUILD.rename +++ b/tools/package/archetypes/ui2/src/main/resources/archetype-resources/web/__artifactId__-gui/src/BUILD.rename @@ -16,13 +16,11 @@ package(default_visibility = ["//visibility:public"]) -load("@npm_angular_bazel//:index.bzl", "ng_module") -load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite") load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") load("@npm//history-server:index.bzl", "history_server") -load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") -load("@npm_bazel_terser//:index.bzl", "terser_minified") -load("@npm_bazel_typescript//:index.bzl", "ts_devserver", "ts_library") +load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") +load("@npm//@bazel/terser:index.bzl", "terser_minified") +load("@npm//@bazel/typescript:index.bzl", "ts_devserver", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "multi_sass_binary", "sass_binary") sass_binary( @@ -42,7 +40,7 @@ multi_sass_binary( ), ) -ng_module( +ts_library( name = "src", srcs = glob( include = ["**/*.ts"], @@ -53,13 +51,17 @@ ng_module( "initialize_testbed.ts", ], ), - assets = glob([ - "**/*.css", - "**/*.html", + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ + "**/*.css", + "**/*.html", ]) + ([":styles"] if len(glob(["**/*.scss"])) else []), generate_ve_shims = True, + use_angular_plugin = True, deps = [ "@npm//@angular/core", + "@npm//@angular/common", "@npm//@angular/platform-browser", "@npm//@angular/router", "@npm//@types", @@ -152,25 +154,4 @@ ts_library( ], ) -karma_web_test_suite( - name = "test", - srcs = [ - "@npm//:node_modules/tslib/tslib.js", - ], - # do not sort - bootstrap = [ - "@npm//:node_modules/zone.js/dist/zone-testing-bundle.js", - "@npm//:node_modules/reflect-metadata/Reflect.js", - ], - browsers = [ - "@io_bazel_rules_webtesting//browsers:firefox-local", - ], - tags = ["native"], - runtime_deps = [ - ":initialize_testbed", - ], - deps = [ - ":rxjs_umd_modules", - ":test_lib", - ], -) + diff --git a/web/gui/BUILD b/web/gui/BUILD index 43c2a77b8a6..39da74a6fb2 100644 --- a/web/gui/BUILD +++ b/web/gui/BUILD @@ -117,7 +117,7 @@ genrule( " jar xf ../../$(location //tools/gui:tools-gui-gulp) &&" + " $$NPM $$NPM_ARGS install --no-cache --loglevel=error > $$ROOT/$(location onos-gui1-npm-install.log) 2>&1 &&" + " find . -name package.json | while read pjson; do egrep -v '/execroot/' $$pjson > ptmp; mv ptmp $$pjson; done &&" + - " find package.json gulpfile.babel.js node_modules gulp-tasks -type f -exec touch -t 201806280000 {} \; &&" + + " find package.json gulpfile.babel.js node_modules gulp-tasks -type f -exec touch -t 202101010000 {} \\; &&" + " jar Mcf $$ROOT/$(location onos-gui-npm-install.jar) package.json gulpfile.babel.js node_modules gulp-tasks &&" + " touch $$ROOT/$(location onos-gui1-npm-install.log)", # to get the log always as the 2nd file ) @@ -150,7 +150,7 @@ genrule( " chmod a+x ./node_modules/gulp/bin/gulp.js &&" + " $$ROOT/$$NPM $$NPM_ARGS run build --no-cache --loglevel=error > $$ROOT/$(location onos-gui1-npm-build.log) &&" + " cd ../../web/gui/src/main/webapp &&" + - " find dist vendor data README.md _doc _dev app/fw app/*.css app/*.js app/*.txt -type f -exec touch -t 201806280000 {} \; &&" + + " find dist vendor data README.md _doc _dev app/fw app/*.css app/*.js app/*.txt -type f -exec touch -t 201806280000 {} \\; &&" + " jar Mcf $$ROOT/$(location onos-gui-npm-build.jar) dist vendor data README.md _doc _dev app/fw app/*.css app/*.js app/*.txt &&" + " touch $$ROOT/$(location onos-gui1-npm-build.log)", # to get the log always as the 2nd file ) @@ -176,7 +176,7 @@ genrule( ), outs = ["web_app_all.jar"], cmd = "cd web/gui &&" + - " find src/main/webapp -type f -exec touch -t 201806280000 {} \; &&" + + " find src/main/webapp -type f -exec touch -t 201806280000 {} \\; &&" + " jar Mcf ../../$@ src/main/webapp", ) @@ -190,7 +190,7 @@ genrule( outs = ["app_view_tar.jar"], cmd = " ROOT=`pwd` &&" + " cd web/gui/src/main/webapp/app/view &&" + - " find . -type f -exec touch -t 201806280000 {} \; &&" + + " find . -type f -exec touch -t 201806280000 {} \\; &&" + " jar Mcf $$ROOT/$@ .", ) @@ -260,7 +260,7 @@ genrule( " mkdir ./WEB-INF/classes/raw && " + " for i in $(locations :_raw_classes_files); do cp $$ROOT/$$i ./WEB-INF/classes/raw/; done &&" + " jar xf $$ROOT/$(location :onos-gui-jar) &&" + - " find . -type f -exec touch -t 201806280000 {} \; &&" + + " find . -type f -exec touch -t 201806280000 {} \\; &&" + " jar cmf META-INF/MANIFEST.MF $$ROOT/$@ .", output_to_bindir = 1, visibility = ["//visibility:public"], diff --git a/web/gui2-fw-lib/BUILD.bazel b/web/gui2-fw-lib/BUILD.bazel index 30df3be8ea5..cbf7358d431 100644 --- a/web/gui2-fw-lib/BUILD.bazel +++ b/web/gui2-fw-lib/BUILD.bazel @@ -14,9 +14,8 @@ limitations under the License. """ -load("@npm_angular_bazel//:index.bzl", "ng_module", "ng_package") -load("@npm_bazel_typescript//:index.bzl", "ts_library") -load("@npm_bazel_karma//:index.bzl", "karma_web_test") +load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/karma:index.bzl", "karma_web_test") package(default_visibility = ["//:__subpackages__"]) @@ -28,7 +27,7 @@ NG_FACTORY_ADDED_IMPORTS = [ "@npm//@angular/forms", ] -ng_module( +ts_library( name = "gui2-fw-lib", srcs = glob( include = [ @@ -39,17 +38,22 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = glob([ "lib/**/*.css", "lib/**/*.html", ]), - entry_point = ":public_api.ts", + module_name = "org_onosproject_onos/web/gui2-fw-lib", + # entry_point = ":public_api.ts", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "@npm//@angular/animations", "@npm//@angular/common", + "@npm//@angular/compiler-cli", + "@npm//@angular/core", "@npm//@angular/platform-browser", "@npm//@angular/router", + "@npm//@bazel/typescript", "@npm//d3", "@npm//rxjs", ], @@ -105,18 +109,12 @@ karma_web_test( ], ) -# bazel run //web/gui2-fw-lib:npm_package.pack to create a tgz -ng_package( - name = "npm_package", - srcs = ["package.json"], - data = glob([ - "**/*.css", - "**/*.html", - ]), - entry_point = ":public_api.ts", - include_devmode_srcs = False, - readme_md = ":README.md", - deps = [ - ":gui2-fw-lib", +filegroup( + name = "extra_css", + srcs = [ + "lib/widget/panel.css", + "lib/widget/panel-theme.css", + "lib/widget/table.css", + "lib/widget/table.theme.css", ], ) diff --git a/web/gui2-fw-lib/lib/remote/websocket.service.ts b/web/gui2-fw-lib/lib/remote/websocket.service.ts index 93020f07370..c45e23fab42 100644 --- a/web/gui2-fw-lib/lib/remote/websocket.service.ts +++ b/web/gui2-fw-lib/lib/remote/websocket.service.ts @@ -187,7 +187,7 @@ export class WebSocketService { let ev: EventType; let h; try { - ev = JSON.parse(msgEvent.data); + ev = JSON.parse(msgEvent.data.toString()) as EventType; } catch (e) { this.log.error('Message.data is not valid JSON', msgEvent.data, e); return null; diff --git a/web/gui2-fw-lib/lib/widget/detailspanel.base.ts b/web/gui2-fw-lib/lib/widget/detailspanel.base.ts index 97efee6fe55..e61b1f27e5c 100644 --- a/web/gui2-fw-lib/lib/widget/detailspanel.base.ts +++ b/web/gui2-fw-lib/lib/widget/detailspanel.base.ts @@ -18,7 +18,7 @@ import { LogService } from '../log.service'; import { WebSocketService } from '../remote/websocket.service'; import { PanelBaseImpl } from './panel.base'; -import { Output, EventEmitter, Input } from '@angular/core'; +import { InjectionToken, Inject, Component, Output, EventEmitter, Input } from '@angular/core'; /** * A generic model of the data returned from the *DetailsResponse @@ -27,6 +27,8 @@ export interface DetailsResponse { details: any; } +export const TAG = new InjectionToken('tag'); + /** * Extends the PanelBase abstract class specifically for showing details * @@ -35,6 +37,9 @@ export interface DetailsResponse { * * This replaces the detailspanel service in the old gui */ +@Component({ + template: '' +}) export abstract class DetailsPanelBaseImpl extends PanelBaseImpl { @Input() id: string; @@ -51,7 +56,7 @@ export abstract class DetailsPanelBaseImpl extends PanelBaseImpl { protected fs: FnService, protected log: LogService, protected wss: WebSocketService, - protected tag: string, + @Inject(TAG) protected tag: string, ) { super(fs, log); this.root = tag + 's'; diff --git a/web/gui2-topo-lib/BUILD.bazel b/web/gui2-topo-lib/BUILD.bazel index f4349070ed0..82052f6b7d0 100644 --- a/web/gui2-topo-lib/BUILD.bazel +++ b/web/gui2-topo-lib/BUILD.bazel @@ -1,6 +1,5 @@ -load("@npm_angular_bazel//:index.bzl", "ng_module") -load("@npm_bazel_typescript//:index.bzl", "ts_library") -load("@npm_bazel_karma//:index.bzl", "karma_web_test") +load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/karma:index.bzl", "karma_web_test") package(default_visibility = ["//:__subpackages__"]) @@ -10,7 +9,7 @@ NG_FACTORY_ADDED_IMPORTS = [ "@npm//@angular/forms", ] -ng_module( +ts_library( name = "gui2-topo-lib", srcs = glob( include = ["**/*.ts"], @@ -18,14 +17,18 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = NG_FACTORY_ADDED_IMPORTS + [ "//web/gui2-fw-lib", "@npm//@angular/core", + "@npm//@angular/common", "@npm//@angular/router", "@npm//@angular/platform-browser", "@npm//rxjs", diff --git a/web/gui2/BUILD b/web/gui2/BUILD index 7ecf797ea15..7087334b2e5 100644 --- a/web/gui2/BUILD +++ b/web/gui2/BUILD @@ -19,7 +19,7 @@ """ load("//tools/build/bazel:jdk_genrule.bzl", genrule = "jdk_genrule") -load("@npm_bazel_typescript//:index.bzl", "ts_config") +load("@npm//@bazel/typescript:index.bzl", "ts_config") COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + [ "@javax_ws_rs_api//jar", @@ -101,7 +101,7 @@ genrule( " mv web/gui/src/main/resources/org/onosproject/ui/lion* WEB-INF/classes/org/onosproject/ui/ &&" + " cp -R $$ROOT/$(location //web/gui2/src/main/webapp:prodapp)/* WEB-INF/classes/ &&" + " mv $$ROOT/$(location //web/gui2/src/main/webapp:WEB-INF/web.xml) WEB-INF &&" + - " find . -type f -exec touch -t 202001010001 {} \; &&" + + " find . -type f -exec touch -t 202001010001 {} \\; &&" + " jar cmf META-INF/MANIFEST.MF $$ROOT/$@ WEB-INF/web.xml WEB-INF/classes OSGI-INF/*.xml", output_to_bindir = 1, visibility = ["//visibility:public"], diff --git a/web/gui2/README.md b/web/gui2/README.md index 1c011a0e61a..72565176139 100644 --- a/web/gui2/README.md +++ b/web/gui2/README.md @@ -1,6 +1,6 @@ -# ONOS GUI 2.4.0 +# ONOS GUI 2.5.0 -This project is based on __[Angular 9](https://angular.io/docs)__ +This project is based on __[Angular 10](https://angular.io/docs)__ and __[ES6](http://www.ecma-international.org/ecma-262/6.0/index.html)__ (aka __ES2015__), as an alternative to the 1.0.0 GUI which was based off __[AngularJS 1.3.5](https://angularjs.org/)__ @@ -56,7 +56,7 @@ and are displayed smoothly by HTML5 compatible browsers. Occasionally the d3 libraries (such as d3-force) are used to help position graphics, but an over dependence on d3 is mainly avoided. -The main framework used is Angular 9, with a strong emphasis on making resuable +The main framework used is Angular 10, with a strong emphasis on making resuable components, directives, services and classes. Angular Routing and animation are also used. @@ -172,7 +172,7 @@ This module should then be given it's own ```BUILD.Bazel``` file to compile this package(default_visibility = ["//:__subpackages__"]) load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("@npm_angular_bazel//:index.bzl", "ng_module") +load("@npm//@angular/bazel:index.bzl", "ng_module") sass_binary( name = "mynewmodule-styles", diff --git a/web/gui2/angular.json b/web/gui2/angular.json deleted file mode 100644 index fe5d756ba7d..00000000000 --- a/web/gui2/angular.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "gui2": { - "root": "", - "sourceRoot": "src/main/webapp", - "projectType": "application", - "prefix": "onos", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } - }, - "architect": { - } - } - }, - "defaultProject": "ngbazel", - "cli": { - "analytics": "11fb2174-8daf-47e0-8d5b-8eee8719059a" - } -} diff --git a/web/gui2/package.json b/web/gui2/package.json index 23ad0a0d13d..bb9493f5711 100644 --- a/web/gui2/package.json +++ b/web/gui2/package.json @@ -4,38 +4,38 @@ "license": "MIT", "engines": { "node": ">=10.9.0 <13.0.0", - "yarn": ">=1.9.2 <2.0.0" + "yarn": ">=1.9.2 <2.3.1" }, "scripts": { "postinstall": "ngcc" }, "private": true, "dependencies": { - "@angular/animations": "9.1.0", - "@angular/common": "9.1.0", - "@angular/core": "9.1.0", - "@angular/forms": "9.1.0", - "@angular/platform-browser": "9.1.0", - "@angular/platform-browser-dynamic": "9.1.0", - "@angular/router": "9.1.0", - "d3": "^5.15.0", - "rxjs": "~6.5.4", + "@angular/animations": "10.2.4", + "@angular/common": "10.2.4", + "@angular/core": "10.2.4", + "@angular/forms": "10.2.4", + "@angular/platform-browser": "10.2.4", + "@angular/platform-browser-dynamic": "10.2.4", + "@angular/router": "10.2.4", + "d3": "^5.16.0", + "rxjs": "~6.6.3", "topojson-client": "^3.1.0", - "tslib": "1.10.0", - "zone.js": "0.10.2" + "tslib": "1.14.1", + "zone.js": "0.10.3" }, "devDependencies": { - "@angular/bazel": "9.1.0", - "@angular/cli": "9.1.0", - "@angular/compiler": "9.1.0", - "@angular/compiler-cli": "9.1.0", - "@angular-devkit/build-angular": "~0.901.1", - "@bazel/hide-bazel-files": "1.1.0", - "@bazel/karma": "1.6.0", - "@bazel/protractor": "1.6.0", - "@bazel/rollup": "1.6.0", - "@bazel/terser": "1.6.0", - "@bazel/typescript": "1.6.0", + "@angular/cli": "10.2.1", + "@angular/compiler": "10.2.4", + "@angular/compiler-cli": "10.2.4", + "@angular-devkit/build-angular": "~0.1002.1", + "@bazel/angular": "2.0.0", + "@bazel/buildifier": "^3.4.0", + "@bazel/karma": "2.0.0", + "@bazel/protractor": "2.0.0", + "@bazel/rollup": "2.0.0", + "@bazel/terser": "2.0.0", + "@bazel/typescript": "2.0.0", "@types/jasmine": "3.4.0", "@types/node": "10.14.22", "core-js": "2.6.9", @@ -51,10 +51,10 @@ "karma-coverage-istanbul-reporter": "~2.1.1", "protractor": "~5.4.2", "requirejs": "2.3.6", - "rollup": "~1.21.4", - "rollup-plugin-commonjs": "~10.1.0", - "rollup-plugin-node-resolve": "~5.2.0", + "rollup": "2.3.4", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-node-resolve": "^8.4.0", "terser": "4.3.1", - "typescript": "3.8.3" + "typescript": "3.9.7" } } diff --git a/web/gui2/src/main/webapp/BUILD.bazel b/web/gui2/src/main/webapp/BUILD.bazel index 3b834e97624..e46d83c692f 100644 --- a/web/gui2/src/main/webapp/BUILD.bazel +++ b/web/gui2/src/main/webapp/BUILD.bazel @@ -1,12 +1,9 @@ """ Copyright 2020-present Open Networking Foundation - Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,15 +14,10 @@ package(default_visibility = ["//:__subpackages__"]) load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") -load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("@npm//history-server:index.bzl", "history_server") -load("@npm//html-insert-assets:index.bzl", "html_insert_assets") -load("@npm_angular_bazel//:index.bzl", "ng_module") -load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") -load("@npm_bazel_terser//:index.bzl", "terser_minified") -load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library") - -#load("@npm_bazel_karma//:index.bzl", "ts_web_test_suite") +load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") +load("@npm//@bazel/terser:index.bzl", "terser_minified") +load("@npm//@bazel/typescript:index.bzl", "ts_library") exports_files([ "WEB-INF/web.xml", @@ -38,7 +30,7 @@ NG_FACTORY_ADDED_IMPORTS = [ "@npm//@angular/forms", ] -ng_module( +ts_library( name = "gui2", srcs = [ "environments/environment.prod.ts", @@ -46,6 +38,7 @@ ng_module( "onos.prod.ts", ], tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = NG_FACTORY_ADDED_IMPORTS + [ "//web/gui2/src/main/webapp/app:app", "@npm//@angular/core", @@ -63,14 +56,15 @@ rollup_bundle( output_dir = True, deps = [ "//web/gui2/src/main/webapp:gui2", - "@npm//rollup-plugin-commonjs", - "@npm//rollup-plugin-node-resolve", + "@npm//@rollup/plugin-commonjs", + "@npm//@rollup/plugin-node-resolve", ], ) terser_minified( name = "bundle-es2015.min", src = ":bundle-es2015", + config_file = "terser.config.json", ) # Files that we serve in both development and production diff --git a/web/gui2/src/main/webapp/app/BUILD.bazel b/web/gui2/src/main/webapp/app/BUILD.bazel index f18236d9c0d..7d7971eec8b 100644 --- a/web/gui2/src/main/webapp/app/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/BUILD.bazel @@ -14,9 +14,7 @@ limitations under the License. """ -load("@npm_angular_bazel//:index.bzl", "ng_module") -load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite") -load("@npm_bazel_typescript//:index.bzl", "ts_library") +load("@npm//@bazel/typescript:index.bzl", "ts_library") package(default_visibility = ["//:__subpackages__"]) @@ -26,7 +24,7 @@ NG_FACTORY_ADDED_IMPORTS = [ "@npm//@angular/forms", ] -ng_module( +ts_library( name = "app", srcs = [ "nav/nav.component.ts", @@ -35,7 +33,7 @@ ng_module( "onos.service.ts", "onos-routing.module.ts", ], - assets = [ + angular_assets = [ "onos.common.css", "onos.component.css", "onos.component.html", @@ -44,6 +42,7 @@ ng_module( "nav/nav.theme.css", ], tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = NG_FACTORY_ADDED_IMPORTS + [ "//web/gui2-fw-lib", "//web/gui2/src/main/webapp/app/view/apps:gui2-view-apps", @@ -67,6 +66,7 @@ ng_module( "//apps/yang-gui/yang-gui2-lib:yang-gui2-lib", "//apps/inbandtelemetry/intApp-gui2/intApp:intapp-gui2-lib", "@npm//@angular/core", + "@npm//@angular/common", "@npm//@angular/router", "@npm//@angular/platform-browser", "@npm//rxjs", diff --git a/web/gui2/src/main/webapp/app/view/apps/BUILD.bazel b/web/gui2/src/main/webapp/app/view/apps/BUILD.bazel index 9cfeb2a6cf6..64f314b219e 100644 --- a/web/gui2/src/main/webapp/app/view/apps/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/apps/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-apps", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-apps", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/cluster/BUILD.bazel b/web/gui2/src/main/webapp/app/view/cluster/BUILD.bazel index 3dc548e55a7..dea27831335 100644 --- a/web/gui2/src/main/webapp/app/view/cluster/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/cluster/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-cluster", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-cluster", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/device/BUILD.bazel b/web/gui2/src/main/webapp/app/view/device/BUILD.bazel index f821a4ff2e3..ce7abffa386 100644 --- a/web/gui2/src/main/webapp/app/view/device/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/device/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-device", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-device", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/flow/BUILD.bazel b/web/gui2/src/main/webapp/app/view/flow/BUILD.bazel index fe80c7437ea..e2896f89c01 100644 --- a/web/gui2/src/main/webapp/app/view/flow/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/flow/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-flow", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-flow", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/group/BUILD.bazel b/web/gui2/src/main/webapp/app/view/group/BUILD.bazel index 5eb36953b6f..02a5f5da236 100644 --- a/web/gui2/src/main/webapp/app/view/group/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/group/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-group", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-group", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/host/BUILD.bazel b/web/gui2/src/main/webapp/app/view/host/BUILD.bazel index df3f9be8f19..55cf6c31d36 100644 --- a/web/gui2/src/main/webapp/app/view/host/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/host/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-host", srcs = glob( include = [ @@ -28,14 +28,18 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/intent/BUILD.bazel b/web/gui2/src/main/webapp/app/view/intent/BUILD.bazel index e8c550860c7..7207aff6d51 100644 --- a/web/gui2/src/main/webapp/app/view/intent/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/intent/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-intent", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-intent", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/link/BUILD.bazel b/web/gui2/src/main/webapp/app/view/link/BUILD.bazel index f7c458d2af5..a15c5c9e9dd 100644 --- a/web/gui2/src/main/webapp/app/view/link/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/link/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-link", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-link", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/meter/BUILD.bazel b/web/gui2/src/main/webapp/app/view/meter/BUILD.bazel index 01f2f95214e..ed4d19d0c69 100644 --- a/web/gui2/src/main/webapp/app/view/meter/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/meter/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-meter", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-meter", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/partition/BUILD.bazel b/web/gui2/src/main/webapp/app/view/partition/BUILD.bazel index 80cbe054683..3936d9e099c 100644 --- a/web/gui2/src/main/webapp/app/view/partition/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/partition/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-partition", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-partition", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/pipeconf/BUILD.bazel b/web/gui2/src/main/webapp/app/view/pipeconf/BUILD.bazel index 16250bb36ab..697fa483160 100644 --- a/web/gui2/src/main/webapp/app/view/pipeconf/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/pipeconf/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-pipeconf", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-pipeconf", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/port/BUILD.bazel b/web/gui2/src/main/webapp/app/view/port/BUILD.bazel index 8b15b6f750b..91c6d7a492b 100644 --- a/web/gui2/src/main/webapp/app/view/port/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/port/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-port", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-port", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/processor/BUILD.bazel b/web/gui2/src/main/webapp/app/view/processor/BUILD.bazel index 5ea300089b5..895281f3cd5 100644 --- a/web/gui2/src/main/webapp/app/view/processor/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/processor/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-processor", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-processor", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/settings/BUILD.bazel b/web/gui2/src/main/webapp/app/view/settings/BUILD.bazel index f4a2f6d39b4..93b4c3c36e4 100644 --- a/web/gui2/src/main/webapp/app/view/settings/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/settings/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-settings", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-settings", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/app/view/tunnel/BUILD.bazel b/web/gui2/src/main/webapp/app/view/tunnel/BUILD.bazel index 4cc24e3b9e4..a0200db9717 100644 --- a/web/gui2/src/main/webapp/app/view/tunnel/BUILD.bazel +++ b/web/gui2/src/main/webapp/app/view/tunnel/BUILD.bazel @@ -14,11 +14,11 @@ limitations under the License. """ -package(default_visibility = ["//:__subpackages__"]) +load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("@npm_angular_bazel//:index.bzl", "ng_module") +package(default_visibility = ["//:__subpackages__"]) -ng_module( +ts_library( name = "gui2-view-tunnel", srcs = glob( include = [ @@ -28,15 +28,19 @@ ng_module( "**/*.spec.ts", ], ), - assets = glob([ + angular_assets = [ + "//web/gui2-fw-lib:extra_css", + ] + glob([ "**/*.css", "**/*.html", ]), module_name = "gui2-view-tunnel", tsconfig = "//web/gui2:tsconfig.json", + use_angular_plugin = True, deps = [ "//web/gui2-fw-lib", "@npm//@angular/animations", + "@npm//@angular/common", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@angular/platform-browser-dynamic", diff --git a/web/gui2/src/main/webapp/rollup.config.js b/web/gui2/src/main/webapp/rollup.config.js index 6f6d3727c5e..45e83b22355 100644 --- a/web/gui2/src/main/webapp/rollup.config.js +++ b/web/gui2/src/main/webapp/rollup.config.js @@ -1,11 +1,11 @@ -const node = require('rollup-plugin-node-resolve'); -const commonjs = require('rollup-plugin-commonjs'); +const {nodeResolve} = require('@rollup/plugin-node-resolve'); +const commonjs = require('@rollup/plugin-commonjs'); module.exports = { plugins: [ - node({ + nodeResolve({ mainFields: ['browser', 'es2015', 'module', 'jsnext:main', 'main'], }), commonjs(), ], -}; +}; \ No newline at end of file diff --git a/web/gui2/src/main/webapp/terser.config.json b/web/gui2/src/main/webapp/terser.config.json new file mode 100644 index 00000000000..d85d1d38c96 --- /dev/null +++ b/web/gui2/src/main/webapp/terser.config.json @@ -0,0 +1,11 @@ +{ + "compress": { + "keep_fnames": "bazel_no_debug", + "passes": 3, + "pure_getters": true, + "reduce_funcs": "bazel_no_debug", + "reduce_vars": "bazel_no_debug", + "sequences": "bazel_no_debug" +}, + "mangle": "bazel_no_debug" +} \ No newline at end of file diff --git a/web/gui2/yarn.lock b/web/gui2/yarn.lock index 2616f8782f0..3892e2dae15 100644 --- a/web/gui2/yarn.lock +++ b/web/gui2/yarn.lock @@ -2,189 +2,188 @@ # yarn lockfile v1 -"@angular-devkit/architect@0.901.0": - version "0.901.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" - integrity sha512-SlqEBkPrT40zMCy5344AsUqC76pEPCaGPaAkCIvadaz2dC9vNMzQrvubCPJHViD/TumkSX1kYmLS3iYASVM9GQ== +"@angular-devkit/architect@0.1002.1": + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.1.tgz#bd33dda1361b5d7c23e07b41a603b48ac9c3c744" + integrity sha512-vP27xCe++p3zm+zwSDXDm9/rsM71Q4MYidLLi0MQfo8wxsWS/4mWXycCBoMwDkvW44SPJ4Ds1/F46bb3/xRDvA== dependencies: - "@angular-devkit/core" "9.1.0" - rxjs "6.5.4" + "@angular-devkit/core" "10.2.1" + rxjs "6.6.2" -"@angular-devkit/architect@0.901.1": - version "0.901.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.1.tgz#b60bfd288892612e3af98ea1621a58d3b6ef268b" - integrity sha512-foWDAurMfBDYLAJxHpTFkJBub1c2A8+eWHbBjgqIHmT8xadnE7t8nSA9XDl+k/kIoWw/qFU+6IttPirudYc/vw== +"@angular-devkit/architect@^0.901.7": + version "0.901.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.13.tgz#39bb8561250253416173087bc3911897b76d579e" + integrity sha512-vwIVlG+4TJKcnwMcgpkrMXXzjKnk87AEmgERynJVxGYpRJYppHWd6ul7bYdJQATuLUNbJrgdc+lvU4PZqi8Z2A== dependencies: - "@angular-devkit/core" "9.1.1" + "@angular-devkit/core" "9.1.13" rxjs "6.5.4" -"@angular-devkit/build-angular@~0.901.1": - version "0.901.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.901.1.tgz#46f4168287c5bc9969a91d1a2ab04c95969df04b" - integrity sha512-6uEvo5htsJoxQHBVwHOGmM6YWq5q6m9UWMv/ughlek0RtSLFfOt9TZQ/yQHgtGQsCQvscD/jBzVoD0zD5Ax/SQ== - dependencies: - "@angular-devkit/architect" "0.901.1" - "@angular-devkit/build-optimizer" "0.901.1" - "@angular-devkit/build-webpack" "0.901.1" - "@angular-devkit/core" "9.1.1" - "@babel/core" "7.9.0" - "@babel/generator" "7.9.3" - "@babel/preset-env" "7.9.0" - "@babel/template" "7.8.6" - "@jsdevtools/coverage-istanbul-loader" "3.0.3" - "@ngtools/webpack" "9.1.1" - ajv "6.12.0" - autoprefixer "9.7.4" - babel-loader "8.0.6" +"@angular-devkit/build-angular@~0.1002.1": + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1002.1.tgz#2c955cdd2e0e96a35b5f4149d439adeeb98f19f6" + integrity sha512-z5asIOrkxandGT2NgVH3B5uiV0ncURfHpXer/E8q1q5pwY2pCCmvqF2f7tMWrR6j+1Q/Dy1jrpXTWdOUlUCFqw== + dependencies: + "@angular-devkit/architect" "0.1002.1" + "@angular-devkit/build-optimizer" "0.1002.1" + "@angular-devkit/build-webpack" "0.1002.1" + "@angular-devkit/core" "10.2.1" + "@babel/core" "7.11.1" + "@babel/generator" "7.11.0" + "@babel/plugin-transform-runtime" "7.11.0" + "@babel/preset-env" "7.11.0" + "@babel/runtime" "7.11.2" + "@babel/template" "7.10.4" + "@jsdevtools/coverage-istanbul-loader" "3.0.5" + "@ngtools/webpack" "10.2.1" + autoprefixer "9.8.6" + babel-loader "8.1.0" browserslist "^4.9.1" - cacache "15.0.0" + cacache "15.0.5" caniuse-lite "^1.0.30001032" circular-dependency-plugin "5.2.0" - copy-webpack-plugin "5.1.1" + copy-webpack-plugin "6.0.3" core-js "3.6.4" + css-loader "4.2.2" cssnano "4.1.10" file-loader "6.0.0" find-cache-dir "3.3.1" glob "7.1.6" - jest-worker "25.1.0" + jest-worker "26.3.0" karma-source-map-support "1.4.0" - less "3.11.1" - less-loader "5.0.0" - license-webpack-plugin "2.1.4" + less-loader "6.2.0" + license-webpack-plugin "2.3.0" loader-utils "2.0.0" - mini-css-extract-plugin "0.9.0" + mini-css-extract-plugin "0.10.0" minimatch "3.0.4" - open "7.0.3" - parse5 "4.0.0" - postcss "7.0.27" + open "7.2.0" + parse5 "6.0.1" + parse5-htmlparser2-tree-adapter "6.0.1" + pnp-webpack-plugin "1.6.4" + postcss "7.0.32" postcss-import "12.0.1" postcss-loader "3.0.0" - raw-loader "4.0.0" - regenerator-runtime "0.13.5" + raw-loader "4.0.1" + regenerator-runtime "0.13.7" + resolve-url-loader "3.1.2" rimraf "3.0.2" - rollup "2.1.0" - rxjs "6.5.4" - sass "1.26.3" - sass-loader "8.0.2" - semver "7.1.3" + rollup "2.26.5" + rxjs "6.6.2" + sass "1.26.10" + sass-loader "10.0.1" + semver "7.3.2" source-map "0.7.3" - source-map-loader "0.2.4" - source-map-support "0.5.16" - speed-measure-webpack-plugin "1.3.1" - style-loader "1.1.3" - stylus "0.54.7" + source-map-loader "1.0.2" + source-map-support "0.5.19" + speed-measure-webpack-plugin "1.3.3" + style-loader "1.2.1" + stylus "0.54.8" stylus-loader "3.0.2" - terser "4.6.10" - terser-webpack-plugin "2.3.5" + terser "5.3.0" + terser-webpack-plugin "4.1.0" tree-kill "1.2.2" - webpack "4.42.0" + webpack "4.44.1" webpack-dev-middleware "3.7.2" - webpack-dev-server "3.10.3" + webpack-dev-server "3.11.0" webpack-merge "4.2.2" webpack-sources "1.4.3" - webpack-subresource-integrity "1.4.0" - worker-plugin "4.0.2" + webpack-subresource-integrity "1.4.1" + worker-plugin "5.0.0" -"@angular-devkit/build-optimizer@0.901.1": - version "0.901.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.901.1.tgz#49d7385c18f49aaccab2545ab2829c4d52e29b18" - integrity sha512-o0A9CcyDQSUnC5CQIKf92VH8amIYRYrMgLf2kdhSMcy0QV+rEJyN81dSvwX/Yxgnr9NbWEAQg7jnyKk06vfhOw== +"@angular-devkit/build-optimizer@0.1002.1": + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.1.tgz#826e85b02cc456a66b863d54fcdff4c5f56c5b16" + integrity sha512-9TLbHVGlux/b/eAubiyd3MNS5xog+8MDABG/Y4vWQInWZVNfcSUY7fycbvlCAXLguSVUvjYP2AoPBGPow4mIMw== dependencies: loader-utils "2.0.0" source-map "0.7.3" - tslib "1.11.1" - typescript "3.6.5" + tslib "2.0.1" + typescript "4.0.2" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.901.1": - version "0.901.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.901.1.tgz#695bec662d04a8c832fb86ae13b664d85184f42a" - integrity sha512-9oNI+wPSk8yECy+f0EebfMx4PH3uDJRrifYZAxcr84IpzEbpfpRuYhE3ecwqd7k0zu2Kdjw1uUrGxBuH4/sbGg== +"@angular-devkit/build-webpack@0.1002.1": + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1002.1.tgz#7fc185b6315cba3539b2f637ccb7a5bf833f3317" + integrity sha512-RgTIgwGoHY+fBUEwZGhYrAi2RqqvLe5eHAPxRIG33nydZ6KLxD4XozqmCEx7EJwDws+HFiOhlAYoW12QhimK7w== dependencies: - "@angular-devkit/architect" "0.901.1" - "@angular-devkit/core" "9.1.1" - rxjs "6.5.4" + "@angular-devkit/architect" "0.1002.1" + "@angular-devkit/core" "10.2.1" + rxjs "6.6.2" -"@angular-devkit/core@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" - integrity sha512-vHTsrB4JaVUQ95FRnKrgo79Y3F6FokImrZdrmwkQmwAThpjXeXmpUEKZS+ZSTFRgesjiIysVGOFijARP4BQ7Bg== +"@angular-devkit/core@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.1.tgz#3ae38be4ca56c745788481b3577173ac2007e9e0" + integrity sha512-dzlF9Gl7KNt9sPYT2HYq6ySZYwKzkyYR5mrBj3DZOD0OQsoc21LvLkWAHNSL2iYGdHJQS1oJDNs8iRYxYIOY3w== dependencies: - ajv "6.12.0" + ajv "6.12.4" fast-json-stable-stringify "2.1.0" magic-string "0.25.7" - rxjs "6.5.4" + rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/core@9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.1.tgz#6adb04c17d01abea506b8f2bd041aacdd569dc4f" - integrity sha512-57MNew2u1QwVb69jxZyhXgdW9kqcGyWyRy2ui/hWCkWLg7RumWtyypmdTs89FNExB4HqtXlQ2eO3JZxfs7QR3w== +"@angular-devkit/core@9.1.13": + version "9.1.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.13.tgz#47135a25c04ceb62579f0a50d4ad015c7741235a" + integrity sha512-bwehVRsva9OWfh/yuEh9VU+0Gr1T7DHJLe8tpZk/VsIkGOD0IszEPZOIEK23bg32yiff9bh6qJEPMA7ZBYEQHg== dependencies: - ajv "6.12.0" + ajv "6.12.3" fast-json-stable-stringify "2.1.0" magic-string "0.25.7" rxjs "6.5.4" source-map "0.7.3" -"@angular-devkit/schematics@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" - integrity sha512-cb9PSvskMwWlL54fPfCcpJoyNDWAX6Wo7CzL5qpIB2cJCPLAuyfRUYYrkO77YUST+n2HvypHz0cZ5SNGMfaaBQ== +"@angular-devkit/schematics@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.2.1.tgz#1d1aaf3875c9ed5eb3ad97af993af39fe9ed10a9" + integrity sha512-0oMhB1eM7hg5Xf4U7r193zrNTGyxfzl2okBsLJPuVmkb3KCBGQOyHYmU5HjDNadPc5iCFc+Xo2+DSDvXGuLmaA== dependencies: - "@angular-devkit/core" "9.1.0" - ora "4.0.3" - rxjs "6.5.4" + "@angular-devkit/core" "10.2.1" + ora "5.0.0" + rxjs "6.6.2" -"@angular/animations@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-9.1.0.tgz#3030e290683c0e2d63fa61060d36f659511d3b2c" - integrity sha512-o7X3HM+eocoryw3VrDUtG6Wci2KwtzyBFo3KBJXjQ16X6fwdkjTG+hLb7pp2CBFBEJW4tPYEy7cSBmEfMRTqag== - -"@angular/bazel@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/bazel/-/bazel-9.1.0.tgz#8790af9ebbec225ad174bd3a12e399540d359f3d" - integrity sha512-zFV65e87h4DjXzezCIqeQT+nqG4RNpgh62n8++etSB0MA1oCoQo87MCeWylOFt+yzq2a6wpvU9uOvQRiiCD+tQ== - dependencies: - "@microsoft/api-extractor" "^7.3.9" - shelljs "0.8.2" - tsickle "^0.38.0" - -"@angular/cli@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" - integrity sha512-ofum4gPE/W3fKyzuJrpdHeOS0ZL8x0eYCgsrMyUoFodSpb5LWPqeW+56NgDTpIeny+Trx3pM9dr9QTUVTJ0vYg== - dependencies: - "@angular-devkit/architect" "0.901.0" - "@angular-devkit/core" "9.1.0" - "@angular-devkit/schematics" "9.1.0" - "@schematics/angular" "9.1.0" - "@schematics/update" "0.901.0" +"@angular/animations@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.2.4.tgz#6c222aa1f4efd078f4c7388235ef5b9144bf80a4" + integrity sha512-ovlfHxY1C6yH6SdfWIG1WqB77GHfuJ4i3jItvf0qFSvbOHG8OOzrSOR6EVRJYTnre4r4pQ3V8cDFy3igBlWXUw== + dependencies: + tslib "^2.0.0" + +"@angular/cli@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.2.1.tgz#5c8dc126969edfe6d11ed63bb5451656c9203081" + integrity sha512-9u/IVZqESiNX7qsLDW31MPBFUJUqvc+zqq+ekEtjRopq32RQpAGFWfvRZCR6GyJd06gzUWcYeYKkpl1XFNBXUg== + dependencies: + "@angular-devkit/architect" "0.1002.1" + "@angular-devkit/core" "10.2.1" + "@angular-devkit/schematics" "10.2.1" + "@schematics/angular" "10.2.1" + "@schematics/update" "0.1002.1" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.1.1" - ini "1.3.5" - inquirer "7.1.0" + ini "1.3.6" + inquirer "7.3.3" npm-package-arg "8.0.1" - npm-pick-manifest "6.0.0" - open "7.0.3" - pacote "11.1.4" + npm-pick-manifest "6.1.0" + open "7.2.0" + pacote "9.5.12" read-package-tree "5.3.1" rimraf "3.0.2" - semver "7.1.3" + semver "7.3.2" symbol-observable "1.2.0" - universal-analytics "0.4.20" - uuid "7.0.2" + universal-analytics "0.4.23" + uuid "8.3.0" -"@angular/common@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.1.0.tgz#f9b5353a28f9da6c06266bc7244bbabf9e005176" - integrity sha512-6JPLNtMhI03bGTVQJeSwc+dTjV6DtP7M/BAyzIV0InZP1D6XsOh2QahLFIaaN2sSxYA2ClKuwfX1v+rx9AbXQA== +"@angular/common@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.2.4.tgz#fb1772ea5780c96e00411900c54457f0cbcf401b" + integrity sha512-bBfsLJNDQaC2OI1mReDJuSZ/uBb7Pf3HVpRmlQKNIPllIxqX1hLH8I3Plodrns9m32JMJ6FMsQthcP0KMdRCJA== + dependencies: + tslib "^2.0.0" -"@angular/compiler-cli@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" - integrity sha512-xZ8mVPmPporSTtvNA+cbFJQymLzuWfMX6HDDgztZ2eZ5WcQJYloRN4CcYMEzDhCxfV1Zw9Tfc2l14jZD8osi6g== +"@angular/compiler-cli@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.2.4.tgz#e90f943fc34edf3a2d65ef2d7fe27fafa0b365d7" + integrity sha512-gpw7Px6c2EaVUiDrU4PLaxf5zk8oJ72Yq62YZ8k4Jd7Vhl39Bhx9a9/I3GFQzZ8X6W/VJMWfZRs3E7bm1krRkw== dependencies: canonical-path "1.0.0" chokidar "^3.0.0" @@ -197,364 +196,437 @@ semver "^6.3.0" source-map "^0.6.1" sourcemap-codec "^1.4.8" - yargs "15.3.0" - -"@angular/compiler@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" - integrity sha512-QHw/JSeTXHiJQ2Ih0EtU7FGsYcOr+0hwZhqwSW3EEn8TtUgA3DS5lXeiDV66f+3DdvNZFPmgiZIvun3ypxn1HA== - -"@angular/core@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" - integrity sha512-RVlyegdIAij0P1wLY5ObIdsBAzvmHkHfElnmfiNKhaDftP6U/3zRtaKDu0bq0jvn1WCQ8zXxFQ8AWyKZwyFS+w== - -"@angular/forms@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-9.1.0.tgz#de14e34aa37bd41a28f93fee8666cd7f6393078c" - integrity sha512-5GC8HQlPChPV+168zLlm4yj4syA6N9ChSKV0tmzj1zIfMcub1UAOaB9IYaXRHQsjPFh9OuQXwmkzScyAfhEVjA== - -"@angular/platform-browser-dynamic@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.0.tgz#830bd5038d1875736e87e68c3aef44f0f835e418" - integrity sha512-sMtz/poQ3TYaWZzWjrn9apKUZ/WKql2MYCWbpax7pql3GgC9OoTslc7ZEe7/d3ynfFE/CQqWBBOuWGD71Z0LMQ== - -"@angular/platform-browser@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.1.0.tgz#0bd40db37c9e314944c149de935b0f6cdd1f7350" - integrity sha512-OsS/blUjl8ranmDaRADjFAmvnlmwbT6WNU7dVov7FhV0rqesbwaOJ5bR0LSYHYpej7Jaa6oYk0v0XWkaH9LTFg== - -"@angular/router@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-9.1.0.tgz#df059c0f64fa41ada8f6b5ce741fe47d49f10194" - integrity sha512-cExO1nPnoPFiUJWZ28hTHozPLFoCmqr3xqcM57We0hhKE0esdrO+gRWKRH0EJERukLbU8coPKVhA8daGUpASiQ== - -"@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" + tslib "^2.0.0" + yargs "^16.1.1" -"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" - integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== +"@angular/compiler@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.2.4.tgz#87ed92bae04dab78eace179ec93ec563e2d946bc" + integrity sha512-xkpDQJt9047eT+HPEoJoJ7TVN+yXIFL0EcYP9pE+jG/f7H8re6Nwf2sBXa91dyCYBanXGMRbivbXIjqLGOfzbA== dependencies: - browserslist "^4.9.1" - invariant "^2.2.4" - semver "^5.5.0" + tslib "^2.0.0" -"@babel/core@7.9.0", "@babel/core@^7.7.5": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@7.9.3": - version "7.9.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.3.tgz#7c8b2956c6f68b3ab732bd16305916fbba521d94" - integrity sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ== +"@angular/core@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.2.4.tgz#1124061f8232d79fcff7508c9243ec5ec3fc00f3" + integrity sha512-5xpAvmZwD9nZ8eWx10urjibqEeePGEiFXVMEn3IaJWgfdOcMmeSoioW9JUllT3w85+DlNVWbRbhz0YfE9a4jyw== dependencies: - "@babel/types" "^7.9.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + tslib "^2.0.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" - integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== +"@angular/forms@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.2.4.tgz#83254fdd0f1fdcee8809175f19a804c7be5ea8e9" + integrity sha512-nrag/3+sjclH5mYqgM9UKzjotMGDCYBlPMqLt2Mj8rIxtAPRxfKmzAhxf4lRw3RTzMvOLM0rBRJagpi5glyLEw== dependencies: - "@babel/types" "^7.9.5" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-compilation-targets@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" - integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== - dependencies: - "@babel/compat-data" "^7.8.6" - browserslist "^4.9.1" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" + tslib "^2.0.0" -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== +"@angular/platform-browser-dynamic@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.2.4.tgz#c2fc87f9edf862a9f310f34a7a1f9082b259f73a" + integrity sha512-+oON9ujv9EOC3yJVgnV/vy3262dpMKBFlQ+dHcr5rfk2WpsnyJ26R+Nhkaug9FEdmSo9w+GqowF5bodrtTOTlA== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.7.0" + tslib "^2.0.0" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@angular/platform-browser@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.2.4.tgz#08fa0cfff88951120d00327993e00a4454ce0230" + integrity sha512-gYewLxoTnxOxX3XXK959YiDaw8CEnksKIbK6RYuofIcB8dTL9AlS9/l22xdGifTXTkFjs8noO6i/WT5hCt49Ww== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" + tslib "^2.0.0" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@angular/router@10.2.4": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.2.4.tgz#0c6a680d8cbf8f5ce8b904636c8ee0e75765124d" + integrity sha512-y3xMwZHWS84fbm3FoU8vTAeXaTuPd4ZfmZ3dhkG9c1tkVq/jCmc6pkqNxjv3L1iPenKrvt2bFhh+wCs+bcUPhw== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + tslib "^2.0.0" -"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/highlight" "^7.10.4" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" +"@babel/compat-data@^7.11.0", "@babel/compat-data@^7.12.5": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/core@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== dependencies: - "@babel/types" "^7.8.3" + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" +"@babel/core@^7.7.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/generator@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== +"@babel/generator@^7.11.0", "@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.4.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" - lodash "^4.17.13" + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.10" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - lodash "^4.17.13" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" - integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== +"@babel/helper-compilation-targets@^7.10.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.11.0", "@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4", "@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== +"@babel/parser@^7.10.4", "@babel/parser@^7.11.1", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/helpers@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" - integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.4.3", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" - integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" @@ -563,6 +635,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -570,6 +649,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -577,6 +663,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" @@ -584,12 +677,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -612,327 +705,350 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== +"@babel/plugin-transform-classes@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" - integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== +"@babel/plugin-transform-for-of@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-function-name@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" - integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" - integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" - integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-new-target@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-object-super@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" -"@babel/plugin-transform-parameters@^7.8.7", "@babel/plugin-transform-parameters@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" - integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== +"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/preset-env@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" - integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.0" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.0" - browserslist "^4.9.1" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" semver "^5.5.0" "@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -940,77 +1056,112 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/runtime@7.11.2": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.8.4": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@7.8.6", "@babel/template@^7.4.0", "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" - integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.5" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.5" +"@babel/template@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.4.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" + lodash "^4.17.19" -"@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" - integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.0", "@babel/types@^7.4.4": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" to-fast-properties "^2.0.0" -"@bazel/hide-bazel-files@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@bazel/hide-bazel-files/-/hide-bazel-files-1.1.0.tgz#a7d46a4aa3717150b54fde05b2f8b6bab733f493" - integrity sha512-JJ9eMKPBodWugC4Wu0QLe0saDZ971RcP2kjZbG1vJfQHn/gnxvw+4nXDRwei5EzxBsGGuLxY1MkNDtRFIfZr5w== +"@bazel/angular@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/angular/-/angular-2.0.0.tgz#fe010d546641accb3cde29730ff686ce04c1de6b" + integrity sha512-ZY8sDsfdl77CHuoJ2pMR4C1yuSvP66gc375EU0kSMZQOnStOksZ7g9ZxtGyBPyXH/kWCUE7uEncEZdj/+TZoAA== + dependencies: + "@angular-devkit/architect" "^0.901.7" + "@bazel/bazelisk" "^1.4.0" + "@bazel/ibazel" "^0.13.1" -"@bazel/karma@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@bazel/karma/-/karma-1.6.0.tgz#98950b71114dd9ec169e6778a35d31ae1f578655" - integrity sha512-9cX0E1SiMWwA70ZMFnMzeqSRn3biduGx03bGV77FSUYKocZpyfU2cOEygYGfxAqHnyM7x4cS8nflRv3+ZE0Aqg== +"@bazel/bazelisk@^1.4.0": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@bazel/bazelisk/-/bazelisk-1.7.3.tgz#51d99286326e15434ce10c54c1ee598c4ab1f694" + integrity sha512-A+QLZvKifKnbFawH5aaCnooPx0Ia5JS3S8SckKB034GVB3BjtUTCwjaxzxG3ARQ6Jq1vDcQwWgF2bjT9FjrdDg== + +"@bazel/buildifier@^3.4.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@bazel/buildifier/-/buildifier-3.5.0.tgz#afbee61d61543d0a0a28e2b29a5cbdb64c852953" + integrity sha512-cbUS0/GMg57g6NIg6JekgmqVtuobYzW4aGHk7KzMS/bFZvxg6WY19JJ5UZSzGyAGDu2152oUTFbh4WN74Fz1+Q== + +"@bazel/ibazel@^0.13.1": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.13.2.tgz#eb914c41c66af4606db786457a7b130634355e8f" + integrity sha512-q5fGwjTY76MLNcYpF2zEu/y1Clu4DjdjhvJM9+yDKc3+3mBlbX+uiMJYiCz5b0oSYdJTlw1QSRptTYA7CID8EQ== + +"@bazel/karma@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/karma/-/karma-2.0.0.tgz#a386ba334716e6d94c667c9b40423955a727c896" + integrity sha512-VR/qzsH9/G1eJ0xqicoT7ea6FdiQGW0gd6FzPNecJnqm7OQjhKn7htRWvTONTNXoWl4qCIHTtW+RJ9piH1zU3Q== dependencies: tmp "0.1.0" -"@bazel/protractor@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-1.6.0.tgz#cf095a1dbc038def7031c513a3b87f4e79bedb00" - integrity sha512-gPiRv0oUJbVPpQ9nrwe5vjkffAc8VsYJhpTGgG+8aPdOaTLWgmBP/sy4BdfijU9O1Z/mNYojQCZgMzQz6kAvdg== +"@bazel/protractor@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-2.0.0.tgz#1b67a2f61c7124a25ae4322b585f91a26592458b" + integrity sha512-mr+Jkg/Ta5cp1FQevbV9DqXidDmScX3vy82HjAIew1Y1aQMT9SJ5RVopSSQFe/pIx/zodpAiW1D6lynPiwS1Cw== -"@bazel/rollup@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-1.6.0.tgz#c0bdad0ad0ba5c5b2e21d1634dc2ce48840ca044" - integrity sha512-MLF7laHX3CSAJH+RbIEVWgnQdz3U8dPkdJWJqiX/z9mUSEgC47LNsMBPKlRy1TpOJOpw1j0vLaJv0qN/bgq9NQ== +"@bazel/rollup@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-2.0.0.tgz#1980cb3f6922227659260bfdca99c457889a5bc1" + integrity sha512-mifUfCZbD1RIhfowh4N8E4881ag3FChz7F4z35wxMOP52g1q3+6Bvh5wv9iysFQopxGmS5jNEj3Dq/CWtSoOnw== -"@bazel/terser@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-1.6.0.tgz#63ccd20dd6c9793e7b3b23fb5ea82b55b3ef6eb2" - integrity sha512-csBrN4XfX/hYTtDVcH/ulVO9K4Ca/IlrCWk5o/l7JBJq/cHoTj5AWIA7PKJ4QgnxXeEjso4CmLFgUMEVKVYV3Q== +"@bazel/terser@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-2.0.0.tgz#a841db8aefd7c51c216b34a26bc02a6c93d5e56a" + integrity sha512-6mBYcfzP6pWxycYZ8r4Lz5kgiWZ7n08bVHZBIRExFeqs7Yy92dD92LPeA9FZIzFiX00IuR9Q1Lqy23xH5q7FeQ== -"@bazel/typescript@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-1.6.0.tgz#8dfd29e71bcf917d5f9cb67f19ac4dcfc9082439" - integrity sha512-vAKuwy1Hgl+t3M3sH/G0oqHRYN35TdENj+0lsCI3x7EbSzyI6cbA3YQrLrlyvdScksqOpZa3PZ3UBGqfJJq2DA== +"@bazel/typescript@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-2.0.0.tgz#2ff5615f09c733cc681ba2ada92b11c356b694cd" + integrity sha512-5FPkxULWIjAKLG5J1XvpXpY1/4IK39dAoWA/Hhg+16gXTES32fT8w42k96pb6BTaNnyBuYgIHBpELEAJ40OOAQ== dependencies: protobufjs "6.8.8" semver "5.6.0" @@ -1022,89 +1173,53 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jsdevtools/coverage-istanbul-loader@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz#102e414b02ae2f0b3c7fd45a705601e1fd4867c5" - integrity sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA== +"@jsdevtools/coverage-istanbul-loader@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" + integrity sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA== dependencies: convert-source-map "^1.7.0" - istanbul-lib-instrument "^4.0.1" - loader-utils "^1.4.0" + istanbul-lib-instrument "^4.0.3" + loader-utils "^2.0.0" merge-source-map "^1.1.0" - schema-utils "^2.6.4" - -"@microsoft/api-extractor-model@7.7.11": - version "7.7.11" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.7.11.tgz#9dfc5425f4a6a2b6b1ebc39332ae8101ab8da36a" - integrity sha512-Kf3RytYDq7sP4ASaaA9IcvaOPbVj1Xj34E2Wxd9DznI7sG4HzcpoOGmxaZHCzyYVh7wfAaAlvcXf3SV+djhNZw== - dependencies: - "@microsoft/tsdoc" "0.12.19" - "@rushstack/node-core-library" "3.19.7" - -"@microsoft/api-extractor@^7.3.9": - version "7.7.13" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.7.13.tgz#7ee70978825a36d294d26e50b5d888ca3789d1b0" - integrity sha512-7+EGunGd7OSfDxZl4aDI4qMWG98+I84vTryNadti+IfgpB9IyhJtgA4r3dCG7hewTwKACBhi5aPqpH2C7l/30A== - dependencies: - "@microsoft/api-extractor-model" "7.7.11" - "@microsoft/tsdoc" "0.12.19" - "@rushstack/node-core-library" "3.19.7" - "@rushstack/ts-command-line" "4.3.14" - colors "~1.2.1" - lodash "~4.17.15" - resolve "1.8.1" - source-map "~0.6.1" - typescript "~3.7.2" - -"@microsoft/tsdoc@0.12.19": - version "0.12.19" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.19.tgz#2173ccb92469aaf62031fa9499d21b16d07f9b57" - integrity sha512-IpgPxHrNxZiMNUSXqR1l/gePKPkfAmIKoDRP9hp7OwjU29ZR8WCJsOJ8iBKgw0Qk+pFwR+8Y1cy8ImLY6e9m4A== + schema-utils "^2.7.0" -"@ngtools/webpack@9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-9.1.1.tgz#d67c23a62cd6d5ff0ca8f46062d9dc4aa7eebff4" - integrity sha512-4RPlk6aIlYhk9isTvXbMaA2G0LhxOzcZ+2iG7zV9Yj/Vm8+lrRexpQ/kC/Dh0GI/oCtKIkVpUzx5LTozYeTLdQ== +"@ngtools/webpack@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.2.1.tgz#4b360993f784244c7d7a62f40312e9eee2a24cc5" + integrity sha512-RKJSoQufHHpLpsGWUas3WEYtFhnCXmf5GiYCEv8d36ITNRKHhQv38FHLq1aen8Jd7F0b3eZFX5JmGvb7JJmVVg== dependencies: - "@angular-devkit/core" "9.1.1" - enhanced-resolve "4.1.1" - rxjs "6.5.4" + "@angular-devkit/core" "10.2.1" + enhanced-resolve "4.3.0" webpack-sources "1.4.3" -"@npmcli/ci-detect@^1.0.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" - integrity sha512-JtktVH7ASBVIWsQTFlFpeOzhBJskvoBCTfeeRhhZy7ybATcUvwiwotZ8j5rkqUUyB69lIy/AvboiiiGBjYBKBA== - -"@npmcli/git@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" - integrity sha512-hVatexiBtx71F01Ars38Hr5AFUGmJgHAfQtRlO5fJlnAawRGSXwEFgjB5i3XdUUmElZU/RXy7fefN02dZKxgPw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@npmcli/promise-spawn" "^1.1.0" - mkdirp "^1.0.3" - npm-pick-manifest "^6.0.0" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - unique-filename "^1.1.1" - which "^2.0.2" + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" -"@npmcli/installed-package-contents@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" - integrity sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - read-package-json-fast "^1.1.1" - readdir-scoped-modules "^1.1.0" + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" -"@npmcli/promise-spawn@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.2.0.tgz#167d70b926f771c8bd8b9183bfc8b5aec29d7e45" - integrity sha512-nFtqjVETliApiRdjbYwKwhlSHx2ZMagyj5b9YbNt0BWeeOVxJd47ZVE2u16vxDHyTOZvk+YLV7INwfAE9a2uow== +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== dependencies: - infer-owner "^1.0.4" + mkdirp "^1.0.4" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -1159,82 +1274,79 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@rushstack/node-core-library@3.19.7": - version "3.19.7" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.19.7.tgz#8d8a193fd6f99536c92dd797ab50fd5fcb7630ea" - integrity sha512-gKE/OXH5GAj8yJ1kEyRW68UekJernilZ3QTRgmQ0MUHBCQmtZ9Q6T5PQ1sVbcL4teH8BMdpZeFy1DKnHs8h3PA== - dependencies: - "@types/node" "10.17.13" - colors "~1.2.1" - fs-extra "~7.0.1" - jju "~1.4.0" - semver "~5.3.0" - timsort "~0.3.0" - z-schema "~3.18.3" - -"@rushstack/ts-command-line@4.3.14": - version "4.3.14" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.3.14.tgz#5d7a437d4e9c564ff1b8e876215fca96c74858a1" - integrity sha512-YJZIyKvkm3f6ZdKSfMntHS9542Y2mmMWzaiPPoXxLFZntKxEIDE3WfUNlvOSo3yK4fNd09Tz3hfvTivQNHSiKQ== - dependencies: - "@types/argparse" "1.0.33" - argparse "~1.0.9" - colors "~1.2.1" - -"@schematics/angular@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" - integrity sha512-qkehaITQ1S1udfnnBY5CXGWnk1iVFI8cZayjLUlRfD5w+6v9if3VIuqPssX96MqvkbjyRu1N214+ieaawzLmuA== - dependencies: - "@angular-devkit/core" "9.1.0" - "@angular-devkit/schematics" "9.1.0" - -"@schematics/update@0.901.0": - version "0.901.0" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" - integrity sha512-u2VESL1dgOSGZK/wcWEz0WcCU/yv764zhzCQerCwUtbV1CISSSDZ6x+prVYDXOdxWBGtDos2MbCF3GEJJI1T+w== - dependencies: - "@angular-devkit/core" "9.1.0" - "@angular-devkit/schematics" "9.1.0" +"@rollup/plugin-commonjs@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz#4285f9ec2db686a31129e5a2b415c94aa1f836f0" + integrity sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== + dependencies: + "@rollup/pluginutils" "^3.0.8" + commondir "^1.0.1" + estree-walker "^1.0.1" + glob "^7.1.2" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-node-resolve@^8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz#261d79a680e9dc3d86761c14462f24126ba83575" + integrity sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deep-freeze "^0.0.1" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@schematics/angular@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.2.1.tgz#cd523c9c9491e5ed9701f6b92f2b0593eedff56e" + integrity sha512-hmhZ6zPJshP1ATYc/EzJPwaFas0D+T6eeWEFyHAgIV2GmNdJNyBdKHQtizGRQBpfWvBdI4/krvX+a71VnkU8oA== + dependencies: + "@angular-devkit/core" "10.2.1" + "@angular-devkit/schematics" "10.2.1" + jsonc-parser "2.3.0" + +"@schematics/update@0.1002.1": + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1002.1.tgz#5e0d07498444f19c34e73ebe142d368d6f3f5bf0" + integrity sha512-RbC01VKb9q7Db5rpbrQLBOVkIzv3TPWMjRUSgg/LlLFEDVO3LPn5nX9bYnb6E0HeIqUW+zAU5Qaz9ob/Py06LA== + dependencies: + "@angular-devkit/core" "10.2.1" + "@angular-devkit/schematics" "10.2.1" "@yarnpkg/lockfile" "1.1.0" - ini "1.3.5" + ini "1.3.6" npm-package-arg "^8.0.0" - pacote "11.1.4" - rxjs "6.5.4" - semver "7.1.3" + pacote "9.5.12" + semver "7.3.2" semver-intersect "1.4.0" -"@tootallnate/once@1": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" - integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== - -"@types/argparse@1.0.33": - version "1.0.33" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.33.tgz#2728669427cdd74a99e53c9f457ca2866a37c52d" - integrity sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" @@ -1243,6 +1355,11 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.4.0.tgz#018c56db42400c092aae47de21f710b7f04e4b06" integrity sha512-6pUnBg6DuSB55xnxJ5+gW9JOkFrPsXkYAuqqEE8oyrpgDiPQ+TZ+1Zt4S+CHcRJcxyNYXeIXG4vHSzdF6y9Uvw== +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + "@types/long@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" @@ -1254,29 +1371,19 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.11.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" - integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== + version "14.14.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.16.tgz#3cc351f8d48101deadfed4c9e4f116048d437b4b" + integrity sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw== "@types/node@10.14.22": version "10.14.22" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4" integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw== -"@types/node@10.17.13": - version "10.17.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" - integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== - "@types/node@^10.1.0": - version "10.17.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.19.tgz#1d31ddd5503dba2af7a901aafef3392e4955620e" - integrity sha512-46/xThm3zvvc9t9/7M3AaLEqtOpqlYYYcCZbpYVAQHG20+oMZBkae/VMrn4BTi6AJ8cpack0mEXhGiKmDNbLrQ== - -"@types/node@^12.7.5": - version "12.12.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.35.tgz#1e61b226c14380f4384f70cfe49a65c2c553ad2b" - integrity sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ== + version "10.17.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.50.tgz#7a20902af591282aa9176baefc37d4372131c32d" + integrity sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA== "@types/q@^0.0.32": version "0.0.32" @@ -1284,14 +1391,14 @@ integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" @@ -1306,158 +1413,157 @@ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/webpack-sources@^0.1.5": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" - integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== + version "0.1.8" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.8.tgz#078d75410435993ec8a0a2855e88706f3f751f81" + integrity sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.6.1" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== - dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== - -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1475,6 +1581,19 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1483,53 +1602,54 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn@^6.2.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" adm-zip@^0.4.9: - version "0.4.14" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" - integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@6: - version "6.0.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" - integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== - dependencies: - debug "4" - -agent-base@^4.3.0: +agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" -agentkeepalive@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" - integrity sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg== +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== dependencies: - debug "^4.1.0" - depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" @@ -1539,15 +1659,35 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@6.12.4: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -ajv@6.12.0, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1591,6 +1731,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -1601,7 +1746,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1609,11 +1754,10 @@ ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" anymatch@^2.0.0: @@ -1644,13 +1788,18 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -argparse@^1.0.7, argparse@~1.0.9: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1683,6 +1832,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1703,19 +1857,20 @@ arrify@^1.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@^2.0.0, asap@~2.0.3: +asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.4" @@ -1752,7 +1907,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.5.0, async@^2.6.2: +async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1769,18 +1924,18 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@9.7.4: - version "9.7.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" - integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== +autoprefixer@9.8.6: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== dependencies: - browserslist "^4.8.3" - caniuse-lite "^1.0.30001020" - chalk "^2.4.2" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.26" - postcss-value-parser "^4.0.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" aws-sign2@~0.7.0: version "0.7.0" @@ -1788,24 +1943,25 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" @@ -1825,9 +1981,9 @@ base64-arraybuffer@0.1.5: integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@1.0.0: version "1.0.0" @@ -1877,9 +2033,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" @@ -1900,15 +2056,20 @@ blocking-proxy@^1.0.0: dependencies: minimist "^1.2.0" -bluebird@^3.3.0, bluebird@^3.5.5: +bluebird@^3.3.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== body-parser@1.19.0, body-parser@^1.16.1: version "1.19.0" @@ -1967,7 +2128,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2010,26 +2171,28 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -2038,20 +2201,21 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.8.3, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" - integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.9.1: + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== dependencies: - caniuse-lite "^1.0.30001038" - electron-to-chromium "^1.3.390" - node-releases "^1.1.53" - pkg-up "^2.0.0" + caniuse-lite "^1.0.30001165" + colorette "^1.2.1" + electron-to-chromium "^1.3.621" + escalade "^3.1.1" + node-releases "^1.1.67" browserstack@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.6.0.tgz#5a56ab90987605d9c138d7a8b88128370297f9bf" - integrity sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw== + version "1.6.1" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.6.1.tgz#e051f9733ec3b507659f395c7a4765a1b1e358b3" + integrity sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw== dependencies: https-proxy-agent "^2.2.1" @@ -2098,9 +2262,9 @@ buffer@^4.3.0: isarray "^1.0.0" builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== builtin-status-codes@^3.0.0: version "3.0.0" @@ -2122,30 +2286,30 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@15.0.0, cacache@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" - integrity sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g== +cacache@15.0.5, cacache@^15.0.4, cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: - chownr "^1.1.2" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" fs-minipass "^2.0.0" glob "^7.1.4" infer-owner "^1.0.4" - lru-cache "^5.1.1" + lru-cache "^6.0.0" minipass "^3.1.1" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.2" mkdirp "^1.0.3" - move-concurrently "^1.0.1" - p-map "^3.0.0" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.7.1" + rimraf "^3.0.2" ssri "^8.0.0" - tar "^6.0.1" + tar "^6.0.2" unique-filename "^1.1.1" -cacache@^12.0.2, cacache@^12.0.3: +cacache@^12.0.0, cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== @@ -2166,30 +2330,6 @@ cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2205,6 +2345,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2229,11 +2377,16 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -camelcase@^5.0.0: +camelcase@5.3.1, camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2244,10 +2397,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001038: - version "1.0.30001041" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" - integrity sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165: + version "1.0.30001171" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001171.tgz#3291e11e02699ad0a29e69b8d407666fc843eba7" + integrity sha512-5Alrh8TTYPG9IH4UkRqEBZoEToWRLvPbSQokvzSz0lii8/FOWKG4keO1HoYfPWs8IF/NH/dyNPg1cmJGvV3Zlg== canonical-path@1.0.0: version "1.0.0" @@ -2279,10 +2432,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -2292,10 +2445,10 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2303,7 +2456,7 @@ chardet@^0.7.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.3.0" + readdirp "~3.5.0" optionalDependencies: fsevents "~2.1.2" @@ -2326,11 +2479,16 @@ chokidar@^2.0.3, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3, chownr@^1.1.4: +chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -2373,15 +2531,15 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" - integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== +cli-spinners@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^4.0.0: version "4.1.0" @@ -2392,30 +2550,30 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1, clone@^2.1.2: +clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -2466,32 +2624,32 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== dependencies: color-convert "^1.9.1" - color-string "^1.5.2" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== colors@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colors@~1.2.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2499,7 +2657,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2, commander@^2.20.0, commander@^2.7.1: +commander@2, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2534,6 +2692,13 @@ component-inherit@0.0.3: resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -2606,13 +2771,18 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.5.1, convert-source-map@^1.7.0: +convert-source-map@1.7.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -2628,6 +2798,13 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-anything@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.1.tgz#2afbce6da684bdfcbec93752fa762819cb480d9a" + integrity sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g== + dependencies: + is-what "^3.7.1" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -2645,30 +2822,29 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz#5481a03dea1123d88a988c6ff8b78247214f0b88" - integrity sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg== - dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" +copy-webpack-plugin@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz#2b3d2bfc6861b96432a65f0149720adbd902040b" + integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA== + dependencies: + cacache "^15.0.4" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^2.1.2" - webpack-log "^2.0.0" + p-limit "^3.0.1" + schema-utils "^2.7.0" + serialize-javascript "^4.0.0" + webpack-sources "^1.4.3" core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== dependencies: - browserslist "^4.8.5" + browserslist "^4.15.0" semver "7.0.0" core-js@2.6.9: @@ -2682,9 +2858,9 @@ core-js@3.6.4: integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== core-js@^2.2.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2702,14 +2878,14 @@ cosmiconfig@^5.0.0: parse-json "^4.0.0" create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2720,7 +2896,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2773,6 +2949,24 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-loader@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.2.tgz#b668b3488d566dc22ebcf9425c5f254a05808c89" + integrity sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^7.3.2" + css-parse@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" @@ -2803,18 +2997,18 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@1.0.0-alpha.39: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== dependencies: - mdn-data "2.0.6" + mdn-data "2.0.14" source-map "^0.6.1" css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== css@^2.0.0: version "2.2.4" @@ -2900,11 +3094,11 @@ cssnano@4.1.10: postcss "^7.0.0" csso@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: - css-tree "1.0.0-alpha.39" + css-tree "^1.1.2" custom-event@~1.0.0: version "1.0.1" @@ -2927,9 +3121,9 @@ d3-axis@1: integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ== d3-brush@1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc" - integrity sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A== + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.6.tgz#b0a22c7372cabec128bdddf9bddc058592f89e9b" + integrity sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA== dependencies: d3-dispatch "1" d3-drag "1" @@ -2951,9 +3145,9 @@ d3-collection@1: integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== d3-color@1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf" - integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== d3-contour@1: version "1.3.2" @@ -2985,14 +3179,14 @@ d3-dsv@1: rw "1" d3-ease@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" - integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2" + integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ== d3-fetch@1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.1.2.tgz#957c8fbc6d4480599ba191b1b2518bf86b3e1be2" - integrity sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.2.0.tgz#15ce2ecfc41b092b1db50abd2c552c2316cf7fc7" + integrity sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA== dependencies: d3-dsv "1" @@ -3007,14 +3201,14 @@ d3-force@1: d3-timer "1" d3-format@1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" - integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== + version "1.4.5" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" + integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== d3-geo@1: - version "1.11.9" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.9.tgz#77eaed14ba62fc2c0aef55cd2943849c866f7ae6" - integrity sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A== + version "1.12.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f" + integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg== dependencies: d3-array "1" @@ -3071,9 +3265,9 @@ d3-scale@2: d3-time-format "2" d3-selection@1, d3-selection@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" - integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" + integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== d3-shape@1: version "1.3.7" @@ -3083,9 +3277,9 @@ d3-shape@1: d3-path "1" d3-time-format@2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" - integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" + integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== dependencies: d3-time "1" @@ -3127,10 +3321,10 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3@^5.15.0: - version "5.15.1" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.15.1.tgz#7a8f32208559505bf1f56537a31c3fb8e76a519b" - integrity sha512-Xu9gT6Lm0jH3wWJJSRomFwqnGGi3YAfWIfxNFl4++YVgYOjo3F8V2idAG3nJBgpZOkD0/RHPZX6F4k6tzgOvYw== +d3@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.16.0.tgz#9c5e8d3b56403c79d4ed42fbd62f6113f199c877" + integrity sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw== dependencies: d3-array "1" d3-axis "1" @@ -3164,6 +3358,14 @@ d3@^5.15.0: d3-voronoi "1" d3-zoom "1" +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3171,6 +3373,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + date-format@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" @@ -3183,26 +3394,33 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1: +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "2.0.0" + ms "2.1.2" debuglog@^1.0.1: version "1.0.1" @@ -3231,6 +3449,16 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-freeze@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" + integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -3253,7 +3481,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -3313,7 +3541,7 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -3363,12 +3591,12 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - path-type "^3.0.0" + path-type "^4.0.0" dns-equal@^1.0.0: version "1.0.0" @@ -3419,9 +3647,9 @@ domelementtype@1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== domutils@^1.7.0: version "1.7.0" @@ -3432,9 +3660,9 @@ domutils@^1.7.0: domelementtype "1" dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" @@ -3461,15 +3689,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.390: - version "1.3.405" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.405.tgz#b84fcb157edb26eae6c36d93d416cb51caa399bd" - integrity sha512-D+xkP+hAQY/790DzImC8bI8QJLaArNG4b74bYvkhkK/fli51JmNyUYxwKLSl/8VPGkkXEqKCupSDD05/E5P72w== +electron-to-chromium@^1.3.621: + version "1.3.633" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz#16dd5aec9de03894e8d14a1db4cda8a369b9b7fe" + integrity sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA== -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3479,11 +3707,21 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3494,12 +3732,12 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" @@ -3548,10 +3786,10 @@ engine.io@~3.2.0: engine.io-parser "~2.1.0" ws "~3.3.1" -enhanced-resolve@4.1.1, enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== +enhanced-resolve@4.3.0, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -3563,9 +3801,9 @@ ent@~2.2.0: integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== err-code@^1.0.0: version "1.1.2" @@ -3573,9 +3811,9 @@ err-code@^1.0.0: integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -3586,22 +3824,40 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -3612,6 +3868,24 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -3624,6 +3898,19 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3648,21 +3935,26 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== esutils@^2.0.2: version "2.0.3" @@ -3675,14 +3967,14 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: version "1.0.7" @@ -3766,6 +4058,13 @@ express@^4.14.0, express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3820,15 +4119,34 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fastq@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + dependencies: + reusify "^1.0.4" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -3843,7 +4161,7 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" -figgy-pudding@^3.5.1: +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== @@ -3906,7 +4224,7 @@ finalhandler@1.1.2, finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@3.3.1, find-cache-dir@^3.2.0: +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -3915,7 +4233,7 @@ find-cache-dir@3.3.1, find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -3924,13 +4242,6 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3938,7 +4249,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -3960,11 +4271,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== - dependencies: - debug "^3.0.0" + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== for-in@^1.0.2: version "1.0.2" @@ -4026,7 +4335,7 @@ fs-extra@4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.1, fs-extra@~7.0.1: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -4035,7 +4344,14 @@ fs-extra@^7.0.1, fs-extra@~7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -4058,39 +4374,53 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" - integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stream@^4.0.0: +get-intrinsic@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -4117,14 +4447,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" -glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.1.6, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4141,6 +4471,18 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" @@ -4164,22 +4506,10 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== handle-thing@^2.0.0: version "2.0.1" @@ -4192,11 +4522,11 @@ har-schema@^2.0.0: integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: @@ -4228,7 +4558,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0, has-symbols@^1.0.1: +has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -4272,12 +4602,13 @@ has@^1.0.0, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -4310,17 +4641,17 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4: +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -hosted-git-info@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" - integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== +hosted-git-info@^3.0.2, hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== dependencies: - lru-cache "^5.1.1" + lru-cache "^6.0.0" hpack.js@^2.1.6: version "2.1.6" @@ -4347,10 +4678,10 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-entities@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -4365,10 +4696,10 @@ html-insert-assets@0.6.0: mkdirp "^1.0.3" parse5 "^5.1.1" -http-cache-semantics@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-deceiver@^1.2.7: version "1.2.7" @@ -4407,19 +4738,18 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" + agent-base "4" + debug "3.1.0" http-proxy-middleware@0.19.1: version "0.19.1" @@ -4432,9 +4762,9 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.13.0, http-proxy@^1.16.2, http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -4454,7 +4784,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1: +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== @@ -4462,14 +4792,6 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -4477,34 +4799,48 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: +iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.3: +ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== image-size@~0.5.0: version "0.5.5" @@ -4579,7 +4915,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4594,26 +4930,31 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.5, ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +ini@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.6.tgz#f1c46a2a93a253e7b3905115e74d527cd23061a1" + integrity sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -4626,12 +4967,7 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - -invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -4683,9 +5019,11 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -4716,10 +5054,10 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== is-color-stop@^1.0.0: version "1.1.0" @@ -4733,6 +5071,13 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4776,9 +5121,9 @@ is-directory@^0.3.1: integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" - integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -4833,16 +5178,16 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4910,24 +5255,19 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - is-reference@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" - integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: - "@types/estree" "0.0.39" + "@types/estree" "*" -is-regex@^1.0.4, is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-resolvable@^1.0.0: version "1.1.0" @@ -4958,6 +5298,11 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-what@^3.7.1: + version "3.12.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" + integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4969,9 +5314,11 @@ is-wsl@^1.1.0: integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is-wsl@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" @@ -5013,9 +5360,9 @@ isstream@~0.1.2: integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-api@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" - integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA== + version "2.1.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.7.tgz#82786b79f3b93d481349c7aa1e2c2b4eeb48c8a8" + integrity sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw== dependencies: async "^2.6.2" compare-versions "^3.4.0" @@ -5025,7 +5372,7 @@ istanbul-api@^2.1.6: istanbul-lib-instrument "^3.3.0" istanbul-lib-report "^2.0.8" istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" + istanbul-reports "^2.2.5" js-yaml "^3.13.1" make-dir "^2.1.0" minimatch "^3.0.4" @@ -5061,15 +5408,12 @@ istanbul-lib-instrument@^3.3.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" -istanbul-lib-instrument@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" - integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: "@babel/core" "^7.7.5" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" "@istanbuljs/schema" "^0.1.2" istanbul-lib-coverage "^3.0.0" semver "^6.3.0" @@ -5094,7 +5438,7 @@ istanbul-lib-source-maps@^3.0.6: rimraf "^2.6.3" source-map "^0.6.1" -istanbul-reports@^2.2.4: +istanbul-reports@^2.2.5: version "2.2.7" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== @@ -5102,9 +5446,9 @@ istanbul-reports@^2.2.4: html-escaper "^2.0.0" jasmine-core@^3.3: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== jasmine-core@~2.8.0: version "2.8.0" @@ -5125,36 +5469,33 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= -jest-worker@25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" - integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== +jest-worker@26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== dependencies: + "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^25.1.0: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.6.tgz#d1292625326794ce187c38f51109faced3846c58" - integrity sha512-FJn9XDUSxcOR4cwDzRfL1z56rUofNTFs539FGASpd50RHdb6EVkhxQqktodW2mI49l+W3H+tFJDotCHUQF6dmA== +jest-worker@^26.3.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: + "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5174,15 +5515,15 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" - integrity sha512-2tLgY7LRNZ9Hd6gmCuBG5/OjRHQpSgJQqJoYyLLOhUgn8LdOYrjaZLcxkWnDads+AD/haWWioPNziXQcgvQJ/g== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -5218,6 +5559,11 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonc-parser@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee" + integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -5225,7 +5571,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: +jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= @@ -5241,9 +5587,9 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.1.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.3.0.tgz#29d72c21a54990fa885b11fc843db320640d5271" - integrity sha512-EJ9k766htB1ZWnsV5ZMDkKLgA+201r/ouFF8R2OigVjVdcm2rurcBrrdXaeqBJbqnUVMko512PYmlncBKE1Huw== + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -5272,9 +5618,9 @@ karma-firefox-launcher@1.1.0: integrity sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA== karma-jasmine-html-reporter@~1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz#c724078436ed7b7d17a47e79164af36eed2d2713" - integrity sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA== + version "1.5.4" + resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.4.tgz#669f33d694d88fce1b0ccfda57111de716cb0192" + integrity sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q== karma-jasmine@2.0.1: version "2.0.1" @@ -5364,6 +5710,11 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klona@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -5371,30 +5722,30 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -less-loader@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" - integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg== +less-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719" + integrity sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg== dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^4.0.1" + clone "^2.1.2" + less "^3.11.3" + loader-utils "^2.0.0" + schema-utils "^2.7.0" -less@3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" - integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== +less@^3.11.3: + version "3.13.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== dependencies: - clone "^2.1.2" + copy-anything "^2.0.1" tslib "^1.10.0" optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" image-size "~0.5.0" + make-dir "^2.1.0" mime "^1.4.1" - mkdirp "^0.5.0" - promise "^7.1.1" - request "^2.83.0" + native-request "^1.0.5" source-map "~0.6.0" leven@^3.1.0: @@ -5409,10 +5760,10 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" -license-webpack-plugin@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz#c5529a4bb87cc9b4489b486d054ba7cae43a554e" - integrity sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ== +license-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz#c00f70d5725ba0408de208acb9e66612cc2eceda" + integrity sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w== dependencies: "@types/webpack-sources" "^0.1.5" webpack-sources "^1.2.0" @@ -5429,6 +5780,15 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + loader-utils@2.0.0, loader-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" @@ -5447,14 +5807,6 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 emojis-list "^3.0.0" json5 "^1.0.1" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -5475,37 +5827,32 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.get@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.isequal@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== dependencies: - chalk "^2.4.2" + chalk "^4.0.0" log4js@^4.0.0: version "4.5.1" @@ -5518,10 +5865,10 @@ log4js@^4.0.0: rfdc "^1.1.4" streamroller "^1.0.6" -loglevel@^1.6.6: - version "1.6.8" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" - integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== long@^4.0.0: version "4.0.0" @@ -5550,6 +5897,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.2: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -5566,37 +5920,28 @@ make-dir@^2.0.0, make-dir@^2.1.0: semver "^5.6.0" make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -make-fetch-happen@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" - integrity sha512-hIFoqGq1db0QMiy/Atr/pI1Rs4rDV+ZdGSey2SQyF3KK3u1z4aj9mS5UdNnZkdQpA+H3pGn0J3KlEwsi2x4EqA== - dependencies: - agentkeepalive "^4.1.0" - cacache "^15.0.0" - http-cache-semantics "^4.0.4" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-fetch "^1.1.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" promise-retry "^1.1.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" map-age-cleaner@^0.1.1: version "0.1.3" @@ -5626,16 +5971,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdn-data@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" - integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -5683,6 +6028,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5707,6 +6057,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5715,17 +6073,22 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -5733,19 +6096,19 @@ mime@1.6.0, mime@^1.4.1: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1, mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz#a0e6bfcad22a9c73f6c882a3c7557a98e2d3d27d" + integrity sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -5786,18 +6149,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" - integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== - dependencies: - minipass "^3.1.0" - minipass-pipeline "^1.2.2" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -5805,39 +6156,39 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - minipass-pipeline@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" - integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: - minipass "^3.0.0" + safe-buffer "^5.1.2" + yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.0.1, minipass@^3.1.0, minipass@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" - integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== dependencies: yallist "^4.0.0" -minizlib@^2.0.0, minizlib@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" - integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" @@ -5866,14 +6217,14 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1, mkdirp@~0.5.x: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -5900,11 +6251,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -5924,9 +6280,9 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanomatch@^1.2.9: version "1.2.13" @@ -5945,25 +6301,44 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +native-request@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" + integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-libs-browser@^2.2.1: version "2.2.1" @@ -5994,12 +6369,12 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^1.1.53: - version "1.1.53" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" - integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== -normalize-package-data@^2.0.0: +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -6041,7 +6416,7 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -npm-bundled@^1.1.1: +npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== @@ -6060,7 +6435,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: +npm-package-arg@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== @@ -6069,26 +6444,35 @@ npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: semver "^7.0.0" validate-npm-package-name "^3.0.0" -npm-packlist@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" - integrity sha512-95TSDvGwujIhqfSpIiRRLodEF+y6mJMopuZdahoGzqtRDFZXGav46S0p6ngeWaiAkb5R72w6eVARhzej0HvZeQ== +npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" -npm-pick-manifest@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" - integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== +npm-package-arg@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" + integrity sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig== dependencies: - npm-install-checks "^4.0.0" - npm-package-arg "^8.0.0" + hosted-git-info "^3.0.6" semver "^7.0.0" + validate-npm-package-name "^3.0.0" -npm-pick-manifest@^6.0.0: +npm-packlist@^1.1.12: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== @@ -6097,19 +6481,27 @@ npm-pick-manifest@^6.0.0: npm-package-arg "^8.0.0" semver "^7.0.0" -npm-registry-fetch@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" - integrity sha512-975WwLvZjX97y9UWWQ8nAyr7bw02s9xKPHqvEm5T900LQsB1HXb8Gb9ebYtCBLSX+K8gSOrO5KS/9yV/naLZmQ== +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-registry-fetch@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== dependencies: - "@npmcli/ci-detect" "^1.0.0" + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" lru-cache "^5.1.1" - make-fetch-happen "^8.0.2" - minipass "^3.0.0" - minipass-fetch "^1.1.2" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" npm-run-path@^2.0.0: version "2.0.2" @@ -6164,17 +6556,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -6186,23 +6581,24 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -6212,13 +6608,13 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.1" has "^1.0.3" obuf@^1.0.0, obuf@^1.1.2: @@ -6246,16 +6642,16 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: wrappy "1" onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" - integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== +open@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4" + integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -6267,7 +6663,7 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimist@^0.6.1, optimist@~0.6.0: +optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= @@ -6275,16 +6671,16 @@ optimist@^0.6.1, optimist@~0.6.0: minimist "~0.0.1" wordwrap "~0.0.2" -ora@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" - integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== +ora@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.0.0.tgz#4f0b34f2994877b49b452a707245ab1e9f6afccb" + integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw== dependencies: - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-spinners "^2.2.0" + cli-spinners "^2.4.0" is-interactive "^1.0.0" - log-symbols "^3.0.0" + log-symbols "^4.0.0" mute-stream "0.0.8" strip-ansi "^6.0.0" wcwidth "^1.0.1" @@ -6301,6 +6697,11 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -6310,11 +6711,19 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -6330,26 +6739,19 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= +p-limit@^3.0.1, p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-limit "^1.1.0" + yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" @@ -6370,10 +6772,10 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" @@ -6384,44 +6786,46 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@11.1.4: - version "11.1.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" - integrity sha512-eUGJvSSpWFZKn3z8gig/HgnBmUl6gIWByIIaHzSyEr3tOWX0w8tFEADXtpu8HGv5E0ShCeTP6enRq8iHKCHSvw== - dependencies: - "@npmcli/git" "^2.0.1" - "@npmcli/installed-package-contents" "^1.0.5" - "@npmcli/promise-spawn" "^1.1.0" - cacache "^15.0.0" - chownr "^1.1.4" - fs-minipass "^2.1.0" +pacote@9.5.12: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" infer-owner "^1.0.4" lru-cache "^5.1.1" - minipass "^3.0.1" - minipass-fetch "^1.2.1" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^2.1.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^8.0.0" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" promise-inflight "^1.0.1" promise-retry "^1.1.1" - read-package-json-fast "^1.1.3" - rimraf "^2.7.1" - semver "^7.1.3" - ssri "^8.0.0" - tar "^6.0.1" - which "^2.0.2" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" pako@~1.0.2, pako@~1.0.5: version "1.0.11" @@ -6437,14 +6841,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" @@ -6457,10 +6860,17 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5-htmlparser2-tree-adapter@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parse5@^5.1.1: version "5.1.1" @@ -6526,7 +6936,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5, path-parse@^1.0.6: +path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -6536,17 +6946,15 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -6559,7 +6967,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.7: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -6569,11 +6977,6 @@ pify@^2.0.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -6605,21 +7008,21 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== dependencies: - find-up "^2.1.0" + ts-pnp "^1.1.6" -portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== dependencies: async "^2.6.2" debug "^3.1.1" - mkdirp "^0.5.1" + mkdirp "^0.5.5" posix-character-classes@^0.1.0: version "0.1.1" @@ -6627,9 +7030,9 @@ posix-character-classes@^0.1.0: integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" - integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== dependencies: postcss "^7.0.27" postcss-selector-parser "^6.0.2" @@ -6693,9 +7096,9 @@ postcss-import@12.0.1: resolve "^1.1.7" postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== dependencies: cosmiconfig "^5.0.0" import-cwd "^2.0.0" @@ -6767,10 +7170,43 @@ postcss-minify-selectors@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" postcss-normalize-charset@^4.0.1: version "4.0.1" @@ -6891,14 +7327,15 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== dependencies: cssesc "^3.0.0" indexes-of "^1.0.1" uniq "^1.0.1" + util-deprecate "^1.0.2" postcss-svgo@^4.0.2: version "4.0.2" @@ -6924,15 +7361,33 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" - integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" -postcss@7.0.27, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.26, postcss@^7.0.27: - version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" - integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -6943,11 +7398,6 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -6971,13 +7421,6 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - protobufjs@6.8.8: version "6.8.8" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" @@ -6997,10 +7440,17 @@ protobufjs@6.8.8: "@types/node" "^10.1.0" long "^4.0.0" +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + protractor@~5.4.2: - version "5.4.3" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" - integrity sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA== + version "5.4.4" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.4.tgz#b241466aaf83b76bc2c58df67deb9a5cdfc61529" + integrity sha512-BaL4vePgu3Vfa/whvTUAlgaCAId4uNSGxIFSCXMgj7LMYENPWLp85h5RBi9pdpX/bWQ8SF6flP7afmi2TC4eHw== dependencies: "@types/q" "^0.0.32" "@types/selenium-webdriver" "^3.0.0" @@ -7010,13 +7460,13 @@ protractor@~5.4.2: glob "^7.0.3" jasmine "2.8.0" jasminewd2 "^2.1.0" - optimist "~0.6.0" q "1.4.1" saucelabs "^1.5.0" selenium-webdriver "3.6.0" source-map-support "~0.4.0" webdriver-js-extender "2.1.0" webdriver-manager "^12.0.6" + yargs "^12.0.5" proxy-addr@~2.0.5: version "2.0.6" @@ -7137,11 +7587,11 @@ querystring@0.2.0: integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -7171,13 +7621,13 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.0.tgz#d639c40fb9d72b5c7f8abc1fb2ddb25b29d3d540" - integrity sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q== +raw-loader@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933" + integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" + loader-utils "^2.0.0" + schema-utils "^2.6.5" read-cache@^1.0.0: version "1.0.0" @@ -7186,25 +7636,15 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" - integrity sha512-MmFqiyfCXV2Dmm4jH24DEGhxdkUDFivJQj4oPZQPOKywxR7HWBE6WnMWDAapfFHi3wm1b+mhR+XHlUH0CL8axg== - dependencies: - json-parse-even-better-errors "^2.0.1" - npm-normalize-package-bin "^1.0.1" - read-package-json@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== dependencies: glob "^7.1.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" normalize-package-data "^2.0.0" npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" read-package-tree@5.3.1: version "5.3.1" @@ -7228,7 +7668,7 @@ read-package-tree@5.3.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: +readable-stream@^3.0.6, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -7237,7 +7677,7 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -7256,19 +7696,12 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: - resolve "^1.1.6" + picomatch "^2.2.1" reflect-metadata@^0.1.2: version "0.1.13" @@ -7283,22 +7716,21 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.5, regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== +regenerator-runtime@0.13.7, regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== regenerator-transform@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" - integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: "@babel/runtime" "^7.8.4" - private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -7308,6 +7740,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -7316,10 +7753,10 @@ regexp.prototype.flags@^1.2.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.2.0" @@ -7329,9 +7766,9 @@ regexpu-core@^4.7.0: unicode-match-property-value-ecmascript "^1.2.0" regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: version "0.6.4" @@ -7355,7 +7792,7 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request@^2.83.0, request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7418,23 +7855,33 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-url-loader@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== - dependencies: - path-parse "^1.0.5" - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.3.2: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: + is-core-module "^2.1.0" path-parse "^1.0.6" restore-cursor@^3.1.0: @@ -7460,6 +7907,24 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + rfdc@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" @@ -7475,14 +7940,14 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@3.0.2: +rimraf@3.0.2, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7497,57 +7962,29 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-commonjs@~10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" - integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== - dependencies: - estree-walker "^0.6.1" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-node-resolve@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.1.0.tgz#552e248e397a06b9c6db878c0564ca4ee06729c9" - integrity sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ== +rollup@2.26.5: + version "2.26.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.26.5.tgz#5562ec36fcba3eed65cfd630bd78e037ad0e0307" + integrity sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA== optionalDependencies: fsevents "~2.1.2" -rollup@~1.21.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.21.4.tgz#00a41a30f90095db890301b226cbe2918e4cf54d" - integrity sha512-Pl512XVCmVzgcBz5h/3Li4oTaoDcmpuFZ+kdhS/wLreALz//WuDAMfomD3QEYl84NkDu6Z6wV9twlcREb4qQsw== - dependencies: - "@types/estree" "0.0.39" - "@types/node" "^12.7.5" - acorn "^7.0.0" +rollup@2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.3.4.tgz#979e461f8cab1a71aec2d37ce2a434052ae70223" + integrity sha512-8U9x54RCVhrUEV1zon4Pp8kokg1HM0fwzf5vkwe2/rOfyTClarx5e27kFlaoZ7ofJiazWkNQ+dgdG4HuZxkQ9A== + optionalDependencies: + fsevents "~2.1.2" run-async@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -7568,10 +8005,17 @@ rxjs@6.5.4: dependencies: tslib "^1.9.0" -rxjs@^6.5.3, rxjs@~6.5.4: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== +rxjs@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + +rxjs@^6.6.0, rxjs@~6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" @@ -7580,10 +8024,10 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -7592,26 +8036,26 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== +sass-loader@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.1.tgz#10c0364d8034f22fee25ddcc9eded20f99bbe3b4" + integrity sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ== dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" + klona "^2.0.3" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^2.7.0" + semver "^7.3.2" -sass@1.26.3: - version "1.26.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" - integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== +sass@1.26.10: + version "1.26.10" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" + integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -7636,13 +8080,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" - integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== +schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: - ajv "^6.12.0" - ajv-keywords "^3.4.1" + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" select-hose@^2.0.0: version "2.0.0" @@ -7660,11 +8105,11 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" semver-intersect@1.4.0: version "1.4.0" @@ -7673,7 +8118,7 @@ semver-intersect@1.4.0: dependencies: semver "^5.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7688,25 +8133,22 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" - integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.1.3: - version "7.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.0.tgz#91f7c70ec944a63e5dc7a74cde2da375d8e0853c" - integrity sha512-uyvgU/igkrMgNHwLgXvlpD9jEADbJhB0+JXSywoO47JgJ6c16iau9F9cjtc/E5o0PoqRYTiTIAPRKaYe84z6eQ== - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" send@0.17.1: version "0.17.1" @@ -7727,10 +8169,12 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" @@ -7798,13 +8242,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7817,15 +8254,6 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" - integrity sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -7838,10 +8266,10 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== smart-buffer@^4.1.0: version "4.1.0" @@ -7936,24 +8364,24 @@ sockjs-client@1.4.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" -socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== dependencies: - agent-base "6" - debug "4" - socks "^2.3.3" + agent-base "~4.2.1" + socks "~2.3.2" -socks@^2.3.3: +socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== @@ -7973,13 +8401,16 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-loader@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.4.tgz#c18b0dc6e23bf66f6792437557c569a11e072271" - integrity sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ== +source-map-loader@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.2.tgz#b0a6582b2eaa387ede1ecf8061ae0b93c23f9eb0" + integrity sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw== dependencies: - async "^2.5.0" - loader-utils "^1.1.0" + data-urls "^2.0.0" + iconv-lite "^0.6.2" + loader-utils "^2.0.0" + schema-utils "^2.7.0" + source-map "^0.6.1" source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" @@ -7992,10 +8423,10 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@0.5.16, source-map-support@^0.5.5, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== +source-map-support@0.5.19, source-map-support@^0.5.5, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -8020,7 +8451,12 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.7.3, source-map@^0.7.3: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -8030,41 +8466,36 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== spdy-transport@^3.0.0: version "3.0.0" @@ -8078,7 +8509,7 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: +spdy@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== @@ -8089,10 +8520,10 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" -speed-measure-webpack-plugin@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz#69840a5cdc08b4638697dac7db037f595d7f36a0" - integrity sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ== +speed-measure-webpack-plugin@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz#6ff894fc83e8a6310dde3af863a0329cd79da4f5" + integrity sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ== dependencies: chalk "^2.0.1" @@ -8123,21 +8554,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: +ssri@^6.0.0, ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" -ssri@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" - integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - ssri@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" @@ -8228,6 +8651,15 @@ string-width@^2.0.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -8237,39 +8669,21 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" -string.prototype.trimstart@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -8299,6 +8713,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -8316,13 +8737,13 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -style-loader@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" - integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw== +style-loader@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.6.4" + loader-utils "^2.0.0" + schema-utils "^2.6.6" stylehacks@^4.0.0: version "4.0.3" @@ -8342,18 +8763,18 @@ stylus-loader@3.0.2: lodash.clonedeep "^4.5.0" when "~3.6.x" -stylus@0.54.7: - version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== +stylus@0.54.8: + version "0.54.8" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== dependencies: css-parse "~2.0.0" debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" + glob "^7.1.6" + mkdirp "~1.0.4" safer-buffer "^2.1.2" sax "~1.2.4" - semver "^6.0.0" + semver "^6.3.0" source-map "^0.7.3" supports-color@^2.0.0: @@ -8376,9 +8797,9 @@ supports-color@^6.1.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -8411,43 +8832,56 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" - integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== +tar@^4.4.10: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== dependencies: - chownr "^1.1.3" + chownr "^2.0.0" fs-minipass "^2.0.0" minipass "^3.0.0" - minizlib "^2.1.0" + minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" - integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.2.0" - jest-worker "^25.1.0" - p-limit "^2.2.2" - schema-utils "^2.6.4" - serialize-javascript "^2.1.2" +terser-webpack-plugin@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz#6e9d6ae4e1a900d88ddce8da6a47507ea61f44bc" + integrity sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.3.0" + p-limit "^3.0.2" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" source-map "^0.6.1" - terser "^4.4.3" + terser "^5.0.0" webpack-sources "^1.4.3" terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -8462,24 +8896,33 @@ terser@4.3.1: source-map "~0.6.1" source-map-support "~0.5.12" -terser@4.6.10: - version "4.6.10" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" - integrity sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA== +terser@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.0.tgz#c481f4afecdcc182d5e2bdd2ff2dc61555161e81" + integrity sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@^4.1.2, terser@^4.4.3: - version "4.6.11" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f" - integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA== +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.0.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -8488,7 +8931,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: +"through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -8499,13 +8942,13 @@ thunky@^1.0.2: integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" -timsort@^0.3.0, timsort@~0.3.0: +timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= @@ -8598,25 +9041,37 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + tree-kill@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -tsickle@^0.38.0: - version "0.38.1" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.38.1.tgz#30762db759d40c435943093b6972c7f2efb384ef" - integrity sha512-4xZfvC6+etRu6ivKCNqMOd1FqcY/m6JY3Y+yr5+Xw+i751ciwrWINi6x/3l1ekcODH9GZhlf0ny2LpzWxnjWYA== +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@1.14.1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== -tslib@1.11.1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== +tslib@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== tsutils@2.27.2: version "2.27.2" @@ -8655,25 +9110,30 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.5.tgz#dae20114a7b4ff4bd642db9c8c699f2953e8bbdb" - integrity sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ== +typescript@3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== -typescript@3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -typescript@~3.7.2: - version "3.7.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" - integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== +typescript@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" + integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== ultron@~1.1.0: version "1.1.1" @@ -8737,13 +9197,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universal-analytics@0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" - integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== +universal-analytics@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" + integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== dependencies: - debug "^3.0.0" - request "^2.88.0" + debug "^4.1.1" + request "^2.88.2" uuid "^3.0.0" universalify@^0.1.0: @@ -8775,9 +9235,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -8815,7 +9275,7 @@ useragent@2.3.0: lru-cache "4.1.x" tmp "0.0.x" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -8856,12 +9316,12 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" - integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== +uuid@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.0.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -8881,11 +9341,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -validator@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" - integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -8915,14 +9370,23 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -watchpack@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" - integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -8963,7 +9427,12 @@ webdriver-manager@^12.0.6: semver "^5.3.0" xml2js "^0.4.17" -webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -8974,10 +9443,21 @@ webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.10.3: - version "3.10.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" - integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -8987,31 +9467,31 @@ webpack-dev-server@3.10.3: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.6" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" + sockjs "0.3.20" sockjs-client "1.4.0" - spdy "^4.0.1" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -9036,55 +9516,76 @@ webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-s source-list-map "^2.0.0" source-map "~0.6.1" -webpack-subresource-integrity@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz#44963a64c9a214ad729158e7f46d52c2525cc88a" - integrity sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ== +webpack-subresource-integrity@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz#e8bf918b444277df46a66cd84542cbcdc5a6272d" + integrity sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw== dependencies: webpack-sources "^1.3.0" -webpack@4.42.0: - version "4.42.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" - integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== +webpack@4.44.1: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.7.4" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" when@~3.6.x: version "3.6.4" @@ -9096,20 +9597,13 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.1, which@^1.2.9: +which@^1.2.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -9122,10 +9616,10 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-plugin@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-4.0.2.tgz#0456dd7af1c0de64591326fd8a08c5d9f2b5b27a" - integrity sha512-V+1zSZMOOKk+uBzKyNIODLQLsx59zSIOaI75J1EMS0iR1qy+KQR3y/pQ3T0vIhvPfDFapGRMsoMvQNEL3okqSA== +worker-plugin@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-5.0.0.tgz#113b5fe1f4a5d6a957cecd29915bedafd70bb537" + integrity sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ== dependencies: loader-utils "^1.1.0" @@ -9137,10 +9631,19 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -9191,16 +9694,21 @@ xtend@^4.0.0, xtend@~4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -9218,15 +9726,20 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.0: - version "18.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" - integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== @@ -9244,40 +9757,46 @@ yargs@12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -yargs@15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" - integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" + cliui "^5.0.0" + find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^4.2.0" + string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^18.1.0" + yargs-parser "^13.1.2" + +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= -z-schema@~3.18.3: - version "3.18.4" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" - integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== - dependencies: - lodash.get "^4.0.0" - lodash.isequal "^4.0.0" - validator "^8.0.0" - optionalDependencies: - commander "^2.7.1" +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zone.js@0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.2.tgz#67ca084b3116fc33fc40435e0d5ea40a207e392e" - integrity sha512-UAYfiuvxLN4oyuqhJwd21Uxb4CNawrq6fPS/05Su5L4G+1TN+HVDJMUHNMobVQDFJRir2cLAODXwluaOKB7HFg== +zone.js@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== From be439e08dd36ec949573eed9cb453b78bc827a8f Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Tue, 5 Jan 2021 02:00:28 +0000 Subject: [PATCH 015/235] Lower LLDP log message when an unknown source is found Change-Id: Iaca2fd0b3bb5fac0ae6ab5f31da23fb0ade1f409 --- .../org/onosproject/provider/lldpcommon/LinkDiscovery.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java index 578e1c16f2f..630b30d55b3 100644 --- a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java +++ b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java @@ -260,7 +260,7 @@ private boolean processLldp(PacketContext packetContext, Ethernet eth) { Optional srcDevice = findSourceDeviceByChassisId(deviceService, srcChassisId); if (!srcDevice.isPresent()) { - log.warn("source device not found. srcChassisId value: {}", srcChassisId); + log.debug("source device not found. srcChassisId value: {}", srcChassisId); return false; } Optional sourcePort = findSourcePortByName( @@ -269,7 +269,7 @@ private boolean processLldp(PacketContext packetContext, Ethernet eth) { srcDevice.get()); if (!sourcePort.isPresent()) { - log.warn("source port not found. sourcePort value: {}", sourcePort); + log.debug("source port not found. sourcePort value: {}", sourcePort); return false; } From 3855dc13a3e47b222bce652a8730c8f78e59d811 Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Wed, 6 Jan 2021 01:33:03 +0000 Subject: [PATCH 016/235] reassertRole when stream channel is not opened correctly Change-Id: Ib078f67e37365bbd429a9b9f47d4b1ba83a3cdde --- .../org/onosproject/net/device/impl/DeviceManager.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index c7a31efa8f3..0ed09e534f4 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -834,6 +834,13 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, // TODO: Shouldn't we be triggering event? //final Device device = getDevice(deviceId); //post(new DeviceEvent(DEVICE_MASTERSHIP_CHANGED, device)); + } else if (requested == MastershipRole.STANDBY) { + // For P4RT devices, the response role will be NONE when this node is expected to be STANDBY + // but the stream channel is not opened correctly. + // Calling reassertRole will trigger the mechanism in GeneralDeviceProvider that + // attempts to re-establish the stream channel + backgroundService.execute(() -> reassertRole(deviceId, expected)); + return; } } } From 8fcea44050501afa343b1f3e3e0dc4d98fb5d22d Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Sat, 9 Jan 2021 08:05:57 +0000 Subject: [PATCH 017/235] Add debug log in P4RuntimePipelineConfigClient Change-Id: Ie71af2f80b12b8ad99c8f597af1c3f026a532c4b --- .../p4runtime/ctl/client/PipelineConfigClientImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/PipelineConfigClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/PipelineConfigClientImpl.java index 3b628b45d15..c7e21cbdd0d 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/PipelineConfigClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/PipelineConfigClientImpl.java @@ -166,16 +166,20 @@ public CompletableFuture isAnyPipelineConfigSet(long p4DeviceId) { private boolean comparePipelineConfig( PiPipeconf pipeconf, ForwardingPipelineConfig cfgFromDevice) { if (cfgFromDevice == null) { + log.debug("Failed to comparePipelineConfig. cfgFromDevice is null"); return false; } final ForwardingPipelineConfig expectedCfg = buildForwardingPipelineConfigMsg( pipeconf, null); if (expectedCfg == null) { + // Problem logged by buildForwardingPipelineConfigMsg return false; } if (cfgFromDevice.hasCookie()) { + log.debug("Cookie from device = {}", cfgFromDevice.getCookie().getCookie()); + log.debug("Pipeconf fingerprint = {}", pipeconf.fingerprint()); return cfgFromDevice.getCookie().getCookie() == pipeconf.fingerprint(); } From e9db28ae0054a7698688fd228cabbc2fed334f34 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 15 Jan 2021 11:56:46 +0100 Subject: [PATCH 018/235] [AETHER-1077] Missing entries in default P4RT mirror store. Default and Table mirrors were using the same name for their internal EC map. This was leading to empty EC maps in the standby nodes. Change-Id: I575dfbf5ba5339f8c94c4e5ed218887a11f14d36 --- .../AbstractDistributedP4RuntimeMirror.java | 18 ++++++++++++++---- ...butedP4RuntimeActionProfileGroupMirror.java | 5 +++++ ...utedP4RuntimeActionProfileMemberMirror.java | 5 +++++ ...DistributedP4RuntimeDefaultEntryMirror.java | 5 +++++ .../DistributedP4RuntimeMeterMirror.java | 5 +++++ .../DistributedP4RuntimePreEntryMirror.java | 5 +++++ .../DistributedP4RuntimeTableMirror.java | 5 +++++ 7 files changed, 44 insertions(+), 4 deletions(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java index 4bc9536dd95..32bac3eb179 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java @@ -48,6 +48,7 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static java.lang.String.format; import static org.onosproject.net.pi.service.PiPipeconfWatchdogService.PipelineStatus.READY; import static org.slf4j.LoggerFactory.getLogger; @@ -63,6 +64,8 @@ public abstract class AbstractDistributedP4RuntimeMirror implements P4RuntimeMirror { + private static final String MAP_NAME_TEMPLATE = "onos-p4runtime-mirror-%s-map"; + private final Logger log = getLogger(getClass()); @Reference(cardinality = ReferenceCardinality.MANDATORY) @@ -92,10 +95,17 @@ public abstract class AbstractDistributedP4RuntimeMirror this.flushOnPipelineUnknown = flushOnPipelineUnknown; } + /** + * Returns a string that identifies the map maintained by this store among + * others that uses this abstract class. + * + * @return string + */ + protected abstract String mapSimpleName(); + @Activate public void activate() { - final String mapName = "onos-p4runtime-mirror-" - + entityType.name().toLowerCase(); + final String fullMapName = format(MAP_NAME_TEMPLATE, mapSimpleName()); final KryoNamespace serializer = KryoNamespace.newBuilder() .register(KryoNamespaces.API) .register(TimedEntry.class) @@ -103,14 +113,14 @@ public void activate() { mirrorMap = storageService .>eventuallyConsistentMapBuilder() - .withName(mapName) + .withName(fullMapName) .withSerializer(serializer) .withTimestampProvider((k, v) -> new WallClockTimestamp()) .build(); annotationsMap = storageService .eventuallyConsistentMapBuilder() - .withName(mapName + "-annotations") + .withName(fullMapName + "-annotations") .withSerializer(serializer) .withTimestampProvider((k, v) -> new WallClockTimestamp()) .build(); diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileGroupMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileGroupMirror.java index 9d5d4b10a43..f4459bc8ddb 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileGroupMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileGroupMirror.java @@ -33,4 +33,9 @@ public final class DistributedP4RuntimeActionProfileGroupMirror public DistributedP4RuntimeActionProfileGroupMirror() { super(PiEntityType.ACTION_PROFILE_GROUP); } + + @Override + protected String mapSimpleName() { + return PiEntityType.ACTION_PROFILE_GROUP.name().toLowerCase(); + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java index f84006b6bf5..22fbc57c39a 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java @@ -33,4 +33,9 @@ public class DistributedP4RuntimeActionProfileMemberMirror public DistributedP4RuntimeActionProfileMemberMirror() { super(PiEntityType.ACTION_PROFILE_MEMBER); } + + @Override + protected String mapSimpleName() { + return PiEntityType.ACTION_PROFILE_MEMBER.name().toLowerCase(); + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeDefaultEntryMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeDefaultEntryMirror.java index 95eb601b736..e6b3bdfc8b1 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeDefaultEntryMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeDefaultEntryMirror.java @@ -33,4 +33,9 @@ public final class DistributedP4RuntimeDefaultEntryMirror public DistributedP4RuntimeDefaultEntryMirror() { super(PiEntityType.TABLE_ENTRY); } + + @Override + protected String mapSimpleName() { + return PiEntityType.TABLE_ENTRY.name().toLowerCase() + "-default"; + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java index 581c83a5558..48546fc74bb 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java @@ -33,4 +33,9 @@ public final class DistributedP4RuntimeMeterMirror public DistributedP4RuntimeMeterMirror() { super(PiEntityType.METER_CELL_CONFIG); } + + @Override + protected String mapSimpleName() { + return PiEntityType.METER_CELL_CONFIG.name().toLowerCase(); + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimePreEntryMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimePreEntryMirror.java index 35f209e1623..ed7fba88831 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimePreEntryMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimePreEntryMirror.java @@ -35,4 +35,9 @@ public DistributedP4RuntimePreEntryMirror() { // invalidate pipeline status. super(PiEntityType.PRE_ENTRY, true); } + + @Override + protected String mapSimpleName() { + return PiEntityType.PRE_ENTRY.name().toLowerCase(); + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeTableMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeTableMirror.java index 4f5235ffe86..916148eb91a 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeTableMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeTableMirror.java @@ -33,4 +33,9 @@ public final class DistributedP4RuntimeTableMirror public DistributedP4RuntimeTableMirror() { super(PiEntityType.TABLE_ENTRY); } + + @Override + protected String mapSimpleName() { + return PiEntityType.TABLE_ENTRY.name().toLowerCase(); + } } From a731bb82fcb29bf96c79a4d09b0d5e51584ea32d Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 15 Jan 2021 17:27:48 +0100 Subject: [PATCH 019/235] [AETHER-1074][AETHER-1088] Missing Kryo classes in several subsystems This was leading to not proper replication of the state and some EC maps being empty Change-Id: Id39660c2ce3b5507e796801c0213c194f0a2009a --- .../store/group/impl/DistributedGroupStore.java | 11 +---------- .../store/serializers/KryoNamespaces.java | 15 +++++++++++++++ .../DistributedMasterElectionIdStore.java | 2 ++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java index 2734b8bdb46..8fd32ab0ff4 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java @@ -30,9 +30,7 @@ import org.onosproject.net.device.DeviceService; import org.onosproject.net.driver.DriverService; import org.onosproject.net.group.DefaultGroup; -import org.onosproject.net.group.DefaultGroupBucket; import org.onosproject.net.group.DefaultGroupDescription; -import org.onosproject.net.group.DefaultGroupKey; import org.onosproject.net.group.Group; import org.onosproject.net.group.Group.GroupState; import org.onosproject.net.group.GroupBucket; @@ -192,14 +190,7 @@ public void activate(ComponentContext context) { KryoNamespace.Builder kryoBuilder = new KryoNamespace.Builder() .register(KryoNamespaces.API) .nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID) - .register(DefaultGroup.class, - DefaultGroupBucket.class, - DefaultGroupDescription.class, - DefaultGroupKey.class, - GroupDescription.Type.class, - Group.GroupState.class, - GroupBuckets.class, - GroupStoreMessage.class, + .register(GroupStoreMessage.class, GroupStoreMessage.Type.class, UpdateType.class, GroupStoreMessageSubjects.class, diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java index 9be102d3c3a..38ea7a79f1c 100644 --- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java +++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java @@ -167,6 +167,13 @@ import org.onosproject.net.flowobjective.NextTreatment; import org.onosproject.net.flowobjective.Objective; import org.onosproject.net.flowobjective.ObjectiveError; +import org.onosproject.net.group.DefaultGroupBucket; +import org.onosproject.net.group.DefaultGroupKey; +import org.onosproject.net.group.DefaultGroup; +import org.onosproject.net.group.DefaultGroupDescription; +import org.onosproject.net.group.GroupDescription; +import org.onosproject.net.group.Group; +import org.onosproject.net.group.GroupBuckets; import org.onosproject.net.host.DefaultHostDescription; import org.onosproject.net.host.HostDescription; import org.onosproject.net.intent.ConnectivityIntent; @@ -660,6 +667,13 @@ public final class KryoNamespaces { .register(SetEvent.class) .register(SetEvent.Type.class) .register(GroupId.class) + .register(DefaultGroup.class, + DefaultGroupBucket.class, + DefaultGroupDescription.class, + DefaultGroupKey.class, + GroupDescription.Type.class, + Group.GroupState.class, + GroupBuckets.class) .register(Annotations.class) .register(OduSignalType.class) .register(OchSignalType.class) @@ -708,6 +722,7 @@ public final class KryoNamespaces { PiActionParam.class, PiActionProfileGroup.class, PiActionProfileGroupHandle.class, + PiActionProfileGroup.WeightedMember.class, PiActionProfileGroupId.class, PiActionProfileMember.class, PiActionProfileMemberHandle.class, diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/controller/DistributedMasterElectionIdStore.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/controller/DistributedMasterElectionIdStore.java index 04e39f73c8b..f5dea71f63d 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/controller/DistributedMasterElectionIdStore.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/controller/DistributedMasterElectionIdStore.java @@ -17,6 +17,7 @@ package org.onosproject.p4runtime.ctl.controller; import com.google.common.collect.Maps; +import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.onlab.util.KryoNamespace; import org.onosproject.net.DeviceId; @@ -51,6 +52,7 @@ public class DistributedMasterElectionIdStore implements MasterElectionIdStore { private static final KryoNamespace SERIALIZER = KryoNamespace.newBuilder() .register(KryoNamespaces.API) .register(Pair.class) + .register(ImmutablePair.class) .register(Long.class) .register(BigInteger.class) .build(); From db3528993df29aa79e71d1ad3657cd9460e317f5 Mon Sep 17 00:00:00 2001 From: pierventre Date: Sun, 10 Jan 2021 17:29:03 -0800 Subject: [PATCH 020/235] [AETHER-1104] Calculate PiPipeconf fingerprint in a deterministic way New master after taking over a switch was pushing again the pipeline and all the flows and groups. This was happening because DefaultPiPipeconf fingerprint was not calculated in a deterministic way across the cluster. This patch introduces the following changes: - Implements toString method in each abstraction representing a pipeline - Hashes the p4Info file to generate a consistent hash of the pipeline model - Uses a sorted collection to generate a consistent hash of the extensions Change-Id: I792283b0a9b821284add36b3aba52843f33527c3 --- .../net/pi/model/DefaultPiPipeconf.java | 22 ++++++++------ .../p4runtime/model/P4ActionModel.java | 10 +++++++ .../p4runtime/model/P4ActionParamModel.java | 10 +++++++ .../p4runtime/model/P4ActionProfileModel.java | 13 ++++++++ .../model/P4ControlMetadataModel.java | 10 +++++++ .../p4runtime/model/P4CounterModel.java | 13 ++++++++ .../p4runtime/model/P4InfoParser.java | 18 ++++++++++- .../p4runtime/model/P4MatchFieldModel.java | 11 +++++++ .../p4runtime/model/P4MeterModel.java | 13 ++++++++ .../model/P4PacketOperationModel.java | 12 +++++++- .../p4runtime/model/P4PipelineModel.java | 30 +++++++++++++++++-- .../p4runtime/model/P4RegisterModel.java | 10 +++++++ .../p4runtime/model/P4TableModel.java | 19 ++++++++++++ .../p4runtime/model/P4PipelineModelTest.java | 12 ++++++-- 14 files changed, 186 insertions(+), 17 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/DefaultPiPipeconf.java b/core/api/src/main/java/org/onosproject/net/pi/model/DefaultPiPipeconf.java index 464bdd74682..2041cdbea72 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/DefaultPiPipeconf.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/DefaultPiPipeconf.java @@ -192,21 +192,25 @@ public PiPipeconf build() { Map, Class> behaviours = behaviourMapBuilder.build(); return new DefaultPiPipeconf( - id, pipelineModel, generateFingerprint(extensions.values()), + id, pipelineModel, generateFingerprint(extensions), behaviours, extensions); } - private long generateFingerprint(Collection extensions) { + private long generateFingerprint(Map extensions) { Collection hashes = new ArrayList<>(); - for (URL extUrl : extensions) { + for (ExtensionType extensionType : ExtensionType.values()) { try { - HashingInputStream hin = new HashingInputStream( - Hashing.crc32(), extUrl.openStream()); - //noinspection StatementWithEmptyBody - while (hin.read() != -1) { - // Do nothing. Reading all input stream to update hash. + // Get the extension if present and then hash the content + URL extUrl = extensions.get(extensionType); + if (extUrl != null) { + HashingInputStream hin = new HashingInputStream( + Hashing.crc32(), extUrl.openStream()); + //noinspection StatementWithEmptyBody + while (hin.read() != -1) { + // Do nothing. Reading all input stream to update hash. + } + hashes.add(hin.hash().asInt()); } - hashes.add(hin.hash().asInt()); } catch (IOException e) { throw new IllegalArgumentException(e); } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionModel.java index dec4d1cc81f..6b1af83cf4c 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionModel.java @@ -26,6 +26,8 @@ import java.util.Objects; import java.util.Optional; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiActionModel for P4Runtime. */ @@ -72,4 +74,12 @@ public boolean equals(Object obj) { return Objects.equals(this.id, other.id) && Objects.equals(this.params, other.params); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("params", params.values()) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionParamModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionParamModel.java index 1c1f0a58dd5..d4a6c4dbe9f 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionParamModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionParamModel.java @@ -21,6 +21,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiActionParamModel for P4Runtime. */ @@ -61,4 +63,12 @@ public boolean equals(Object obj) { return Objects.equals(this.id, other.id) && Objects.equals(this.bitWidth, other.bitWidth); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("bitWidth", bitWidth) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionProfileModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionProfileModel.java index 443d4074910..5059bceb3f7 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionProfileModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ActionProfileModel.java @@ -24,6 +24,8 @@ import java.util.Collection; import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiActionProfileModel for P4Runtime. */ @@ -90,4 +92,15 @@ public boolean equals(Object obj) { && Objects.equals(this.size, other.size) && Objects.equals(this.maxGroupSize, other.maxGroupSize); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("tables", tables) + .add("hasSelector", hasSelector) + .add("size", size) + .add("maxGroupSize", maxGroupSize) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java index a6e2a43b34e..19a6fa7f1fa 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java @@ -21,6 +21,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiPacketMetadataModel for P4Runtime. */ @@ -61,4 +63,12 @@ public boolean equals(Object obj) { return Objects.equals(this.id, other.id) && Objects.equals(this.bitWidth, other.bitWidth); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("bitWidth", bitWidth) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4CounterModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4CounterModel.java index de6e7556066..01f33ff05de 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4CounterModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4CounterModel.java @@ -23,6 +23,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiCounterModel for P4Runtime. */ @@ -88,4 +90,15 @@ public boolean equals(Object obj) { && Objects.equals(this.table, other.table) && Objects.equals(this.size, other.size); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("counterType", counterType) + .add("unit", unit) + .add("table", table) + .add("size", size) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java index d5bf2e675f5..7c1fd1a53d8 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java @@ -20,6 +20,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; +import com.google.common.hash.Hashing; +import com.google.common.hash.HashingInputStream; import com.google.protobuf.ExtensionRegistry; import com.google.protobuf.TextFormat; import org.onosproject.net.pi.model.PiActionId; @@ -135,6 +137,19 @@ public static PiPipelineModel parse(URL p4InfoUrl) throws P4InfoParserException throw new P4InfoParserException("Unable to parse protobuf " + p4InfoUrl.toString(), e); } + // Generate fingerprint of the pipeline by hashing p4info file + final int fingerprint; + try { + HashingInputStream hin = new HashingInputStream(Hashing.crc32(), p4InfoUrl.openStream()); + //noinspection StatementWithEmptyBody + while (hin.read() != -1) { + // Do nothing. Reading all input stream to update hash. + } + fingerprint = hin.hash().asInt(); + } catch (IOException e) { + throw new P4InfoParserException("Unable to generate fingerprint " + p4InfoUrl.toString(), e); + } + // Start by parsing and mapping instances to to their integer P4Info IDs. // Convenient to build the table model at the end. @@ -243,7 +258,8 @@ public static PiPipelineModel parse(URL p4InfoUrl) throws P4InfoParserException meterImmMap, registerImmMap, actProfileImmMap, - ImmutableMap.copyOf(pktOpMap)); + ImmutableMap.copyOf(pktOpMap), + fingerprint); } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MatchFieldModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MatchFieldModel.java index f3b5ddc7c9a..f311acf47ad 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MatchFieldModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MatchFieldModel.java @@ -22,6 +22,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiMatchFieldModel for P4Runtime. */ @@ -70,4 +72,13 @@ public boolean equals(Object obj) { && Objects.equals(this.bitWidth, other.bitWidth) && Objects.equals(this.matchType, other.matchType); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("bitWidth", bitWidth) + .add("matchType", matchType) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MeterModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MeterModel.java index 93827cc644f..a11c8ec49fd 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MeterModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4MeterModel.java @@ -23,6 +23,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiMeterModel for P4Runtime. */ @@ -87,4 +89,15 @@ public boolean equals(Object obj) { && Objects.equals(this.table, other.table) && Objects.equals(this.size, other.size); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("meterType", meterType) + .add("unit", unit) + .add("table", table) + .add("size", size) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketOperationModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketOperationModel.java index e29553fec90..3421e703191 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketOperationModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketOperationModel.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiPacketOperationModel for P4Runtime. */ @@ -33,7 +35,7 @@ final class P4PacketOperationModel implements PiPacketOperationModel { private final ImmutableList metadatas; P4PacketOperationModel(PiPacketOperationType type, - ImmutableList metadatas) { + ImmutableList metadatas) { this.type = type; this.metadatas = metadatas; } @@ -65,4 +67,12 @@ public boolean equals(Object obj) { return Objects.equals(this.type, other.type) && Objects.equals(this.metadatas, other.metadatas); } + + @Override + public String toString() { + return toStringHelper(this) + .add("type", type) + .add("metadatas", metadatas) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java index ce9ec131bcb..28e5372df2e 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java @@ -35,6 +35,8 @@ import java.util.Objects; import java.util.Optional; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiPipelineModel for P4Runtime. */ @@ -46,6 +48,7 @@ final class P4PipelineModel implements PiPipelineModel { private final ImmutableMap registers; private final ImmutableMap actionProfiles; private final ImmutableMap packetOperations; + private final int fingerprint; P4PipelineModel( ImmutableMap tables, @@ -53,13 +56,15 @@ final class P4PipelineModel implements PiPipelineModel { ImmutableMap meters, ImmutableMap registers, ImmutableMap actionProfiles, - ImmutableMap packetOperations) { + ImmutableMap packetOperations, + int fingerprint) { this.tables = tables; this.counters = counters; this.meters = meters; this.registers = registers; this.actionProfiles = actionProfiles; this.packetOperations = packetOperations; + this.fingerprint = fingerprint; } @Override @@ -120,7 +125,11 @@ public Optional packetOperationModel(PiPacketOperationTy @Override public int hashCode() { - return Objects.hash(tables, counters, meters, actionProfiles, packetOperations); + // NOTE: that the fingerprint is derived by hashing the p4Info file + // this because the hashcode is not deterministic across multiple + // JVMs instance. This hashcode is also used to derive the fingerprint + // of the pipeconf. + return fingerprint; } @Override @@ -135,7 +144,22 @@ public boolean equals(Object obj) { return Objects.equals(this.tables, other.tables) && Objects.equals(this.counters, other.counters) && Objects.equals(this.meters, other.meters) + && Objects.equals(this.registers, other.registers) && Objects.equals(this.actionProfiles, other.actionProfiles) - && Objects.equals(this.packetOperations, other.packetOperations); + && Objects.equals(this.packetOperations, other.packetOperations) + && this.fingerprint == other.fingerprint; + } + + @Override + public String toString() { + return toStringHelper(this) + .add("tables", tables.values()) + .add("counters", counters.values()) + .add("meters", meters.values()) + .add("registers", registers.values()) + .add("actionProfiles", actionProfiles.values()) + .add("packetOperations", packetOperations.values()) + .add("fingerprint", fingerprint) + .toString(); } } diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4RegisterModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4RegisterModel.java index 7e4fcdaf1c8..44af1e0510a 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4RegisterModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4RegisterModel.java @@ -21,6 +21,8 @@ import java.util.Objects; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiRegisterModel for P4Runtime. */ @@ -61,4 +63,12 @@ public boolean equals(Object obj) { return Objects.equals(this.id, other.id) && Objects.equals(this.size, other.size); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("size", size) + .toString(); + } } \ No newline at end of file diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java index 2eed1bb0433..be1b71c2aea 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java @@ -34,6 +34,8 @@ import java.util.Objects; import java.util.Optional; +import static com.google.common.base.MoreObjects.toStringHelper; + /** * Implementation of PiTableModel for P4Runtime. */ @@ -164,4 +166,21 @@ public boolean equals(Object obj) { && Objects.equals(this.actions, other.actions) && Objects.equals(this.constDefaultAction, other.constDefaultAction); } + + @Override + public String toString() { + return toStringHelper(this) + .add("id", id) + .add("tableType", tableType) + .add("actionProfile", actionProfile) + .add("maxSize", maxSize) + .add("counters", counters) + .add("meters", meters) + .add("supportAging", supportAging) + .add("matchFields", matchFields) + .add("actions", actions) + .add("constDefaultAction", constDefaultAction) + .add("isConstTable", isConstTable) + .toString(); + } } diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java index e8b1c70eb32..a6bd76ff276 100644 --- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java +++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java @@ -340,12 +340,18 @@ public class P4PipelineModelTest { .put(PI_PACKET_OPERATION_TYPE_2, P4_PACKET_OPERATION_MODEL_2) .build(); + private static final int FINGER_PRINT_1 = 0; + private static final int FINGER_PRINT_2 = 1; + private static final PiPipelineModel P4_PIPELINE_MODEL_1 = - new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1); + new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1, + FINGER_PRINT_1); private static final PiPipelineModel SAME_AS_P4_PIPELINE_MODEL_1 = - new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1); + new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1, + FINGER_PRINT_1); private static final PiPipelineModel P4_PIPELINE_MODEL_2 = - new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_2); + new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_2, + FINGER_PRINT_2); /** * Checks that the P4PipelineModel class is immutable. From f0a071983c197500d29c4ad0a2c5761d3e2efb6f Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 3 Dec 2020 20:09:47 +0100 Subject: [PATCH 021/235] [AETHER-539] Fix for flowId computation This patch includes: - New methods in the PortNumber to take into account the port name - PortCriterion uses the new toString method to avoid mismatch in the flowId computation - The original toString() method is left unchanged to avoid disply issues of the ports with names Change-Id: I392281b5eee160227886f9738fae97f237b1b04f --- .../java/org/onosproject/net/PortNumber.java | 27 ++++++++++++++++++- .../net/flow/criteria/PortCriterion.java | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/PortNumber.java b/core/api/src/main/java/org/onosproject/net/PortNumber.java index 9d1d7b78295..54c35fb6008 100644 --- a/core/api/src/main/java/org/onosproject/net/PortNumber.java +++ b/core/api/src/main/java/org/onosproject/net/PortNumber.java @@ -227,6 +227,15 @@ public boolean hasName() { } private String decodeLogicalPort() { + Logical logical = LOGICAL.get().get(number); + if (logical != null) { + // enum name + return logical.toString(); + } + return String.format("%s", UnsignedLongs.toString(number)); + } + + private String decodeLogicalPortExtended() { Logical logical = LOGICAL.get().get(number); if (logical != null) { // enum name @@ -250,7 +259,7 @@ private static boolean isAsciiDecimal(char c) { @Override public String toString() { if (isLogical()) { - return decodeLogicalPort(); + return decodeLogicalPortExtended(); } else if (hasName()) { // named port if (number == NO_DISPLAY_NUMBER) { @@ -264,11 +273,27 @@ public String toString() { } } + // toString method that does not use the name. + // if it is a logical port will use either the enum or the number + // else if it has a name returns just the number + // else it does not have a name, it returns the number because name == number + public String toStringWithoutName() { + if (isLogical()) { + return decodeLogicalPort(); + } + // Either named port or port without name + return UnsignedLongs.toString(number); + } + @Override public int hashCode() { return Long.hashCode(number); } + public int hashCodeExtended() { + return Objects.hashCode(number, hasName() ? name : 0); + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java index af0673b7ffe..a2c49a1d496 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java +++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java @@ -54,7 +54,7 @@ public PortNumber port() { @Override public String toString() { - return type().toString() + SEPARATOR + port; + return type().toString() + SEPARATOR + port.toStringWithoutName(); } @Override From 9ff7caa5fd6992dfb52479f3474f6e00cecc682f Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 8 Jan 2021 17:35:47 +0100 Subject: [PATCH 022/235] [AETHER-998] FabricPipeliner should support L2 modification of the NextObjective This patch allows: - to MODIFY completely the L3 unicast chain - to MODIFY the L2 configuration of a port Moreover, it includes support for metadata signaling: - to not remove the fwd classifier rules during the port update scenarios (dynamic config changes) - add new unit tests for verifying the scenario Change-Id: I54168653a730573ec0650f25ec670c36282b0419 --- .../behaviour/FabricTreatmentInterpreter.java | 6 ++- .../FilteringObjectiveTranslator.java | 41 ++++++++++++--- .../pipeliner/NextObjectiveTranslator.java | 6 +-- .../FabricFilteringPipelinerTest.java | 51 +++++++++++++++++++ 4 files changed, 91 insertions(+), 13 deletions(-) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java index 2da557abd0c..de3ecbfc4d1 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java @@ -241,8 +241,12 @@ private static PiAction nop(PiTableId tableId) throws PiInterpreterException { } private static boolean isNoAction(TrafficTreatment treatment) { + // Empty treatment OR + // No instructions OR + // Empty treatment AND writeMetadata return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) || - treatment.allInstructions().isEmpty(); + treatment.allInstructions().isEmpty() || + (treatment.allInstructions().size() == 1 && treatment.writeMetadata() != null); } private static boolean isFilteringPopAction(TrafficTreatment treatment) { diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java index 162bb1e5ebc..39d100e4a99 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java @@ -71,6 +71,7 @@ class FilteringObjectiveTranslator .withId(FabricConstants.FABRIC_INGRESS_FILTERING_DENY) .build(); + private static final int INTERFACE_CONFIG_UPDATE = 2; FilteringObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) { super(deviceId, capabilities); @@ -101,7 +102,7 @@ public ObjectiveTranslation doTranslate(FilteringObjective obj) obj.conditions(), Criterion.Type.ETH_DST_MASKED); ingressPortVlanRule(obj, inPort, outerVlan, innerVlan, resultBuilder); - if (shouldAddFwdClassifierRule(obj)) { + if (shouldModifyFwdClassifierTable(obj)) { fwdClassifierRules(obj, inPort, ethDst, ethDstMasked, resultBuilder); } else { log.debug("Skipping fwd classifier rules for device {}.", deviceId); @@ -109,20 +110,44 @@ public ObjectiveTranslation doTranslate(FilteringObjective obj) return resultBuilder.build(); } - private boolean shouldAddFwdClassifierRule(FilteringObjective obj) { + private boolean shouldModifyFwdClassifierTable(FilteringObjective obj) { // NOTE: in fabric pipeline the forwarding classifier acts similarly // to the TMAC table of OFDPA that matches on input port. - - // Forwarding classifier rules should be added to translation when: - // - the operation is ADD OR - // - it doesn't refer to double tagged traffic OR + // NOTE: that SR signals when it is a port update event by not setting + // the INTERFACE_CONFIG_UPDATE metadata. During the INTERFACE_CONFIG_UPDATE + // there is no need to add/remove rules in the fwd_classifier table. + // NOTE: that in scenarios like (T, N) -> T where we remove only the native + // VLAN there is not an ADD following the remove. + + // Forwarding classifier rules should be added/removed to translation when: + // - the operation is ADD + // AND it is a port update event (ADD or UPDATE) OR + // - it doesn't refer to double tagged traffic + // AND it is a port REMOVE event OR // - it refers to double tagged traffic // and SR is triggering the removal of forwarding classifier rules. - return obj.op() == Objective.Operation.ADD || - !isDoubleTagged(obj) || + return (obj.op() == Objective.Operation.ADD && !isInterfaceConfigUpdate(obj)) || + (!isDoubleTagged(obj) && !isInterfaceConfigUpdate(obj)) || (isDoubleTagged(obj) && isLastDoubleTaggedForPort(obj)); } + /** + * Check if the given filtering objective is triggered by a interface config change. + * + * @param obj Filtering objective to check. + * @return True if SR is signaling to not remove the forwarding classifier rule, + * false otherwise. + */ + private boolean isInterfaceConfigUpdate(FilteringObjective obj) { + if (obj.meta() == null) { + return false; + } + Instructions.MetadataInstruction meta = obj.meta().writeMetadata(); + // SR is setting this metadata when an interface config update has + // been performed and thus fwd classifier rules should not be removed + return (meta != null && (meta.metadata() & meta.metadataMask()) == INTERFACE_CONFIG_UPDATE); + } + /** * Check if the given filtering objective is the last filtering objective * for a double-tagged host for a specific port. diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java index a8c4c6f1c2f..07d86c3ba8f 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java @@ -492,12 +492,10 @@ private TrafficTreatment getFirstDefaultNextTreatmentIfAny( } private boolean isGroupModifyOp(NextObjective obj) { - // If operation is ADD_TO_EXIST, REMOVE_FROM_EXIST or MODIFY, it means we modify + // If operation is ADD_TO_EXIST, REMOVE_FROM_EXIST it means we modify // group buckets only, no changes for flow rules. - // FIXME Please note that for MODIFY op this could not apply in future if we extend the scope of MODIFY return obj.op() == Objective.Operation.ADD_TO_EXISTING || - obj.op() == Objective.Operation.REMOVE_FROM_EXISTING || - obj.op() == Objective.Operation.MODIFY; + obj.op() == Objective.Operation.REMOVE_FROM_EXISTING; } private boolean isXconnect(NextObjective obj) { diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java index 1372a25df64..98dce1f3f20 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java @@ -344,6 +344,57 @@ public void badParamTest() { assertError(ObjectiveError.BADPARAMS, result2); } + /** + * Test port update scenarios for filtering objective. Creates only one rule for + * ingress_port_vlan table. + */ + @Test + public void testPortUpdate() throws FabricPipelinerException { + // Tagged port scenario + FilteringObjective filteringObjective = DefaultFilteringObjective.builder() + .withKey(Criteria.matchInPort(PORT_1)) + .addCondition(Criteria.matchEthDst(ROUTER_MAC)) + .addCondition(Criteria.matchVlanId(VLAN_100)) + .withPriority(PRIORITY) + .fromApp(APP_ID) + .withMeta(DefaultTrafficTreatment.builder() + .writeMetadata(2, 0xffffffffffffffffL) + .build()) + .permit() + .add(); + ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); + Collection expectedFlowRules = Lists.newArrayList(); + // Ingress port vlan rule + expectedFlowRules.add(buildExpectedVlanInPortRule( + PORT_1, VLAN_100, null, VlanId.NONE, + FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)); + ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules); + assertEquals(expectedTranslation, actualTranslation); + + // Untagged port scenario + filteringObjective = DefaultFilteringObjective.builder() + .withKey(Criteria.matchInPort(PORT_1)) + .addCondition(Criteria.matchEthDst(ROUTER_MAC)) + .addCondition(Criteria.matchVlanId(VlanId.NONE)) + .withPriority(PRIORITY) + .fromApp(APP_ID) + .withMeta(DefaultTrafficTreatment.builder() + .pushVlan() + .setVlanId(VLAN_200) + .writeMetadata(2, 0xffffffffffffffffL) + .build()) + .permit() + .add(); + actualTranslation = translator.translate(filteringObjective); + expectedFlowRules = Lists.newArrayList(); + // Ingress port vlan rule + expectedFlowRules.add(buildExpectedVlanInPortRule( + PORT_1, VlanId.NONE, null, VLAN_200, + FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)); + expectedTranslation = buildExpectedTranslation(expectedFlowRules); + assertEquals(expectedTranslation, actualTranslation); + } + /* Utilities */ private void assertError(ObjectiveError error, ObjectiveTranslation actualTranslation) { From 7385b79d1e8185df1f748ed8f68efdd768f93428 Mon Sep 17 00:00:00 2001 From: Brett Bergquist Date: Wed, 20 Jan 2021 08:30:15 -0500 Subject: [PATCH 023/235] Changed to use ctx.actions.run_shell instead of ctx.action The 'action' attribute was depricated and finally removed probably at the Bazel 3.4.0 release. Change-Id: I2aafae3e780b8e68a3ad9a162d62210743f9f2fd --- tools/build/bazel/deps_files.bzl | 2 +- tools/build/bazel/java_sources.bzl | 2 +- tools/build/bazel/javadoc.bzl | 2 +- tools/build/bazel/minimal_jar.bzl | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/build/bazel/deps_files.bzl b/tools/build/bazel/deps_files.bzl index 24c65ca048c..b24b3c2c309 100644 --- a/tools/build/bazel/deps_files.bzl +++ b/tools/build/bazel/deps_files.bzl @@ -9,7 +9,7 @@ def _impl(ctx): "echo %s >> %s" % (",".join(dep_list), output.path), ] - ctx.action( + ctx.actions.run_shell( inputs = ctx.files.deps, outputs = [output], progress_message = "Generating deps file paths for %s" % ctx.attr.name, diff --git a/tools/build/bazel/java_sources.bzl b/tools/build/bazel/java_sources.bzl index 1381a057dcf..0220919f89f 100644 --- a/tools/build/bazel/java_sources.bzl +++ b/tools/build/bazel/java_sources.bzl @@ -29,7 +29,7 @@ def _impl(ctx): "[ -n \"$dir\" -a -d \"$dir\" ] && %s cf %s -C $dir ." % (jar_path, outjar.path), ] - ctx.action( + ctx.actions.run_shell( inputs = ctx.files.srcs, outputs = [outjar], progress_message = "Generating source jar for %s" % ctx.attr.name, diff --git a/tools/build/bazel/javadoc.bzl b/tools/build/bazel/javadoc.bzl index 64931602a83..b9f514c1d56 100644 --- a/tools/build/bazel/javadoc.bzl +++ b/tools/build/bazel/javadoc.bzl @@ -36,7 +36,7 @@ def _impl(ctx): "%s cf %s -C %s ." % (jar_exe_path, outjar.path, dir), ] - ctx.action( + ctx.actions.run_shell( inputs = ctx.files.srcs + ctx.files.deps, outputs = [outjar], progress_message = "Generating javadocs jar for %s" % ctx.attr.name, diff --git a/tools/build/bazel/minimal_jar.bzl b/tools/build/bazel/minimal_jar.bzl index 6615ec91839..2ee40e21948 100644 --- a/tools/build/bazel/minimal_jar.bzl +++ b/tools/build/bazel/minimal_jar.bzl @@ -22,7 +22,7 @@ def _impl(ctx): "mkdir readme && touch readme/README && %s cf %s readme/README" % (jar_exe_path, outjar.path), ] - ctx.action( + ctx.actions.run_shell( outputs = [outjar], progress_message = "Generating minimal jar for %s" % ctx.attr.name, command = ";\n".join(cmd), From 9f2d785dafedae453172acc0f704f6f46d8bdb82 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 25 Jan 2021 18:05:42 +0000 Subject: [PATCH 024/235] Tagging 2.5.1-rc1 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 42c4e934e24..de4fb62a6de 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.1-SNAPSHOT"); + private static Version version = Version.version("2.5.1-rc1"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index af652726fbd..117ec72ac04 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.1-SNAPSHOT" +ONOS_VERSION = "2.5.1-rc1" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index d6c35b9335e..17ab822f48d 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.1-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.1.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.1-rc1" +export ONOS_VERSION=${ONOS_VERSION:-2.5.1-rc1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index be57a9d01fe..7a6c1344653 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index c74936371d0..54dcaa201dc 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 03b88df797e..b77f303a2c2 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 0f20d61e54d..fd3e6c6d63d 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 3fcf109f060..f25f93f3e3c 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 49a790e230e..aa426db23da 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 894819fda35..58a7570926d 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index c569317c458..c0abe8c9718 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 0d05037043e..fc1ed15d6e8 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 56166076bae..bec0bad7644 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index a70a02a5cc5..bab8810fb36 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index a570d4f4b76..0934f2ef0b3 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 6eab333ae67..f10ff8e7c4b 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 4d4703f9970..da34d2ff4dc 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index c99fa82e622..08620d39b4c 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index bc945d79103..87f997ce2ae 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1-rc1 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 86a21097f15..ab11741deb0 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-SNAPSHOT + 2.5.1-rc1 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index dfc6e180563..412acc23805 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-rc1" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 98b648584103754b455a438433409321004349ee Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 25 Jan 2021 18:05:48 +0000 Subject: [PATCH 025/235] Starting snapshot 2.5.1-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index de4fb62a6de..42c4e934e24 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.1-rc1"); + private static Version version = Version.version("2.5.1-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 117ec72ac04..af652726fbd 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.1-rc1" +ONOS_VERSION = "2.5.1-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 17ab822f48d..d6c35b9335e 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.1-rc1" -export ONOS_VERSION=${ONOS_VERSION:-2.5.1-rc1.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.1-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 7a6c1344653..be57a9d01fe 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 54dcaa201dc..c74936371d0 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index b77f303a2c2..03b88df797e 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index fd3e6c6d63d..0f20d61e54d 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index f25f93f3e3c..3fcf109f060 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index aa426db23da..49a790e230e 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 58a7570926d..894819fda35 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index c0abe8c9718..c569317c458 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index fc1ed15d6e8..0d05037043e 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index bec0bad7644..56166076bae 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index bab8810fb36..a70a02a5cc5 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 0934f2ef0b3..a570d4f4b76 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index f10ff8e7c4b..6eab333ae67 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index da34d2ff4dc..4d4703f9970 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 08620d39b4c..c99fa82e622 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 87f997ce2ae..bc945d79103 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-rc1 + 2.5.1-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index ab11741deb0..86a21097f15 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-rc1 + 2.5.1-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 412acc23805..dfc6e180563 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-rc1" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 4a6215570af069160b1d0c0c5a35c546f315e254 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Wed, 27 Jan 2021 17:23:47 +0000 Subject: [PATCH 026/235] Tagging 2.5.1 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 42c4e934e24..548dd269450 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.1-SNAPSHOT"); + private static Version version = Version.version("2.5.1"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index af652726fbd..df1f832fef0 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.1-SNAPSHOT" +ONOS_VERSION = "2.5.1" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index d6c35b9335e..34b35e5d06a 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.1-SNAPSHOT" +export ONOS_POM_VERSION="2.5.1" export ONOS_VERSION=${ONOS_VERSION:-2.5.1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index be57a9d01fe..5c1db58ab31 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index c74936371d0..160daec798a 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 03b88df797e..54bdc2fd877 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 0f20d61e54d..6308cd8faf9 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 3fcf109f060..534298ee632 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 49a790e230e..fb18409c661 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 894819fda35..4eddba3b335 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index c569317c458..1d65d3919d5 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 0d05037043e..a30a29de817 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 56166076bae..a956ddcc130 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index a70a02a5cc5..2b1f132d8f3 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index a570d4f4b76..d54be379042 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 6eab333ae67..b57f2de31c2 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 4d4703f9970..69f6c228e7e 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index c99fa82e622..7f6856d7de4 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index bc945d79103..c2a1cb294e7 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1-SNAPSHOT + 2.5.1 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 86a21097f15..a7111e87b03 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index dfc6e180563..4897fa7b5af 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From a60aa4c6b163db608b00ead6723fbb5de7c2fb01 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Wed, 27 Jan 2021 17:23:52 +0000 Subject: [PATCH 027/235] Starting snapshot 2.5.2-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 548dd269450..fd9980f5d0b 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.1"); + private static Version version = Version.version("2.5.2-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index df1f832fef0..b6f580e3bd2 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.1" +ONOS_VERSION = "2.5.2-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 34b35e5d06a..ee77d08eb62 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.1" -export ONOS_VERSION=${ONOS_VERSION:-2.5.1.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.2-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.2.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 5c1db58ab31..37f6349b0b8 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 160daec798a..673fd82df4f 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 54bdc2fd877..4f48a8308fd 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 6308cd8faf9..f6684b6c015 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 534298ee632..f6d6a17d551 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index fb18409c661..bf6a6cc7ca5 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 4eddba3b335..4dee86123bb 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 1d65d3919d5..207ab0a8df7 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index a30a29de817..f78bfa6116d 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index a956ddcc130..1457a2f5cdd 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 2b1f132d8f3..bcf8acff279 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index d54be379042..b2b634e5951 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index b57f2de31c2..32e3095e464 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 69f6c228e7e..69120610b9e 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 7f6856d7de4..dfed6c07cbe 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index c2a1cb294e7..5915b7bd7fa 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.1 + 2.5.2-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index a7111e87b03..8e03d575ecf 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 4897fa7b5af..f4bae302139 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.1" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.2-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 620d6e311b54fa7c4ffc1e9b4305a902c1df555b Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Fri, 22 Jan 2021 13:48:30 -0300 Subject: [PATCH 028/235] [VOL-3660] Add support for PPPoED message decoding and flow installation on OltPipeline. Signed-off-by: Gustavo Silva Change-Id: I1a6f318d71b8c1f59fdf582edacd44e9c46cd061 (cherry picked from commit 2bcc805d09f59aa5389a921c8b442c93d805a2d0) --- .../driver/pipeline/OltPipeline.java | 3 +- .../main/java/org/onlab/packet/EthType.java | 1 + .../main/java/org/onlab/packet/Ethernet.java | 3 + .../main/java/org/onlab/packet/PPPoED.java | 220 ++++++++++++++++++ .../main/java/org/onlab/packet/PPPoEDTag.java | 89 +++++++ .../java/org/onlab/packet/PPPoEDTest.java | 147 ++++++++++++ .../org/onlab/packet/pppoed/padi.bin | Bin 0 -> 60 bytes .../org/onlab/packet/pppoed/pado.bin | Bin 0 -> 64 bytes .../org/onlab/packet/pppoed/padr.bin | Bin 0 -> 32 bytes .../org/onlab/packet/pppoed/pads.bin | Bin 0 -> 55 bytes .../org/onlab/packet/pppoed/padt.bin | Bin 0 -> 60 bytes 11 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 utils/misc/src/main/java/org/onlab/packet/PPPoED.java create mode 100644 utils/misc/src/main/java/org/onlab/packet/PPPoEDTag.java create mode 100644 utils/misc/src/test/java/org/onlab/packet/PPPoEDTest.java create mode 100644 utils/misc/src/test/resources/org/onlab/packet/pppoed/padi.bin create mode 100644 utils/misc/src/test/resources/org/onlab/packet/pppoed/pado.bin create mode 100644 utils/misc/src/test/resources/org/onlab/packet/pppoed/padr.bin create mode 100644 utils/misc/src/test/resources/org/onlab/packet/pppoed/pads.bin create mode 100644 utils/misc/src/test/resources/org/onlab/packet/pppoed/padt.bin diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java index 38b7eda7fb8..90ce2aa39f6 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java @@ -215,7 +215,8 @@ public void filter(FilteringObjective filter) { provisionEthTypeBasedFilter(filter, ethType, output, (L2ModificationInstruction) vlanId.get(), (L2ModificationInstruction) vlanPush.get()); - } else if (ethType.ethType().equals(EthType.EtherType.LLDP.ethType())) { + } else if (ethType.ethType().equals(EthType.EtherType.LLDP.ethType()) || + ethType.ethType().equals(EthType.EtherType.PPPoED.ethType())) { provisionEthTypeBasedFilter(filter, ethType, output, null, null); } else if (ethType.ethType().equals(EthType.EtherType.IPV4.ethType())) { diff --git a/utils/misc/src/main/java/org/onlab/packet/EthType.java b/utils/misc/src/main/java/org/onlab/packet/EthType.java index c69ed145ec5..3affb9a0661 100644 --- a/utils/misc/src/main/java/org/onlab/packet/EthType.java +++ b/utils/misc/src/main/java/org/onlab/packet/EthType.java @@ -38,6 +38,7 @@ public enum EtherType { MPLS_UNICAST(0x8847, "mpls_unicast", org.onlab.packet.MPLS.deserializer()), MPLS_MULTICAST(0x8848, "mpls_multicast", org.onlab.packet.MPLS.deserializer()), EAPOL(0x888e, "eapol", org.onlab.packet.EAPOL.deserializer()), + PPPoED(0x8863, "pppoed", org.onlab.packet.PPPoED.deserializer()), SLOW(0x8809, "slow", org.onlab.packet.Slow.deserializer()), UNKNOWN(0, "unknown", null); diff --git a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java index fb249a9985b..e3af9601d86 100644 --- a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java +++ b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java @@ -49,6 +49,7 @@ public class Ethernet extends BasePacket { public static final short TYPE_VLAN = EthType.EtherType.VLAN.ethType().toShort(); public static final short TYPE_QINQ = EthType.EtherType.QINQ.ethType().toShort(); public static final short TYPE_BSN = EthType.EtherType.BDDP.ethType().toShort(); + public static final short TYPE_PPPOED = EthType.EtherType.PPPoED.ethType().toShort(); public static final short MPLS_UNICAST = EthType.EtherType.MPLS_UNICAST.ethType().toShort(); public static final short MPLS_MULTICAST = EthType.EtherType.MPLS_MULTICAST.ethType().toShort(); @@ -703,6 +704,8 @@ public String toString() { sb.append("\nllc packet"); } else if (pkt instanceof EAPOL) { sb.append("\neapol"); + } else if (pkt instanceof PPPoED) { + sb.append("\npppoed packet"); } else { sb.append("\nunknown packet"); } diff --git a/utils/misc/src/main/java/org/onlab/packet/PPPoED.java b/utils/misc/src/main/java/org/onlab/packet/PPPoED.java new file mode 100644 index 00000000000..181db7d0e8c --- /dev/null +++ b/utils/misc/src/main/java/org/onlab/packet/PPPoED.java @@ -0,0 +1,220 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.packet; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import static org.onlab.packet.PacketUtils.checkInput; + +public class PPPoED extends BasePacket { + protected byte version; + protected byte type; + protected byte code; + protected short sessionId; + protected short payloadLength; + protected List tags = new ArrayList<>(); + + // PPPoED packet types + public static final byte PPPOED_CODE_PADI = (byte) 0x09; + public static final byte PPPOED_CODE_PADO = (byte) 0x07; + public static final byte PPPOED_CODE_PADR = (byte) 0x19; + public static final byte PPPOED_CODE_PADS = (byte) 0x65; + public static final byte PPPOED_CODE_PADT = (byte) 0xa7; + + private static final int HEADER_LENGTH = 6; + private static final int TAG_HEADER_LENGTH = 4; + + public PPPoED() { + } + + public byte getVersion() { + return version; + } + + public void setVersion(byte version) { + this.version = version; + } + + public byte getType() { + return type; + } + + public void setType(byte type) { + this.type = type; + } + + public byte getCode() { + return code; + } + + public void setCode(byte code) { + this.code = code; + } + + public short getSessionId() { + return sessionId; + } + + public void setSessionId(short sessionId) { + this.sessionId = sessionId; + } + + public short getPayloadLength() { + return payloadLength; + } + + public void setPayloadLength(short payloadLength) { + this.payloadLength = payloadLength; + } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + + /** + * Gets a list of tags from the packet. + * + * @param tagType the type field of the required tags + * @return List of the tags that match the type or an empty list if there is none + */ + public ArrayList getTagList(short tagType) { + ArrayList tagList = new ArrayList<>(); + for (int i = 0; i < this.tags.size(); i++) { + if (this.tags.get(i).getType() == tagType) { + tagList.add(this.tags.get(i)); + } + } + return tagList; + } + + /** + * Gets a tag from the packet. + * + * @param tagType the type field of the required tag + * @return the first tag that matches the type or null if does not exist + */ + public PPPoEDTag getTag(short tagType) { + for (int i = 0; i < this.tags.size(); i++) { + if (this.tags.get(i).getType() == tagType) { + return this.tags.get(i); + } + } + return null; + } + + /** + * Sets a tag in the packet. + * + * @param tagType the type field of the tag to set + * @param value value to be set + * @return reference to the tag object + */ + public PPPoEDTag setTag(short tagType, byte[] value) { + short tagLength = (short) (value.length); + PPPoEDTag newTag = new PPPoEDTag(tagType, tagLength, value); + this.tags.add(newTag); + this.payloadLength += TAG_HEADER_LENGTH + tagLength; + return newTag; + } + + /** + * Deserializer for PPPoED packets. + * + * @return deserializer + */ + public static Deserializer deserializer() { + return (data, offset, length) -> { + checkInput(data, offset, length, HEADER_LENGTH); + + final ByteBuffer bb = ByteBuffer.wrap(data, offset, length); + PPPoED pppoed = new PPPoED(); + byte versionByte = bb.get(); + pppoed.setVersion((byte) (versionByte >> 4 & 0xf)); + pppoed.setType((byte) (versionByte & 0xf)); + pppoed.setCode(bb.get()); + pppoed.setSessionId(bb.getShort()); + pppoed.setPayloadLength(bb.getShort()); + int remainingLength = pppoed.payloadLength; + while (remainingLength > 0 && bb.hasRemaining()) { + PPPoEDTag tag = new PPPoEDTag(); + tag.setType(bb.getShort()); + tag.setLength(bb.getShort()); + tag.value = new byte[tag.length]; + bb.get(tag.value, 0, tag.length); + pppoed.tags.add(tag); + remainingLength -= tag.length + TAG_HEADER_LENGTH; + } + return pppoed; + }; + } + + @Override + public byte[] serialize() { + final byte[] data = new byte[this.payloadLength + HEADER_LENGTH]; + final ByteBuffer bb = ByteBuffer.wrap(data); + bb.put((byte) ((this.version & 0xf) << 4 | this.type & 0xf)); + bb.put(this.code); + bb.putShort(this.sessionId); + bb.putShort(this.payloadLength); + for (int i = 0; i < this.tags.size(); i++) { + PPPoEDTag tag = this.tags.get(i); + bb.putShort(tag.getType()); + bb.putShort(tag.getLength()); + bb.put(tag.getValue()); + } + return data; + } + + @Override + public String toString() { + return "PPPoED{" + + "version=" + version + + ", type=" + type + + ", code=" + code + + ", session_id=" + sessionId + + ", payload_length=" + payloadLength + + ", tags=" + tags + + '}'; + } + + public enum Type { + PADI(PPPOED_CODE_PADI), + PADO(PPPOED_CODE_PADO), + PADR(PPPOED_CODE_PADR), + PADS(PPPOED_CODE_PADS), + PADT(PPPOED_CODE_PADT); + + public int value; + + Type(int value) { + this.value = value; + } + + public static Type getTypeByValue(int value) { + return Stream.of(values()) + .filter(el -> el.value == value) + .findFirst() + .orElse(null); + } + } +} diff --git a/utils/misc/src/main/java/org/onlab/packet/PPPoEDTag.java b/utils/misc/src/main/java/org/onlab/packet/PPPoEDTag.java new file mode 100644 index 00000000000..15f6f2626fe --- /dev/null +++ b/utils/misc/src/main/java/org/onlab/packet/PPPoEDTag.java @@ -0,0 +1,89 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onlab.packet; + +import java.util.Arrays; + +public class PPPoEDTag { + protected short type; + protected short length; + protected byte[] value; + + // PPPoED tag types + public static final short PPPOED_TAG_END_OF_LIST = 0x0000; + public static final short PPPOED_TAG_SERVICE_NAME = 0x0101; + public static final short PPPOED_TAG_AC_NAME = 0x0102; + public static final short PPPOED_TAG_HOST_UNIQ = 0x0103; + public static final short PPPOED_TAG_AC_COOKIE = 0x0104; + public static final short PPPOED_TAG_VENDOR_SPECIFIC = 0x0105; + public static final short PPPOED_TAG_RELAY_SESSION_ID = 0x0110; + public static final short PPPOED_TAG_SERVICE_NAME_ERROR = 0x0201; + public static final short PPPOED_TAG_AC_SYSTEM_ERROR = 0x0202; + public static final short PPPOED_TAG_GENERIC_ERROR = 0x0203; + + /** + * Default constructor. + */ + public PPPoEDTag() { + } + + /** + * Constructs a PPPoED tag with type, length and value. + * + * @param type type + * @param length length + * @param value value + */ + public PPPoEDTag(final short type, final short length, final byte[] value) { + this.type = type; + this.length = length; + this.value = value; + } + + public short getType() { + return type; + } + + public void setType(short type) { + this.type = type; + } + + public short getLength() { + return length; + } + + public void setLength(short length) { + this.length = length; + } + + public byte[] getValue() { + return value; + } + + public void setValue(byte[] value) { + this.value = value; + } + + @Override + public String toString() { + return "PPPoEDTag{" + + "type=" + type + + ", length=" + length + + ", value=" + Arrays.toString(value) + + '}'; + } +} diff --git a/utils/misc/src/test/java/org/onlab/packet/PPPoEDTest.java b/utils/misc/src/test/java/org/onlab/packet/PPPoEDTest.java new file mode 100644 index 00000000000..c2ca05bf043 --- /dev/null +++ b/utils/misc/src/test/java/org/onlab/packet/PPPoEDTest.java @@ -0,0 +1,147 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.packet; + +import com.google.common.io.Resources; + +import java.nio.ByteBuffer; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Unit tests for PPPoED class. + */ +public class PPPoEDTest { + + private static final byte VERSION = (byte) 1; + private static final byte TYPE = (byte) 1; + private static final short NO_SESSION = (short) 0; + private static final short SESSION = (short) 0x02e2; + + private static final String AC_NAME = "pfSense.localdomain"; + private static final long AC_COOKIE = 32098554083868671L; + private static final String SERVICE_NAME = "*"; + + private static final String PADI = "pppoed/padi.bin"; + private static final String PADO = "pppoed/pado.bin"; + private static final String PADR = "pppoed/padr.bin"; + private static final String PADS = "pppoed/pads.bin"; + private static final String PADT = "pppoed/padt.bin"; + + @Test + public void testDeserializeBadInput() throws Exception { + PacketTestUtils.testDeserializeBadInput(PPPoED.deserializer()); + } + + @Test + public void testTruncatedPacket() throws Exception { + byte[] byteHeader = ByteBuffer.allocate(6) + .put((byte) 0x11) // version/type + .put((byte) 0x09) // code + .putShort((short) 0x0000) // transaction id + .putShort((short) 0x0000) // payload length + .array(); + + PacketTestUtils.testDeserializeTruncated(PPPoED.deserializer(), byteHeader); + } + + @Test + public void testDeserializePadi() throws Exception { + byte[] data = Resources.toByteArray(PPPoEDTest.class.getResource(PADI)); + Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length); + PPPoED pppoed = (PPPoED) eth.getPayload(); + assertPPPoEDHeader(pppoed, PPPoED.PPPOED_CODE_PADI); + assertEquals(NO_SESSION, pppoed.getSessionId()); + assertEquals(0, pppoed.getTags().size()); + } + + @Test + public void testDeserializePado() throws Exception { + byte[] data = Resources.toByteArray(PPPoEDTest.class.getResource(PADO)); + Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length); + + PPPoED pppoed = (PPPoED) eth.getPayload(); + assertPPPoEDHeader(pppoed, PPPoED.PPPOED_CODE_PADO); + assertEquals(NO_SESSION, pppoed.getSessionId()); + + assertEquals(3, pppoed.getTags().size()); + + PPPoEDTag acName = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_NAME); + assertArrayEquals(AC_NAME.getBytes(), acName.value); + + PPPoEDTag serviceName = pppoed.getTag(PPPoEDTag.PPPOED_TAG_SERVICE_NAME); + assertArrayEquals(SERVICE_NAME.getBytes(), serviceName.value); + + PPPoEDTag acCookie = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_COOKIE); + assertEquals(AC_COOKIE, ByteBuffer.wrap(acCookie.value).getLong()); + } + + @Test + public void testDeserializePadr() throws Exception { + byte[] data = Resources.toByteArray(PPPoEDTest.class.getResource(PADR)); + Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length); + + PPPoED pppoed = (PPPoED) eth.getPayload(); + assertPPPoEDHeader(pppoed, PPPoED.PPPOED_CODE_PADR); + assertEquals(NO_SESSION, pppoed.getSessionId()); + + assertEquals(1, pppoed.getTags().size()); + + PPPoEDTag acCookie = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_COOKIE); + assertEquals(AC_COOKIE, ByteBuffer.wrap(acCookie.value).getLong()); + } + + @Test + public void testDeserializePads() throws Exception { + byte[] data = Resources.toByteArray(PPPoEDTest.class.getResource(PADS)); + Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length); + + PPPoED pppoed = (PPPoED) eth.getPayload(); + assertPPPoEDHeader(pppoed, PPPoED.PPPOED_CODE_PADS); + assertEquals(SESSION, pppoed.getSessionId()); + + assertEquals(2, pppoed.getTags().size()); + PPPoEDTag acName = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_NAME); + assertArrayEquals(AC_NAME.getBytes(), acName.value); + + PPPoEDTag acCookie = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_COOKIE); + assertEquals(AC_COOKIE, ByteBuffer.wrap(acCookie.value).getLong()); + } + + @Test + public void testDeserializePadt() throws Exception { + byte[] data = Resources.toByteArray(PPPoEDTest.class.getResource(PADT)); + Ethernet eth = Ethernet.deserializer().deserialize(data, 0, data.length); + + PPPoED pppoed = (PPPoED) eth.getPayload(); + assertPPPoEDHeader(pppoed, PPPoED.PPPOED_CODE_PADT); + assertEquals(SESSION, pppoed.getSessionId()); + + assertEquals(1, pppoed.getTags().size()); + PPPoEDTag acCookie = pppoed.getTag(PPPoEDTag.PPPOED_TAG_AC_COOKIE); + assertEquals(AC_COOKIE, ByteBuffer.wrap(acCookie.value).getLong()); + } + + private void assertPPPoEDHeader(PPPoED pppoed, byte code) { + assertNotNull(pppoed); + assertEquals(VERSION, pppoed.getVersion()); + assertEquals(TYPE, pppoed.getType()); + assertEquals(code, pppoed.getCode()); + } + +} diff --git a/utils/misc/src/test/resources/org/onlab/packet/pppoed/padi.bin b/utils/misc/src/test/resources/org/onlab/packet/pppoed/padi.bin new file mode 100644 index 0000000000000000000000000000000000000000..46daf26df9a7e1f886c14dbb7b6524499afd0278 GIT binary patch literal 60 dcmezW9|Tyg9NBX3LPxS7Cj$^LGJ;6L002}p3jhEB literal 0 HcmV?d00001 diff --git a/utils/misc/src/test/resources/org/onlab/packet/pppoed/pado.bin b/utils/misc/src/test/resources/org/onlab/packet/pppoed/pado.bin new file mode 100644 index 0000000000000000000000000000000000000000..c40ec4610c5f9d436f997e976a990d634bf7e5e3 GIT binary patch literal 64 zcmZR%a%9WB3ngt;zuDV5k_Fir7#K7dnHYo%(t=a-ic|G+@{<#DQu1>XGxHc385p$~ RSr|ANia5&|fBgRs!T{xl7TW*- literal 0 HcmV?d00001 diff --git a/utils/misc/src/test/resources/org/onlab/packet/pppoed/padr.bin b/utils/misc/src/test/resources/org/onlab/packet/pppoed/padr.bin new file mode 100644 index 0000000000000000000000000000000000000000..7b742cee85c7092d1307b9586d1c623116d398d5 GIT binary patch literal 32 ocmXSEtNP8}#&YGzmU|aEk_9Ch7#MgMSr|ANia5&|fBgRs0M*9~5&!@I literal 0 HcmV?d00001 diff --git a/utils/misc/src/test/resources/org/onlab/packet/pppoed/pads.bin b/utils/misc/src/test/resources/org/onlab/packet/pppoed/pads.bin new file mode 100644 index 0000000000000000000000000000000000000000..0709d805d45c8cd5c227c35daa673e8656cdc701 GIT binary patch literal 55 zcmZR%a%9WB3ngt;zuDV5k_A(l9x*60GBF4jqy?wu6{qUuTQq~zx&X67-nFmNyw Lah5aw`2QaOZp{?* literal 0 HcmV?d00001 diff --git a/utils/misc/src/test/resources/org/onlab/packet/pppoed/padt.bin b/utils/misc/src/test/resources/org/onlab/packet/pppoed/padt.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ecf018e8337df13ff1e4cdb93dc38d60830c9a1 GIT binary patch literal 60 rcmXSEtNP8}#&YGzmU|aEk_DGDJ!0TtWMSZ7DB>(<{PF)k10DbXXCV!Q literal 0 HcmV?d00001 From cb2cc1d97496eace1281778efe9e3a28d9c6f41f Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 28 Jan 2021 18:25:59 -0800 Subject: [PATCH 029/235] Fix issues seen during bundle refresh with shared executors Shared executors are shut down by CoreManager during bundle refresh, which creates issues in many apps/subsystems. This change fixes only those issues seen in TOST. - Fix NPE, by shutting down executors only if initialized - Fix timer already cancelled by re-creating resources depending on terminated executors Change-Id: I00cfb451c54ada67ab94b09edb486d49a5bd084f --- .../cfg/impl/ComponentConfigManager.java | 7 ++++++- .../main/java/org/onlab/util/SharedExecutors.java | 14 ++++++++------ .../org/onlab/util/SharedScheduledExecutors.java | 10 ++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java index 076ae4b063f..49ae74874f7 100644 --- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java +++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java @@ -74,7 +74,7 @@ public class ComponentConfigManager implements ComponentConfigService { private final Logger log = getLogger(getClass()); private final ComponentConfigStoreDelegate delegate = new InternalStoreDelegate(); - private final InternalAccumulator accumulator = new InternalAccumulator(); + private InternalAccumulator accumulator; @Reference(cardinality = ReferenceCardinality.MANDATORY) protected ComponentConfigStore store; @@ -89,12 +89,17 @@ public class ComponentConfigManager implements ComponentConfigService { @Activate public void activate() { + // Accumulator depends on SharedExecutors, we create a new one at each + // activation to avoid using executors that have been terminated, which + // can happen during core bundle refresh. + accumulator = new InternalAccumulator(); store.setDelegate(delegate); log.info("Started"); } @Deactivate public void deactivate() { + accumulator = null; store.unsetDelegate(delegate); log.info("Stopped"); } diff --git a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java index 6d92ce6feff..cc99bcce341 100644 --- a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java +++ b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java @@ -108,12 +108,14 @@ public static void setMetricsService(MetricsService metricsService) { */ public static void shutdown() { synchronized (SHARED_TIMER_LOCK) { - sharedTimer.shutdown(); - singleThreadExecutor.backingExecutor().shutdown(); - poolThreadExecutor.backingExecutor().shutdown(); - sharedTimer = null; - singleThreadExecutor = null; - poolThreadExecutor = null; + if (sharedTimer != null) { + sharedTimer.shutdown(); + singleThreadExecutor.backingExecutor().shutdown(); + poolThreadExecutor.backingExecutor().shutdown(); + sharedTimer = null; + singleThreadExecutor = null; + poolThreadExecutor = null; + } } } diff --git a/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java index cfba06d6846..9141438c818 100644 --- a/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java +++ b/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java @@ -116,10 +116,12 @@ public static void setPoolSize(int poolSize) { */ public static void shutdown() { synchronized (EXECUTORS_LOCK) { - singleThreadExecutor.backingExecutor().shutdown(); - singleThreadExecutor = null; - poolThreadExecutor.backingExecutor().shutdown(); - poolThreadExecutor = null; + if (singleThreadExecutor != null) { + singleThreadExecutor.backingExecutor().shutdown(); + singleThreadExecutor = null; + poolThreadExecutor.backingExecutor().shutdown(); + poolThreadExecutor = null; + } } } } From 08be25533d09c3ba8023f4d34e07f4555d6013aa Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 28 Jan 2021 17:25:16 -0800 Subject: [PATCH 030/235] Add digest to P4InfoBrowser Change-Id: Ie79b61d2ecfc5a52c8b027a5384b86a555623db7 --- .../p4runtime/ctl/utils/P4InfoBrowser.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java index 29cddffb913..8504202b101 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/utils/P4InfoBrowser.java @@ -30,6 +30,7 @@ import p4.config.v1.P4InfoOuterClass.P4Info; import p4.config.v1.P4InfoOuterClass.Preamble; import p4.config.v1.P4InfoOuterClass.Table; +import p4.config.v1.P4InfoOuterClass.Digest; import java.util.Map; @@ -55,6 +56,7 @@ public final class P4InfoBrowser { private final Map> matchFields = Maps.newHashMap(); private final Map> ctrlPktMetadatasMetadata = Maps.newHashMap(); + private final EntityBrowser digests = new EntityBrowser<>("digest"); /** * Creates a new browser for the given P4Info. @@ -116,6 +118,9 @@ private void parseP4Info(P4Info p4info) { entity.getMetadataList().forEach(m -> metadataBrowser.add(m.getName(), null, m.getId(), m)); ctrlPktMetadatasMetadata.put(ctrlPktMetadataId, metadataBrowser); }); + + p4info.getDigestsList().forEach( + entity -> digests.addWithPreamble(entity.getPreamble(), entity)); } /** @@ -190,6 +195,15 @@ public EntityBrowser controllerPacketMetadatas() { return ctrlPktMetadatas; } + /** + * Returns a browser for digests. + * + * @return digest browser + */ + public EntityBrowser digests() { + return digests; + } + /** * Returns a browser for params of the given action. * From 283e217508b46d002f9e4640ea62cd7a63334a8c Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 5 Feb 2021 17:56:22 +0100 Subject: [PATCH 031/235] [AETHER-1230] Prevents the ejection of the P4RuntimePacketProvider listener Offloads to a predictable executor the handling of the packet-ins. Without this the listener can be easily ejected as its execution includes the PacketProviderService and potentially all the processors installed by the apps and everything is executed in the context of the core dispatcher thread Change-Id: I2e5f57fdf0a0a21a8f4f3c8326e4268467328833 --- .../packet/impl/OsgiPropertyConstants.java | 30 ++++ .../packet/impl/P4RuntimePacketProvider.java | 165 ++++++++++++------ 2 files changed, 144 insertions(+), 51 deletions(-) create mode 100644 providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/OsgiPropertyConstants.java diff --git a/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/OsgiPropertyConstants.java b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/OsgiPropertyConstants.java new file mode 100644 index 00000000000..9dadb40eb0e --- /dev/null +++ b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/OsgiPropertyConstants.java @@ -0,0 +1,30 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.provider.p4runtime.packet.impl; + +/** + * Constants for default values of configurable properties. + */ +public final class OsgiPropertyConstants { + + private OsgiPropertyConstants() {} + + public static final String P4RUNTIME_PACKET_PROVIDER_WORKERS = "workers"; + + public static final int P4RUNTIME_PACKET_PROVIDER_WORKERS_DEFAULT = 4; + +} diff --git a/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java index 2fa7493d870..edf95de36aa 100644 --- a/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java +++ b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java @@ -16,8 +16,9 @@ package org.onosproject.provider.p4runtime.packet.impl; - import org.onlab.packet.EthType; +import org.onlab.util.PredictableExecutor; +import org.onosproject.cfg.ComponentConfigService; import org.onosproject.mastership.MastershipService; import org.onosproject.net.Device; import org.onosproject.net.DeviceId; @@ -40,22 +41,34 @@ import org.onosproject.p4runtime.api.P4RuntimeEvent; import org.onosproject.p4runtime.api.P4RuntimeEventListener; import org.onosproject.p4runtime.api.P4RuntimePacketIn; +import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Modified; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.slf4j.Logger; import java.nio.ByteBuffer; +import java.util.Dictionary; +import java.util.concurrent.ExecutorService; +import static com.google.common.base.Strings.isNullOrEmpty; +import static org.onlab.util.Tools.get; +import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.net.flow.DefaultTrafficTreatment.emptyTreatment; +import static org.onosproject.provider.p4runtime.packet.impl.OsgiPropertyConstants.P4RUNTIME_PACKET_PROVIDER_WORKERS; +import static org.onosproject.provider.p4runtime.packet.impl.OsgiPropertyConstants.P4RUNTIME_PACKET_PROVIDER_WORKERS_DEFAULT; import static org.slf4j.LoggerFactory.getLogger; /** * Implementation of a packet provider for P4Runtime device. */ -@Component(immediate = true) +@Component(immediate = true, + property = { + P4RUNTIME_PACKET_PROVIDER_WORKERS + ":Integer=" + P4RUNTIME_PACKET_PROVIDER_WORKERS_DEFAULT, + }) public class P4RuntimePacketProvider extends AbstractProvider implements PacketProvider { private final Logger log = getLogger(getClass()); @@ -72,10 +85,18 @@ public class P4RuntimePacketProvider extends AbstractProvider implements PacketP @Reference(cardinality = ReferenceCardinality.MANDATORY) protected MastershipService mastershipService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) + protected ComponentConfigService cfgService; + private PacketProviderService providerService; private InternalPacketListener packetListener = new InternalPacketListener(); + /** Number of P4Runtime packet provider workers. */ + private int workers = P4RUNTIME_PACKET_PROVIDER_WORKERS_DEFAULT; + // Predictable executor to stitch the packet processing always to the same thread + private PredictableExecutor packetWorkers; + /** * Creates a new P4Runtime packet provider. */ @@ -84,20 +105,48 @@ public P4RuntimePacketProvider() { } @Activate - protected void activate() { + protected void activate(ComponentContext context) { + cfgService.registerProperties(getClass()); providerService = providerRegistry.register(this); + modified(context); controller.addListener(packetListener); log.info("Started"); } @Deactivate public void deactivate() { + cfgService.unregisterProperties(getClass(), false); controller.removeListener(packetListener); providerRegistry.unregister(this); providerService = null; + stopWorkersIfNeeded(); log.info("Stopped"); } + @Modified + protected void modified(ComponentContext context) { + if (context != null) { + Dictionary properties = context.getProperties(); + int newWorkers; + try { + String s = get(properties, P4RUNTIME_PACKET_PROVIDER_WORKERS); + newWorkers = isNullOrEmpty(s) ? workers : Integer.parseInt(s.trim()); + } catch (NumberFormatException | ClassCastException e) { + newWorkers = workers; + } + + // Stop previous executor and start a new one when there are changes in the config + // OR during the start up of the service + if (newWorkers != workers || packetWorkers == null) { + workers = newWorkers; + stopWorkersIfNeeded(); + packetWorkers = new PredictableExecutor(workers, groupedThreads("onos/p4rt", + "packet-worker-%d", log)); + log.info("Settings: p4RuntimePacketProviderWorkers={}", workers); + } + } + } + @Override public void emit(OutboundPacket packet) { if (packet != null) { @@ -112,6 +161,14 @@ public void emit(OutboundPacket packet) { } } + private void stopWorkersIfNeeded() { + if (packetWorkers != null) { + ExecutorService oldWorkerExecutor = packetWorkers; + oldWorkerExecutor.shutdown(); + packetWorkers = null; + } + } + private EthType.EtherType getEtherType(ByteBuffer data) { final short shortEthType = data.getShort(12); data.rewind(); @@ -151,62 +208,68 @@ public void send() { } } - /** - * Internal packet listener to handle packet-in events received from the P4Runtime controller. - */ - private class InternalPacketListener implements P4RuntimeEventListener { + private void handleP4RuntimeEvent(P4RuntimeEvent event) { + //Mastership message is sent to everybody but picked up only by master. + //FIXME we need the device ID into p4RuntimeEvnetSubject to check for mastsership + if (!(event.subject() instanceof P4RuntimePacketIn) || event.type() != P4RuntimeEvent.Type.PACKET_IN) { + log.debug("Unrecognized event type {}, discarding", event.type()); + // Not a packet-in event, ignore it. + return; + } + P4RuntimePacketIn eventSubject = (P4RuntimePacketIn) event.subject(); + DeviceId deviceId = eventSubject.deviceId(); - @Override - public void event(P4RuntimeEvent event) { - //Masterhip message is sent to everybody but picked up only by master. - //FIXME we need the device ID into p4RuntimeEvnetSubject to check for mastsership - if (!(event.subject() instanceof P4RuntimePacketIn) || event.type() != P4RuntimeEvent.Type.PACKET_IN) { - log.debug("Unrecognized event type {}, discarding", event.type()); - // Not a packet-in event, ignore it. - return; - } - P4RuntimePacketIn eventSubject = (P4RuntimePacketIn) event.subject(); - DeviceId deviceId = eventSubject.deviceId(); + Device device = deviceService.getDevice(eventSubject.deviceId()); + if (device == null) { + log.warn("Unable to process packet-in from {}, device is null in the core", deviceId); + return; + } - Device device = deviceService.getDevice(eventSubject.deviceId()); - if (device == null) { - log.warn("Unable to process packet-in from {}, device is null in the core", deviceId); - return; - } + if (!device.is(PiPipelineInterpreter.class)) { + log.warn("Unable to process packet-in from {}, device has no PiPipelineInterpreter behaviour", + deviceId); + return; + } - if (!device.is(PiPipelineInterpreter.class)) { - log.warn("Unable to process packet-in from {}, device has no PiPipelineInterpreter behaviour", - deviceId); - return; - } + PiPacketOperation operation = eventSubject.packetOperation(); + InboundPacket inPkt; + try { + inPkt = device.as(PiPipelineInterpreter.class).mapInboundPacket(operation, deviceId); + } catch (PiPipelineInterpreter.PiInterpreterException e) { + log.warn("Unable to interpret inbound packet from {}: {}", deviceId, e.getMessage()); + return; + } - PiPacketOperation operation = eventSubject.packetOperation(); - InboundPacket inPkt; - try { - inPkt = device.as(PiPipelineInterpreter.class).mapInboundPacket(operation, deviceId); - } catch (PiPipelineInterpreter.PiInterpreterException e) { - log.warn("Unable to interpret inbound packet from {}: {}", deviceId, e.getMessage()); - return; - } + if (log.isTraceEnabled()) { + final EthType.EtherType etherType = getEtherType(inPkt.unparsed()); + log.trace("Received PACKET-IN <<< device={} ingress_port={} eth_type={}", + inPkt.receivedFrom().deviceId(), inPkt.receivedFrom().port(), + etherType.ethType().toString()); + } - if (log.isTraceEnabled()) { - final EthType.EtherType etherType = getEtherType(inPkt.unparsed()); - log.trace("Received PACKET-IN <<< device={} ingress_port={} eth_type={}", - inPkt.receivedFrom().deviceId(), inPkt.receivedFrom().port(), - etherType.ethType().toString()); - } + if (inPkt == null) { + log.debug("Received null inbound packet. Ignoring."); + return; + } - if (inPkt == null) { - log.debug("Received null inbound packet. Ignoring."); - return; - } + OutboundPacket outPkt = new DefaultOutboundPacket(eventSubject.deviceId(), null, + operation.data().asReadOnlyBuffer()); + PacketContext pktCtx = new P4RuntimePacketContext(System.currentTimeMillis(), inPkt, outPkt, false); - OutboundPacket outPkt = new DefaultOutboundPacket(eventSubject.deviceId(), null, - operation.data().asReadOnlyBuffer()); - PacketContext pktCtx = new P4RuntimePacketContext(System.currentTimeMillis(), inPkt, outPkt, false); + // Pushing the packet context up for processing. + providerService.processPacket(pktCtx); + } - // Pushing the packet context up for processing. - providerService.processPacket(pktCtx); + /** + * Internal packet listener to handle packet-in events received from the P4Runtime controller. + */ + private class InternalPacketListener implements P4RuntimeEventListener { + + @Override + public void event(P4RuntimeEvent event) { + // Offload to another executor to prevent the ejection of the listener - it uses + // the device id to stitch the packets coming from a device always to the same worker + packetWorkers.execute(() -> handleP4RuntimeEvent(event), event.subject().deviceId().hashCode()); } } } From 48aee4c929671198e9c6f5362fa0ee632eb9bade Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Fri, 12 Feb 2021 08:35:16 -0300 Subject: [PATCH 032/235] [VOL-3660] Adding support to VLAN and PCP treatment on PPPoED flows. Signed-off-by: Gustavo Silva Change-Id: Ib62a2b3b9cca18e2dacab9851b16672a5eb73047 (cherry picked from commit 0433adade09c5abb7f834b5c1db42563b413c4c3) --- .../driver/pipeline/OltPipeline.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java index 90ce2aa39f6..b1e77b4b670 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java @@ -215,10 +215,10 @@ public void filter(FilteringObjective filter) { provisionEthTypeBasedFilter(filter, ethType, output, (L2ModificationInstruction) vlanId.get(), (L2ModificationInstruction) vlanPush.get()); - } else if (ethType.ethType().equals(EthType.EtherType.LLDP.ethType()) || - ethType.ethType().equals(EthType.EtherType.PPPoED.ethType())) { + } else if (ethType.ethType().equals(EthType.EtherType.PPPoED.ethType())) { + provisionPPPoED(filter, ethType, vlanId.orElse(null), vlanPcp.orElse(null), output); + } else if (ethType.ethType().equals(EthType.EtherType.LLDP.ethType())) { provisionEthTypeBasedFilter(filter, ethType, output, null, null); - } else if (ethType.ethType().equals(EthType.EtherType.IPV4.ethType())) { IPProtocolCriterion ipProto = (IPProtocolCriterion) filterForCriterion(filter.conditions(), Criterion.Type.IP_PROTO); @@ -989,6 +989,30 @@ private void provisionDhcp(FilteringObjective filter, EthTypeCriterion ethType, buildAndApplyRule(filter, selector, treatment); } + private void provisionPPPoED(FilteringObjective filter, EthTypeCriterion ethType, + Instruction vlanIdInstruction, + Instruction vlanPcpInstruction, + Instructions.OutputInstruction output) { + Instruction meter = filter.meta().metered(); + Instruction writeMetadata = filter.meta().writeMetadata(); + + VlanIdCriterion matchVlanId = (VlanIdCriterion) + filterForCriterion(filter.conditions(), Criterion.Type.VLAN_VID); + + TrafficSelector selector; + TrafficTreatment treatment; + + if (matchVlanId != null) { + log.debug("Building pppoed selector with match VLAN {}.", matchVlanId); + } else { + log.debug("Building pppoed selector without match VLAN."); + } + + selector = buildSelector(filter.key(), ethType, matchVlanId); + treatment = buildTreatment(output, meter, writeMetadata, vlanIdInstruction, vlanPcpInstruction); + buildAndApplyRule(filter, selector, treatment); + } + private void buildAndApplyRule(FilteringObjective filter, TrafficSelector selector, TrafficTreatment treatment) { FlowRule rule = DefaultFlowRule.builder() From 91217e420118075fc8b4f88341b08a127bec9595 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 12 Feb 2021 17:22:38 +0100 Subject: [PATCH 033/235] [AETHER-1248] Reset default entries A default entry according to the P4RT spec should be reset to its original value and not removed. The client can send a specially crafted write request with action field unset to reset default actions to the original value Change-Id: I451a3be395b212e14ae8eaf060cc048500705091 --- .../P4RuntimeFlowRuleProgrammable.java | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java index e8204a6acc5..3d06c2e7f74 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java @@ -156,23 +156,52 @@ public Collection getFlowEntries() { } } - if (!inconsistentEntries.isEmpty()) { - // Trigger clean up of inconsistent entries. - log.warn("Found {} inconsistent table entries on {}, removing them...", - inconsistentEntries.size(), deviceId); - // Submit delete request and update mirror when done. - client.write(p4DeviceId, pipeconf) - .entities(inconsistentEntries, DELETE) - .submit().whenComplete((response, ex) -> { + // Default entries need to be treated in a different way according to the spec: + // the client can modify (reset or update) them but cannot remove the entries + List inconsistentDefaultEntries = Lists.newArrayList(); + List tempDefaultEntries = inconsistentEntries.stream() + .filter(PiTableEntry::isDefaultAction) + .collect(Collectors.toList()); + inconsistentEntries.removeAll(tempDefaultEntries); + // Once we have removed the default entry from inconsistentEntries we need to + // craft for each default entry a copy without the action field. According to + // the spec leaving the action field unset will reset the original default entry. + tempDefaultEntries.forEach(piTableEntry -> { + PiTableEntry resetEntry = PiTableEntry.builder() + .forTable(piTableEntry.table()).build(); + inconsistentDefaultEntries.add(resetEntry); + }); + + // Clean up of inconsistent entries. + if (!inconsistentEntries.isEmpty() || !inconsistentDefaultEntries.isEmpty()) { + WriteRequest writeRequest = client.write(p4DeviceId, pipeconf); + // Trigger remove of inconsistent entries. + if (!inconsistentEntries.isEmpty()) { + log.warn("Found {} inconsistent table entries on {}, removing them...", + inconsistentEntries.size(), deviceId); + writeRequest = writeRequest.entities(inconsistentEntries, DELETE); + } + + // Trigger reset of inconsistent default entries. + if (!inconsistentDefaultEntries.isEmpty()) { + log.warn("Found {} inconsistent default table entries on {}, resetting them...", + inconsistentDefaultEntries.size(), deviceId); + writeRequest = writeRequest.entities(inconsistentDefaultEntries, MODIFY); + } + + // Submit delete request for non-default entries and modify request + // for default entries. Updates mirror when done. + writeRequest.submit().whenComplete((response, ex) -> { if (ex != null) { log.error("Exception removing inconsistent table entries", ex); } else { log.debug("Successfully removed {} out of {} inconsistent entries", - response.success().size(), response.all().size()); + response.success().size(), response.all().size()); } - tableMirror.applyWriteResponse(response); + // We can use the entity as the handle does not contain the action field + // so the key will be removed even if the table entry is different + response.success().forEach(entity -> tableMirror.remove((PiTableEntryHandle) entity.handle())); }); - } return result.build(); From 1031829272ebc434584e64f2318e173e3a860d5b Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Tue, 16 Feb 2021 11:24:10 +0100 Subject: [PATCH 034/235] [VOL-3836] Extract the OLT pipeliners from ONOS Change-Id: I1a11000b1e92148b5d5230c311202ba4abbb2ca8 --- .../driver/pipeline/NokiaOltPipeline.java | 784 ----------- .../driver/pipeline/OltPipeline.java | 1172 ----------------- .../src/main/resources/onos-drivers.xml | 42 - 3 files changed, 1998 deletions(-) delete mode 100644 drivers/default/src/main/java/org/onosproject/driver/pipeline/NokiaOltPipeline.java delete mode 100644 drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/NokiaOltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/NokiaOltPipeline.java deleted file mode 100644 index 667d8cf087e..00000000000 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/NokiaOltPipeline.java +++ /dev/null @@ -1,784 +0,0 @@ -/* - * Copyright 2016-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.driver.pipeline; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalCause; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.Lists; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; -import org.onlab.osgi.ServiceDirectory; -import org.onlab.packet.EthType; -import org.onlab.packet.IPv4; -import org.onlab.packet.VlanId; -import org.onlab.util.KryoNamespace; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.behaviour.NextGroup; -import org.onosproject.net.behaviour.Pipeliner; -import org.onosproject.net.behaviour.PipelinerContext; -import org.onosproject.net.driver.AbstractHandlerBehaviour; -import org.onosproject.net.flow.DefaultFlowRule; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.FlowRuleOperations; -import org.onosproject.net.flow.FlowRuleOperationsContext; -import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.criteria.Criteria; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.EthTypeCriterion; -import org.onosproject.net.flow.criteria.IPCriterion; -import org.onosproject.net.flow.criteria.IPProtocolCriterion; -import org.onosproject.net.flow.criteria.PortCriterion; -import org.onosproject.net.flow.criteria.VlanIdCriterion; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.Instructions; -import org.onosproject.net.flow.instructions.L2ModificationInstruction; -import org.onosproject.net.flowobjective.FilteringObjective; -import org.onosproject.net.flowobjective.FlowObjectiveStore; -import org.onosproject.net.flowobjective.ForwardingObjective; -import org.onosproject.net.flowobjective.NextObjective; -import org.onosproject.net.flowobjective.Objective; -import org.onosproject.net.flowobjective.ObjectiveError; -import org.onosproject.net.group.DefaultGroupBucket; -import org.onosproject.net.group.DefaultGroupDescription; -import org.onosproject.net.group.DefaultGroupKey; -import org.onosproject.net.group.Group; -import org.onosproject.net.group.GroupBucket; -import org.onosproject.net.group.GroupBuckets; -import org.onosproject.net.group.GroupDescription; -import org.onosproject.net.group.GroupEvent; -import org.onosproject.net.group.GroupKey; -import org.onosproject.net.group.GroupListener; -import org.onosproject.net.group.GroupService; -import org.onosproject.store.serializers.KryoNamespaces; -import org.onosproject.store.service.StorageService; -import org.slf4j.Logger; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; -import java.util.Iterator; - - -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Pipeliner for OLT device. - */ - -public class NokiaOltPipeline extends AbstractHandlerBehaviour implements Pipeliner { - - private static final Integer QQ_TABLE = 1; - private static final short MCAST_VLAN = 4000; - private static final String OLTCOOKIES = "olt-cookies-must-be-unique"; - private static final int EAPOL_FLOW_PRIORITY = 1200; - private final Logger log = getLogger(getClass()); - - private ServiceDirectory serviceDirectory; - private FlowRuleService flowRuleService; - private GroupService groupService; - private CoreService coreService; - private StorageService storageService; - - private DeviceId deviceId; - private ApplicationId appId; - - - protected FlowObjectiveStore flowObjectiveStore; - - private Cache pendingGroups; - - protected static KryoNamespace appKryo = new KryoNamespace.Builder() - .register(KryoNamespaces.API) - .register(GroupKey.class) - .register(DefaultGroupKey.class) - .register(OLTPipelineGroup.class) - .build("OltPipeline"); - @Override - public void init(DeviceId deviceId, PipelinerContext context) { - log.debug("Initiate OLT pipeline"); - this.serviceDirectory = context.directory(); - this.deviceId = deviceId; - - flowRuleService = serviceDirectory.get(FlowRuleService.class); - coreService = serviceDirectory.get(CoreService.class); - groupService = serviceDirectory.get(GroupService.class); - flowObjectiveStore = context.store(); - storageService = serviceDirectory.get(StorageService.class); - - appId = coreService.registerApplication( - "org.onosproject.driver.OLTPipeline"); - - - pendingGroups = CacheBuilder.newBuilder() - .expireAfterWrite(20, TimeUnit.SECONDS) - .removalListener((RemovalNotification notification) -> { - if (notification.getCause() == RemovalCause.EXPIRED) { - fail(notification.getValue(), ObjectiveError.GROUPINSTALLATIONFAILED); - } - }).build(); - - groupService.addListener(new InnerGroupListener()); - - } - - @Override - public void filter(FilteringObjective filter) { - Instructions.OutputInstruction output; - - if (filter.meta() != null && !filter.meta().immediate().isEmpty()) { - output = (Instructions.OutputInstruction) filter.meta().immediate().stream() - .filter(t -> t.type().equals(Instruction.Type.OUTPUT)) - .limit(1) - .findFirst().get(); - - if (output == null || !output.port().equals(PortNumber.CONTROLLER)) { - log.error("OLT can only filter packet to controller"); - fail(filter, ObjectiveError.UNSUPPORTED); - return; - } - } else { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - - if (filter.key().type() != Criterion.Type.IN_PORT) { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - - EthTypeCriterion ethType = (EthTypeCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.ETH_TYPE); - - if (ethType == null) { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - - if (ethType.ethType().equals(EthType.EtherType.EAPOL.ethType())) { - provisionEapol(filter, ethType, output); - } else if (ethType.ethType().equals(EthType.EtherType.IPV4.ethType())) { - IPProtocolCriterion ipProto = (IPProtocolCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.IP_PROTO); - if (ipProto.protocol() == IPv4.PROTOCOL_IGMP) { - provisionIgmp(filter, ethType, ipProto, output); - } else { - log.error("OLT can only filter igmp"); - fail(filter, ObjectiveError.UNSUPPORTED); - } - } else { - log.error("OLT can only filter eapol and igmp"); - fail(filter, ObjectiveError.UNSUPPORTED); - } - - } - - private void installObjective(FlowRule.Builder ruleBuilder, Objective objective) { - FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder(); - switch (objective.op()) { - - case ADD: - flowBuilder.add(ruleBuilder.build()); - break; - case REMOVE: - flowBuilder.remove(ruleBuilder.build()); - break; - default: - log.warn("Unknown operation {}", objective.op()); - } - - flowRuleService.apply(flowBuilder.build(new FlowRuleOperationsContext() { - @Override - public void onSuccess(FlowRuleOperations ops) { - objective.context().ifPresent(context -> context.onSuccess(objective)); - } - - @Override - public void onError(FlowRuleOperations ops) { - objective.context() - .ifPresent(context -> context.onError(objective, ObjectiveError.FLOWINSTALLATIONFAILED)); - } - })); - } - - @Override - public void forward(ForwardingObjective fwd) { - - if (checkForMulticast(fwd)) { - processMulticastRule(fwd); - return; - } - - if (checkForEAPOL(fwd)) { - log.warn("Discarding EAPOL flow which is not supported on this pipeline"); - return; - } - - TrafficTreatment treatment = fwd.treatment(); - - List instructions = treatment.allInstructions(); - - Optional vlanIntruction = instructions.stream() - .filter(i -> i.type() == Instruction.Type.L2MODIFICATION) - .filter(i -> ((L2ModificationInstruction) i).subtype() == - L2ModificationInstruction.L2SubType.VLAN_PUSH || - ((L2ModificationInstruction) i).subtype() == - L2ModificationInstruction.L2SubType.VLAN_POP) - .findAny(); - - if (vlanIntruction.isPresent()) { - L2ModificationInstruction vlanIns = - (L2ModificationInstruction) vlanIntruction.get(); - - if (vlanIns.subtype() == L2ModificationInstruction.L2SubType.VLAN_PUSH) { - installUpstreamRules(fwd); - } else if (vlanIns.subtype() == L2ModificationInstruction.L2SubType.VLAN_POP) { - installDownstreamRules(fwd); - } else { - log.error("Unknown OLT operation: {}", fwd); - fail(fwd, ObjectiveError.UNSUPPORTED); - return; - } - - pass(fwd); - } else { - TrafficSelector selector = fwd.selector(); - - if (fwd.treatment() != null) { - // Deal with SPECIFIC and VERSATILE in the same manner. - FlowRule.Builder ruleBuilder = DefaultFlowRule.builder() - .forDevice(deviceId) - .withSelector(selector) - .fromApp(fwd.appId()) - .withPriority(fwd.priority()) - .withTreatment(fwd.treatment()); - - if (fwd.permanent()) { - ruleBuilder.makePermanent(); - } else { - ruleBuilder.makeTemporary(fwd.timeout()); - } - installObjective(ruleBuilder, fwd); - - } else { - log.error("No treatment error: {}", fwd); - fail(fwd, ObjectiveError.UNSUPPORTED); - } - } - - } - - - @Override - public void next(NextObjective nextObjective) { - if (nextObjective.type() != NextObjective.Type.BROADCAST) { - log.error("OLT only supports broadcast groups."); - fail(nextObjective, ObjectiveError.BADPARAMS); - } - - if (nextObjective.next().size() != 1) { - log.error("OLT only supports singleton broadcast groups."); - fail(nextObjective, ObjectiveError.BADPARAMS); - } - - TrafficTreatment treatment = nextObjective.next().stream().findFirst().get(); - - - GroupBucket bucket = DefaultGroupBucket.createAllGroupBucket(treatment); - GroupKey key = new DefaultGroupKey(appKryo.serialize(nextObjective.id())); - - - pendingGroups.put(key, nextObjective); - - switch (nextObjective.op()) { - case ADD: - GroupDescription groupDesc = - new DefaultGroupDescription(deviceId, - GroupDescription.Type.ALL, - new GroupBuckets(Collections.singletonList(bucket)), - key, - null, - nextObjective.appId()); - groupService.addGroup(groupDesc); - break; - case REMOVE: - groupService.removeGroup(deviceId, key, nextObjective.appId()); - break; - case ADD_TO_EXISTING: - groupService.addBucketsToGroup(deviceId, key, - new GroupBuckets(Collections.singletonList(bucket)), - key, nextObjective.appId()); - break; - case REMOVE_FROM_EXISTING: - groupService.removeBucketsFromGroup(deviceId, key, - new GroupBuckets(Collections.singletonList(bucket)), - key, nextObjective.appId()); - break; - default: - log.warn("Unknown next objective operation: {}", nextObjective.op()); - } - - - } - - private void processMulticastRule(ForwardingObjective fwd) { - if (fwd.nextId() == null) { - log.error("Multicast objective does not have a next id"); - fail(fwd, ObjectiveError.BADPARAMS); - } - - GroupKey key = getGroupForNextObjective(fwd.nextId()); - - if (key == null) { - log.error("Group for forwarding objective missing: {}", fwd); - fail(fwd, ObjectiveError.GROUPMISSING); - } - - Group group = groupService.getGroup(deviceId, key); - TrafficTreatment treatment = - buildTreatment(Instructions.createGroup(group.id())); - - FlowRule rule = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(0) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(treatment) - .build(); - - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - switch (fwd.op()) { - - case ADD: - builder.add(rule); - break; - case REMOVE: - builder.remove(rule); - break; - case ADD_TO_EXISTING: - case REMOVE_FROM_EXISTING: - break; - default: - log.warn("Unknown forwarding operation: {}", fwd.op()); - } - - applyFlowRules(builder, fwd); - - } - - private boolean checkForMulticast(ForwardingObjective fwd) { - - IPCriterion ip = (IPCriterion) filterForCriterion(fwd.selector().criteria(), - Criterion.Type.IPV4_DST); - - if (ip == null) { - return false; - } - - return ip.ip().isMulticast(); - - } - - private boolean checkForEAPOL(ForwardingObjective fwd) { - EthTypeCriterion ethType = (EthTypeCriterion) - filterForCriterion(fwd.selector().criteria(), Criterion.Type.ETH_TYPE); - - return ethType != null && ethType.ethType().equals(EthType.EtherType.EAPOL.ethType()); - } - private GroupKey getGroupForNextObjective(Integer nextId) { - NextGroup next = flowObjectiveStore.getNextGroup(nextId); - return appKryo.deserialize(next.data()); - - } - - private void installDownstreamRules(ForwardingObjective fwd) { - List> vlanOps = - vlanOps(fwd, - L2ModificationInstruction.L2SubType.VLAN_POP); - - if (vlanOps == null) { - return; - } - - Instructions.OutputInstruction output = (Instructions.OutputInstruction) fetchOutput(fwd, "downstream"); - - if (output == null) { - return; - } - - Pair popAndRewrite = vlanOps.remove(0); - - TrafficSelector selector = fwd.selector(); - - Criterion outerVlan = selector.getCriterion(Criterion.Type.VLAN_VID); - Criterion innerVlan = selector.getCriterion(Criterion.Type.INNER_VLAN_VID); - Criterion inport = selector.getCriterion(Criterion.Type.IN_PORT); - Criterion bullshit = Criteria.matchMetadata(output.port().toLong()); - - if (outerVlan == null || innerVlan == null || inport == null) { - log.error("Forwarding objective is underspecified: {}", fwd); - fail(fwd, ObjectiveError.BADPARAMS); - return; - } - - Criterion innerVid = Criteria.matchVlanId(((VlanIdCriterion) innerVlan).vlanId()); - - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(buildSelector(inport, outerVlan, bullshit)) - .withTreatment(buildTreatment(popAndRewrite.getLeft(), - Instructions.transition(QQ_TABLE))); - - FlowRule.Builder inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(buildSelector(inport, innerVid)) - .withTreatment(buildTreatment(popAndRewrite.getLeft(), - output)); - - applyRules(fwd, inner, outer); - - } - - private boolean hasUntaggedVlanTag(TrafficSelector selector) { - Iterator iter = selector.criteria().iterator(); - - while (iter.hasNext()) { - Criterion criterion = iter.next(); - if (criterion.type() == Criterion.Type.VLAN_VID && - ((VlanIdCriterion) criterion).vlanId().toShort() == VlanId.UNTAGGED) { - return true; - } - } - - return false; - } - - private void installUpstreamRules(ForwardingObjective fwd) { - List> vlanOps = - vlanOps(fwd, - L2ModificationInstruction.L2SubType.VLAN_PUSH); - FlowRule.Builder inner; - - if (vlanOps == null) { - return; - } - - Instruction output = fetchOutput(fwd, "upstream"); - - if (output == null) { - return; - } - - Pair innerPair = vlanOps.remove(0); - - Pair outerPair = vlanOps.remove(0); - - - if (hasUntaggedVlanTag(fwd.selector())) { - inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(buildTreatment(innerPair.getLeft(), - innerPair.getRight(), - Instructions.transition(QQ_TABLE))); - } else { - inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(buildTreatment( - innerPair.getRight(), - Instructions.transition(QQ_TABLE))); - } - - - PortCriterion inPort = (PortCriterion) - fwd.selector().getCriterion(Criterion.Type.IN_PORT); - - VlanId cVlanId = ((L2ModificationInstruction.ModVlanIdInstruction) - innerPair.getRight()).vlanId(); - - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(buildSelector(inPort, - Criteria.matchVlanId(cVlanId))) - .withTreatment(buildTreatment(outerPair.getLeft(), - outerPair.getRight(), - output)); - - applyRules(fwd, inner, outer); - - } - - private Instruction fetchOutput(ForwardingObjective fwd, String direction) { - Instruction output = fwd.treatment().allInstructions().stream() - .filter(i -> i.type() == Instruction.Type.OUTPUT) - .findFirst().orElse(null); - - if (output == null) { - log.error("OLT {} rule has no output", direction); - fail(fwd, ObjectiveError.BADPARAMS); - return null; - } - return output; - } - - private List> vlanOps(ForwardingObjective fwd, - L2ModificationInstruction.L2SubType type) { - - List> vlanOps = findVlanOps( - fwd.treatment().allInstructions(), type); - - if (vlanOps == null) { - String direction = type == L2ModificationInstruction.L2SubType.VLAN_POP - ? "downstream" : "upstream"; - log.error("Missing vlan operations in {} forwarding: {}", direction, fwd); - fail(fwd, ObjectiveError.BADPARAMS); - return null; - } - return vlanOps; - } - - - private List> findVlanOps(List instructions, - L2ModificationInstruction.L2SubType type) { - - List vlanPushs = findL2Instructions( - type, - instructions); - List vlanSets = findL2Instructions( - L2ModificationInstruction.L2SubType.VLAN_ID, - instructions); - - if (vlanPushs.size() != vlanSets.size()) { - return null; - } - - List> pairs = Lists.newArrayList(); - - for (int i = 0; i < vlanPushs.size(); i++) { - pairs.add(new ImmutablePair<>(vlanPushs.get(i), vlanSets.get(i))); - } - return pairs; - } - - private List findL2Instructions(L2ModificationInstruction.L2SubType subType, - List actions) { - return actions.stream() - .filter(i -> i.type() == Instruction.Type.L2MODIFICATION) - .filter(i -> ((L2ModificationInstruction) i).subtype() == subType) - .collect(Collectors.toList()); - } - - private void provisionEapol(FilteringObjective filter, - EthTypeCriterion ethType, - Instructions.OutputInstruction output) { - - TrafficSelector selector = buildSelector(filter.key(), ethType); - TrafficTreatment treatment = buildTreatment(output); - buildAndApplyRule(filter, selector, treatment, EAPOL_FLOW_PRIORITY); - - } - - private void provisionIgmp(FilteringObjective filter, EthTypeCriterion ethType, - IPProtocolCriterion ipProto, - Instructions.OutputInstruction output) { - TrafficSelector selector = buildSelector(filter.key(), ethType, ipProto); - TrafficTreatment treatment = buildTreatment(output); - buildAndApplyRule(filter, selector, treatment); - } - - private void buildAndApplyRule(FilteringObjective filter, TrafficSelector selector, - TrafficTreatment treatment) { - buildAndApplyRule(filter, selector, treatment, filter.priority()); - } - - private void buildAndApplyRule(FilteringObjective filter, TrafficSelector selector, - TrafficTreatment treatment, int priority) { - FlowRule rule = DefaultFlowRule.builder() - .fromApp(filter.appId()) - .forDevice(deviceId) - .forTable(0) - .makePermanent() - .withSelector(selector) - .withTreatment(treatment) - .withPriority(priority) - .build(); - - FlowRuleOperations.Builder opsBuilder = FlowRuleOperations.builder(); - - switch (filter.type()) { - case PERMIT: - opsBuilder.add(rule); - break; - case DENY: - opsBuilder.remove(rule); - break; - default: - log.warn("Unknown filter type : {}", filter.type()); - fail(filter, ObjectiveError.UNSUPPORTED); - } - - applyFlowRules(opsBuilder, filter); - } - - private void applyRules(ForwardingObjective fwd, - FlowRule.Builder inner, FlowRule.Builder outer) { - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - switch (fwd.op()) { - case ADD: - builder.add(inner.build()).add(outer.build()); - break; - case REMOVE: - builder.remove(inner.build()).remove(outer.build()); - break; - case ADD_TO_EXISTING: - break; - case REMOVE_FROM_EXISTING: - break; - default: - log.warn("Unknown forwarding operation: {}", fwd.op()); - } - - applyFlowRules(builder, fwd); - } - - private void applyFlowRules(FlowRuleOperations.Builder builder, - Objective objective) { - flowRuleService.apply(builder.build(new FlowRuleOperationsContext() { - @Override - public void onSuccess(FlowRuleOperations ops) { - pass(objective); - } - - @Override - public void onError(FlowRuleOperations ops) { - fail(objective, ObjectiveError.FLOWINSTALLATIONFAILED); - } - })); - } - - private Criterion filterForCriterion(Collection criteria, Criterion.Type type) { - return criteria.stream() - .filter(c -> c.type().equals(type)) - .limit(1) - .findFirst().orElse(null); - } - - private TrafficSelector buildSelector(Criterion... criteria) { - - - TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder(); - - for (Criterion c : criteria) { - sBuilder.add(c); - } - - return sBuilder.build(); - } - - private TrafficTreatment buildTreatment(Instruction... instructions) { - - - TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder(); - - for (Instruction i : instructions) { - tBuilder.add(i); - } - - return tBuilder.build(); - } - - - private void fail(Objective obj, ObjectiveError error) { - obj.context().ifPresent(context -> context.onError(obj, error)); - } - - private void pass(Objective obj) { - obj.context().ifPresent(context -> context.onSuccess(obj)); - } - - - private class InnerGroupListener implements GroupListener { - @Override - public void event(GroupEvent event) { - if (event.type() == GroupEvent.Type.GROUP_ADDED || event.type() == GroupEvent.Type.GROUP_UPDATED) { - GroupKey key = event.subject().appCookie(); - - NextObjective obj = pendingGroups.getIfPresent(key); - if (obj != null) { - flowObjectiveStore.putNextGroup(obj.id(), new OLTPipelineGroup(key)); - pass(obj); - pendingGroups.invalidate(key); - } - } - } - } - - private static class OLTPipelineGroup implements NextGroup { - - private final GroupKey key; - - public OLTPipelineGroup(GroupKey key) { - this.key = key; - } - - public GroupKey key() { - return key; - } - - @Override - public byte[] data() { - return appKryo.serialize(key); - } - - } - - @Override - public List getNextMappings(NextGroup nextGroup) { - // TODO Implementation deferred to vendor - return null; - } -} diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java deleted file mode 100644 index b1e77b4b670..00000000000 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java +++ /dev/null @@ -1,1172 +0,0 @@ -/* - * Copyright 2016-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.driver.pipeline; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.RemovalCause; -import com.google.common.cache.RemovalNotification; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; -import org.onlab.osgi.ServiceDirectory; -import org.onlab.packet.EthType; -import org.onlab.packet.IPv4; -import org.onlab.packet.IPv6; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.VlanId; -import org.onlab.util.KryoNamespace; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.behaviour.NextGroup; -import org.onosproject.net.behaviour.Pipeliner; -import org.onosproject.net.behaviour.PipelinerContext; -import org.onosproject.net.driver.AbstractHandlerBehaviour; -import org.onosproject.net.flow.DefaultFlowRule; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.FlowRuleOperations; -import org.onosproject.net.flow.FlowRuleOperationsContext; -import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.criteria.Criteria; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.EthTypeCriterion; -import org.onosproject.net.flow.criteria.IPCriterion; -import org.onosproject.net.flow.criteria.IPProtocolCriterion; -import org.onosproject.net.flow.criteria.PortCriterion; -import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.flow.criteria.VlanIdCriterion; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.Instructions; -import org.onosproject.net.flow.instructions.L2ModificationInstruction; -import org.onosproject.net.flowobjective.FilteringObjective; -import org.onosproject.net.flowobjective.FlowObjectiveStore; -import org.onosproject.net.flowobjective.ForwardingObjective; -import org.onosproject.net.flowobjective.NextObjective; -import org.onosproject.net.flowobjective.Objective; -import org.onosproject.net.flowobjective.ObjectiveError; -import org.onosproject.net.group.DefaultGroupBucket; -import org.onosproject.net.group.DefaultGroupDescription; -import org.onosproject.net.group.DefaultGroupKey; -import org.onosproject.net.group.Group; -import org.onosproject.net.group.GroupBucket; -import org.onosproject.net.group.GroupBuckets; -import org.onosproject.net.group.GroupDescription; -import org.onosproject.net.group.GroupEvent; -import org.onosproject.net.group.GroupKey; -import org.onosproject.net.group.GroupListener; -import org.onosproject.net.group.GroupService; -import org.onosproject.store.serializers.KryoNamespaces; -import org.onosproject.store.service.StorageService; -import org.slf4j.Logger; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static org.onosproject.core.CoreService.CORE_APP_NAME; -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Pipeliner for OLT device. - */ - -public class OltPipeline extends AbstractHandlerBehaviour implements Pipeliner { - - private static final Integer QQ_TABLE = 1; - private static final int NO_ACTION_PRIORITY = 500; - private static final String DOWNSTREAM = "downstream"; - private static final String UPSTREAM = "upstream"; - private final Logger log = getLogger(getClass()); - - private ServiceDirectory serviceDirectory; - private FlowRuleService flowRuleService; - private GroupService groupService; - private CoreService coreService; - private StorageService storageService; - - private DeviceId deviceId; - private ApplicationId appId; - - - protected FlowObjectiveStore flowObjectiveStore; - - private Cache pendingGroups; - - protected static KryoNamespace appKryo = new KryoNamespace.Builder() - .register(KryoNamespaces.API) - .register(GroupKey.class) - .register(DefaultGroupKey.class) - .register(OLTPipelineGroup.class) - .build("OltPipeline"); - - @Override - public void init(DeviceId deviceId, PipelinerContext context) { - log.debug("Initiate OLT pipeline"); - this.serviceDirectory = context.directory(); - this.deviceId = deviceId; - - flowRuleService = serviceDirectory.get(FlowRuleService.class); - coreService = serviceDirectory.get(CoreService.class); - groupService = serviceDirectory.get(GroupService.class); - flowObjectiveStore = context.store(); - storageService = serviceDirectory.get(StorageService.class); - - appId = coreService.registerApplication( - "org.onosproject.driver.OLTPipeline"); - - - pendingGroups = CacheBuilder.newBuilder() - .expireAfterWrite(20, TimeUnit.SECONDS) - .removalListener((RemovalNotification notification) -> { - if (notification.getCause() == RemovalCause.EXPIRED) { - fail(notification.getValue(), ObjectiveError.GROUPINSTALLATIONFAILED); - } - }).build(); - - groupService.addListener(new InnerGroupListener()); - - } - - @Override - public void filter(FilteringObjective filter) { - Instructions.OutputInstruction output; - - if (filter.meta() != null && !filter.meta().immediate().isEmpty()) { - output = (Instructions.OutputInstruction) filter.meta().immediate().stream() - .filter(t -> t.type().equals(Instruction.Type.OUTPUT)) - .limit(1) - .findFirst().get(); - - if (output == null || !output.port().equals(PortNumber.CONTROLLER)) { - log.warn("OLT can only filter packet to controller"); - fail(filter, ObjectiveError.UNSUPPORTED); - return; - } - } else { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - - if (filter.key().type() != Criterion.Type.IN_PORT) { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - - EthTypeCriterion ethType = (EthTypeCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.ETH_TYPE); - - if (ethType == null) { - fail(filter, ObjectiveError.BADPARAMS); - return; - } - Optional vlanId = filter.meta().immediate().stream() - .filter(t -> t.type().equals(Instruction.Type.L2MODIFICATION) - && ((L2ModificationInstruction) t).subtype() - .equals(L2ModificationInstruction.L2SubType.VLAN_ID)) - .limit(1) - .findFirst(); - - Optional vlanPcp = filter.meta().immediate().stream() - .filter(t -> t.type().equals(Instruction.Type.L2MODIFICATION) - && ((L2ModificationInstruction) t).subtype() - .equals(L2ModificationInstruction.L2SubType.VLAN_PCP)) - .limit(1) - .findFirst(); - - Optional vlanPush = filter.meta().immediate().stream() - .filter(t -> t.type().equals(Instruction.Type.L2MODIFICATION) - && ((L2ModificationInstruction) t).subtype() - .equals(L2ModificationInstruction.L2SubType.VLAN_PUSH)) - .limit(1) - .findFirst(); - - if (ethType.ethType().equals(EthType.EtherType.EAPOL.ethType())) { - - if (vlanId.isEmpty() || vlanPush.isEmpty()) { - log.warn("Missing EAPOL vlan or vlanPush"); - fail(filter, ObjectiveError.BADPARAMS); - return; - } - provisionEthTypeBasedFilter(filter, ethType, output, - (L2ModificationInstruction) vlanId.get(), - (L2ModificationInstruction) vlanPush.get()); - } else if (ethType.ethType().equals(EthType.EtherType.PPPoED.ethType())) { - provisionPPPoED(filter, ethType, vlanId.orElse(null), vlanPcp.orElse(null), output); - } else if (ethType.ethType().equals(EthType.EtherType.LLDP.ethType())) { - provisionEthTypeBasedFilter(filter, ethType, output, null, null); - } else if (ethType.ethType().equals(EthType.EtherType.IPV4.ethType())) { - IPProtocolCriterion ipProto = (IPProtocolCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.IP_PROTO); - if (ipProto == null) { - log.warn("OLT can only filter IGMP and DHCP"); - fail(filter, ObjectiveError.UNSUPPORTED); - return; - } - if (ipProto.protocol() == IPv4.PROTOCOL_IGMP) { - provisionIgmp(filter, ethType, ipProto, output, - vlanId.orElse(null), - vlanPcp.orElse(null)); - } else if (ipProto.protocol() == IPv4.PROTOCOL_UDP) { - UdpPortCriterion udpSrcPort = (UdpPortCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.UDP_SRC); - - UdpPortCriterion udpDstPort = (UdpPortCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.UDP_DST); - - if ((udpSrcPort.udpPort().toInt() == 67 && udpDstPort.udpPort().toInt() == 68) || - (udpSrcPort.udpPort().toInt() == 68 && udpDstPort.udpPort().toInt() == 67)) { - provisionDhcp(filter, ethType, ipProto, udpSrcPort, udpDstPort, vlanId.orElse(null), - vlanPcp.orElse(null), output); - } else { - log.warn("Filtering rule with unsupported UDP src {} or dst {} port", udpSrcPort, udpDstPort); - fail(filter, ObjectiveError.UNSUPPORTED); - } - } else { - log.warn("Currently supporting only IGMP and DHCP filters for IPv4 packets"); - fail(filter, ObjectiveError.UNSUPPORTED); - } - } else if (ethType.ethType().equals(EthType.EtherType.IPV6.ethType())) { - IPProtocolCriterion ipProto = (IPProtocolCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.IP_PROTO); - if (ipProto == null) { - log.warn("OLT can only filter DHCP"); - fail(filter, ObjectiveError.UNSUPPORTED); - return; - } - if (ipProto.protocol() == IPv6.PROTOCOL_UDP) { - UdpPortCriterion udpSrcPort = (UdpPortCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.UDP_SRC); - - UdpPortCriterion udpDstPort = (UdpPortCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.UDP_DST); - - if ((udpSrcPort.udpPort().toInt() == 546 && udpDstPort.udpPort().toInt() == 547) || - (udpSrcPort.udpPort().toInt() == 547 && udpDstPort.udpPort().toInt() == 546)) { - provisionDhcp(filter, ethType, ipProto, udpSrcPort, udpDstPort, vlanId.orElse(null), - vlanPcp.orElse(null), output); - } else { - log.warn("Filtering rule with unsupported UDP src {} or dst {} port", udpSrcPort, udpDstPort); - fail(filter, ObjectiveError.UNSUPPORTED); - } - } else { - log.warn("Currently supporting only DHCP filters for IPv6 packets"); - fail(filter, ObjectiveError.UNSUPPORTED); - } - } else { - log.warn("\nOnly the following are Supported in OLT for filter ->\n" - + "ETH TYPE : EAPOL, LLDP and IPV4\n" - + "IPV4 TYPE: IGMP and UDP (for DHCP)" - + "IPV6 TYPE: UDP (for DHCP)"); - fail(filter, ObjectiveError.UNSUPPORTED); - } - - } - - - @Override - public void forward(ForwardingObjective fwd) { - log.debug("Installing forwarding objective {}", fwd); - if (checkForMulticast(fwd)) { - processMulticastRule(fwd); - return; - } - - TrafficTreatment treatment = fwd.treatment(); - - List instructions = treatment.allInstructions(); - - Optional vlanInstruction = instructions.stream() - .filter(i -> i.type() == Instruction.Type.L2MODIFICATION) - .filter(i -> ((L2ModificationInstruction) i).subtype() == - L2ModificationInstruction.L2SubType.VLAN_PUSH || - ((L2ModificationInstruction) i).subtype() == - L2ModificationInstruction.L2SubType.VLAN_POP) - .findAny(); - - - if (!vlanInstruction.isPresent()) { - installNoModificationRules(fwd); - } else { - L2ModificationInstruction vlanIns = - (L2ModificationInstruction) vlanInstruction.get(); - if (vlanIns.subtype() == L2ModificationInstruction.L2SubType.VLAN_PUSH) { - installUpstreamRules(fwd); - } else if (vlanIns.subtype() == L2ModificationInstruction.L2SubType.VLAN_POP) { - installDownstreamRules(fwd); - } else { - log.error("Unknown OLT operation: {}", fwd); - fail(fwd, ObjectiveError.UNSUPPORTED); - return; - } - } - - pass(fwd); - - } - - - @Override - public void next(NextObjective nextObjective) { - if (nextObjective.type() != NextObjective.Type.BROADCAST) { - log.error("OLT only supports broadcast groups."); - fail(nextObjective, ObjectiveError.BADPARAMS); - return; - } - - if (nextObjective.next().size() != 1 && !nextObjective.op().equals(Objective.Operation.REMOVE)) { - log.error("OLT only supports singleton broadcast groups."); - fail(nextObjective, ObjectiveError.BADPARAMS); - return; - } - - Optional treatmentOpt = nextObjective.next().stream().findFirst(); - if (treatmentOpt.isEmpty() && !nextObjective.op().equals(Objective.Operation.REMOVE)) { - log.error("Next objective {} does not have a treatment", nextObjective); - fail(nextObjective, ObjectiveError.BADPARAMS); - return; - } - - GroupKey key = new DefaultGroupKey(appKryo.serialize(nextObjective.id())); - - pendingGroups.put(key, nextObjective); - log.trace("NextObjective Operation {}", nextObjective.op()); - switch (nextObjective.op()) { - case ADD: - GroupDescription groupDesc = - new DefaultGroupDescription(deviceId, - GroupDescription.Type.ALL, - new GroupBuckets( - Collections.singletonList( - buildBucket(treatmentOpt.get()))), - key, - null, - nextObjective.appId()); - groupService.addGroup(groupDesc); - break; - case REMOVE: - groupService.removeGroup(deviceId, key, nextObjective.appId()); - break; - case ADD_TO_EXISTING: - groupService.addBucketsToGroup(deviceId, key, - new GroupBuckets( - Collections.singletonList( - buildBucket(treatmentOpt.get()))), - key, nextObjective.appId()); - break; - case REMOVE_FROM_EXISTING: - groupService.removeBucketsFromGroup(deviceId, key, - new GroupBuckets( - Collections.singletonList( - buildBucket(treatmentOpt.get()))), - key, nextObjective.appId()); - break; - default: - log.warn("Unknown next objective operation: {}", nextObjective.op()); - } - - - } - - private GroupBucket buildBucket(TrafficTreatment treatment) { - return DefaultGroupBucket.createAllGroupBucket(treatment); - } - - private void processMulticastRule(ForwardingObjective fwd) { - if (fwd.nextId() == null) { - log.error("Multicast objective does not have a next id"); - fail(fwd, ObjectiveError.BADPARAMS); - } - - GroupKey key = getGroupForNextObjective(fwd.nextId()); - - if (key == null) { - log.error("Group for forwarding objective missing: {}", fwd); - fail(fwd, ObjectiveError.GROUPMISSING); - } - - Group group = groupService.getGroup(deviceId, key); - TrafficTreatment treatment = - buildTreatment(Instructions.createGroup(group.id())); - - TrafficSelector.Builder selectorBuilder = buildIpv4SelectorForMulticast(fwd); - - FlowRule rule = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(0) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(selectorBuilder.build()) - .withTreatment(treatment) - .build(); - - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - switch (fwd.op()) { - - case ADD: - builder.add(rule); - break; - case REMOVE: - builder.remove(rule); - break; - case ADD_TO_EXISTING: - case REMOVE_FROM_EXISTING: - break; - default: - log.warn("Unknown forwarding operation: {}", fwd.op()); - } - - applyFlowRules(builder, fwd); - - } - - private TrafficSelector.Builder buildIpv4SelectorForMulticast(ForwardingObjective fwd) { - TrafficSelector.Builder builderToUpdate = DefaultTrafficSelector.builder(); - - Optional vlanIdCriterion = readFromSelector(fwd.meta(), Criterion.Type.VLAN_VID); - if (vlanIdCriterion.isPresent()) { - VlanId assignedVlan = ((VlanIdCriterion) vlanIdCriterion.get()).vlanId(); - builderToUpdate.matchVlanId(assignedVlan); - } - - Optional innerVlanIdCriterion = readFromSelector(fwd.meta(), Criterion.Type.INNER_VLAN_VID); - if (innerVlanIdCriterion.isPresent()) { - VlanId assignedInnerVlan = ((VlanIdCriterion) innerVlanIdCriterion.get()).vlanId(); - builderToUpdate.matchMetadata(assignedInnerVlan.toShort()); - } - - Optional ethTypeCriterion = readFromSelector(fwd.selector(), Criterion.Type.ETH_TYPE); - if (ethTypeCriterion.isPresent()) { - EthType ethType = ((EthTypeCriterion) ethTypeCriterion.get()).ethType(); - builderToUpdate.matchEthType(ethType.toShort()); - } - - Optional ipv4DstCriterion = readFromSelector(fwd.selector(), Criterion.Type.IPV4_DST); - if (ipv4DstCriterion.isPresent()) { - IpPrefix ipv4Dst = ((IPCriterion) ipv4DstCriterion.get()).ip(); - builderToUpdate.matchIPDst(ipv4Dst); - } - - return builderToUpdate; - } - - static Optional readFromSelector(TrafficSelector selector, Criterion.Type type) { - if (selector == null) { - return Optional.empty(); - } - Criterion criterion = selector.getCriterion(type); - return (criterion == null) - ? Optional.empty() : Optional.of(criterion); - } - - private boolean checkForMulticast(ForwardingObjective fwd) { - - IPCriterion ip = (IPCriterion) filterForCriterion(fwd.selector().criteria(), - Criterion.Type.IPV4_DST); - - if (ip == null) { - return false; - } - - return ip.ip().isMulticast(); - - } - - private GroupKey getGroupForNextObjective(Integer nextId) { - NextGroup next = flowObjectiveStore.getNextGroup(nextId); - return appKryo.deserialize(next.data()); - - } - - private void installNoModificationRules(ForwardingObjective fwd) { - Instructions.OutputInstruction output = (Instructions.OutputInstruction) fetchOutput(fwd, DOWNSTREAM); - Instructions.MetadataInstruction writeMetadata = fetchWriteMetadata(fwd); - Instructions.MeterInstruction meter = (Instructions.MeterInstruction) fetchMeter(fwd); - - TrafficSelector selector = fwd.selector(); - - Criterion inport = selector.getCriterion(Criterion.Type.IN_PORT); - Criterion outerVlan = selector.getCriterion(Criterion.Type.VLAN_VID); - Criterion innerVlan = selector.getCriterion(Criterion.Type.INNER_VLAN_VID); - - if (inport == null || output == null || innerVlan == null || outerVlan == null) { - // Avoid logging a non-error from lldp, bbdp and eapol core flows. - if (!fwd.appId().name().equals(CORE_APP_NAME)) { - log.error("Forwarding objective is underspecified: {}", fwd); - } else { - log.debug("Not installing unsupported core generated flow {}", fwd); - } - fail(fwd, ObjectiveError.BADPARAMS); - return; - } - - - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(buildSelector(inport, outerVlan)) - .withTreatment(buildTreatment(output, writeMetadata, meter)); - - applyRules(fwd, outer); - } - - private void installDownstreamRules(ForwardingObjective fwd) { - Instructions.OutputInstruction output = (Instructions.OutputInstruction) fetchOutput(fwd, DOWNSTREAM); - - if (output == null) { - return; - } - - TrafficSelector selector = fwd.selector(); - - Criterion outerVlan = selector.getCriterion(Criterion.Type.VLAN_VID); - Criterion outerPbit = selector.getCriterion(Criterion.Type.VLAN_PCP); - Criterion innerVlanCriterion = selector.getCriterion(Criterion.Type.INNER_VLAN_VID); - Criterion inport = selector.getCriterion(Criterion.Type.IN_PORT); - Criterion dstMac = selector.getCriterion(Criterion.Type.ETH_DST); - - if (outerVlan == null || innerVlanCriterion == null || inport == null) { - // Avoid logging a non-error from lldp, bbdp and eapol core flows. - if (!fwd.appId().name().equals(CORE_APP_NAME)) { - log.error("Forwarding objective is underspecified: {}", fwd); - } else { - log.debug("Not installing unsupported core generated flow {}", fwd); - } - fail(fwd, ObjectiveError.BADPARAMS); - return; - } - - VlanId innerVlan = ((VlanIdCriterion) innerVlanCriterion).vlanId(); - Criterion innerVid = Criteria.matchVlanId(innerVlan); - - if (innerVlan.toShort() == VlanId.ANY_VALUE) { - TrafficSelector outerSelector = buildSelector(inport, outerVlan, outerPbit, dstMac); - installDownstreamRulesForAnyVlan(fwd, output, outerSelector, buildSelector(inport, - Criteria.matchVlanId(VlanId.ANY))); - } else { - // Required to differentiate the same match flows - // Please note that S tag and S p bit values will be same for the same service - so conflict flows! - // Metadata match criteria solves the conflict issue - but not used by the voltha - // Maybe - find a better way to solve the above problem - Criterion metadata = Criteria.matchMetadata(innerVlan.toShort()); - TrafficSelector outerSelector = buildSelector(inport, metadata, outerVlan, outerPbit, dstMac); - installDownstreamRulesForVlans(fwd, output, outerSelector, buildSelector(inport, innerVid)); - } - } - - private void installDownstreamRulesForVlans(ForwardingObjective fwd, Instruction output, - TrafficSelector outerSelector, TrafficSelector innerSelector) { - - List> vlanOps = - vlanOps(fwd, - L2ModificationInstruction.L2SubType.VLAN_POP); - - if (vlanOps == null || vlanOps.isEmpty()) { - return; - } - - Pair popAndRewrite = vlanOps.remove(0); - - TrafficTreatment innerTreatment; - VlanId setVlanId = ((L2ModificationInstruction.ModVlanIdInstruction) popAndRewrite.getRight()).vlanId(); - if (VlanId.NONE.equals(setVlanId)) { - innerTreatment = (buildTreatment(popAndRewrite.getLeft(), fetchMeter(fwd), - writeMetadataIncludingOnlyTp(fwd), output)); - } else { - innerTreatment = (buildTreatment(popAndRewrite.getRight(), - fetchMeter(fwd), writeMetadataIncludingOnlyTp(fwd), output)); - } - - List setVlanPcps = findL2Instructions(L2ModificationInstruction.L2SubType.VLAN_PCP, - fwd.treatment().allInstructions()); - - Instruction innerPbitSet = null; - - if (setVlanPcps != null && !setVlanPcps.isEmpty()) { - innerPbitSet = setVlanPcps.get(0); - } - - VlanId remarkInnerVlan = null; - Optional vlanIdCriterion = readFromSelector(innerSelector, Criterion.Type.VLAN_VID); - if (vlanIdCriterion.isPresent()) { - remarkInnerVlan = ((VlanIdCriterion) vlanIdCriterion.get()).vlanId(); - } - - Instruction modVlanId = null; - if (innerPbitSet != null) { - modVlanId = Instructions.modVlanId(remarkInnerVlan); - } - - //match: in port (nni), s-tag - //action: pop vlan (s-tag), write metadata, go to table 1, meter - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(outerSelector) - .withTreatment(buildTreatment(popAndRewrite.getLeft(), modVlanId, - innerPbitSet, fetchMeter(fwd), fetchWriteMetadata(fwd), Instructions.transition(QQ_TABLE))); - - //match: in port (nni), c-tag - //action: immediate: write metadata and pop, meter, output - FlowRule.Builder inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(innerSelector) - .withTreatment(innerTreatment); - applyRules(fwd, inner, outer); - } - - private void installDownstreamRulesForAnyVlan(ForwardingObjective fwd, Instruction output, - TrafficSelector outerSelector, TrafficSelector innerSelector) { - - //match: in port (nni), s-tag - //action: immediate: write metadata, pop vlan, meter and go to table 1 - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(outerSelector) - .withTreatment(buildTreatment(Instructions.popVlan(), fetchMeter(fwd), - fetchWriteMetadata(fwd), Instructions.transition(QQ_TABLE))); - - //match: in port (nni) and s-tag - //action: immediate : write metadata, meter and output - FlowRule.Builder inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(innerSelector) - .withTreatment(buildTreatment(fetchMeter(fwd), - writeMetadataIncludingOnlyTp(fwd), output)); - - applyRules(fwd, inner, outer); - } - - private void installUpstreamRules(ForwardingObjective fwd) { - List> vlanOps = - vlanOps(fwd, - L2ModificationInstruction.L2SubType.VLAN_PUSH); - - if (vlanOps == null || vlanOps.isEmpty()) { - return; - } - - Instruction output = fetchOutput(fwd, UPSTREAM); - - if (output == null) { - return; - } - - Pair outerPair = vlanOps.remove(0); - - boolean noneValueVlanStatus = checkNoneVlanCriteria(fwd); - boolean anyValueVlanStatus = checkAnyVlanMatchCriteria(fwd); - - if (anyValueVlanStatus) { - installUpstreamRulesForAnyVlan(fwd, output, outerPair); - } else { - Pair innerPair = outerPair; - outerPair = vlanOps.remove(0); - installUpstreamRulesForVlans(fwd, output, innerPair, outerPair, noneValueVlanStatus); - } - } - - private void installUpstreamRulesForVlans(ForwardingObjective fwd, Instruction output, - Pair innerPair, - Pair outerPair, Boolean noneValueVlanStatus) { - - List setVlanPcps = findL2Instructions(L2ModificationInstruction.L2SubType.VLAN_PCP, - fwd.treatment().allInstructions()); - - Instruction innerPbitSet = null; - Instruction outerPbitSet = null; - - if (setVlanPcps != null && !setVlanPcps.isEmpty()) { - innerPbitSet = setVlanPcps.get(0); - outerPbitSet = setVlanPcps.get(1); - } - - TrafficTreatment innerTreatment; - if (noneValueVlanStatus) { - innerTreatment = buildTreatment(innerPair.getLeft(), innerPair.getRight(), fetchMeter(fwd), - fetchWriteMetadata(fwd), innerPbitSet, - Instructions.transition(QQ_TABLE)); - } else { - innerTreatment = buildTreatment(innerPair.getRight(), fetchMeter(fwd), fetchWriteMetadata(fwd), - innerPbitSet, Instructions.transition(QQ_TABLE)); - } - - //match: in port, vlanId (0 or None) - //action: - //if vlanId None, push & set c-tag go to table 1 - //if vlanId 0 or any specific vlan, set c-tag, write metadata, meter and go to table 1 - FlowRule.Builder inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(innerTreatment); - - PortCriterion inPort = (PortCriterion) - fwd.selector().getCriterion(Criterion.Type.IN_PORT); - - VlanId cVlanId = ((L2ModificationInstruction.ModVlanIdInstruction) - innerPair.getRight()).vlanId(); - - //match: in port, c-tag - //action: immediate: push s-tag, write metadata, meter and output - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withTreatment(buildTreatment(outerPair.getLeft(), outerPair.getRight(), - fetchMeter(fwd), writeMetadataIncludingOnlyTp(fwd), - outerPbitSet, output)); - - if (innerPbitSet != null) { - byte innerPbit = ((L2ModificationInstruction.ModVlanPcpInstruction) - innerPbitSet).vlanPcp(); - outer.withSelector(buildSelector(inPort, Criteria.matchVlanId(cVlanId), Criteria.matchVlanPcp(innerPbit))); - } else { - outer.withSelector(buildSelector(inPort, Criteria.matchVlanId(cVlanId))); - } - - applyRules(fwd, inner, outer); - } - - private void installUpstreamRulesForAnyVlan(ForwardingObjective fwd, Instruction output, - Pair outerPair) { - - log.debug("Installing upstream rules for any value vlan"); - - //match: in port and any-vlan (coming from OLT app.) - //action: write metadata, go to table 1 and meter - FlowRule.Builder inner = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(buildTreatment(Instructions.transition(QQ_TABLE), fetchMeter(fwd), - fetchWriteMetadata(fwd))); - - //match: in port and any-vlan (coming from OLT app.) - //action: immediate: push:QinQ, vlanId (s-tag), write metadata, meter and output - FlowRule.Builder outer = DefaultFlowRule.builder() - .fromApp(fwd.appId()) - .forDevice(deviceId) - .forTable(QQ_TABLE) - .makePermanent() - .withPriority(fwd.priority()) - .withSelector(fwd.selector()) - .withTreatment(buildTreatment(outerPair.getLeft(), outerPair.getRight(), - fetchMeter(fwd), writeMetadataIncludingOnlyTp(fwd), output)); - - applyRules(fwd, inner, outer); - } - - private boolean checkNoneVlanCriteria(ForwardingObjective fwd) { - // Add the VLAN_PUSH treatment if we're matching on VlanId.NONE - Criterion vlanMatchCriterion = filterForCriterion(fwd.selector().criteria(), Criterion.Type.VLAN_VID); - boolean noneValueVlanStatus = false; - if (vlanMatchCriterion != null) { - noneValueVlanStatus = ((VlanIdCriterion) vlanMatchCriterion).vlanId().equals(VlanId.NONE); - } - return noneValueVlanStatus; - } - - private boolean checkAnyVlanMatchCriteria(ForwardingObjective fwd) { - Criterion anyValueVlanCriterion = fwd.selector().criteria().stream() - .filter(c -> c.type().equals(Criterion.Type.VLAN_VID)) - .filter(vc -> ((VlanIdCriterion) vc).vlanId().toShort() == VlanId.ANY_VALUE) - .findAny().orElse(null); - - if (anyValueVlanCriterion == null) { - log.debug("Any value vlan match criteria is not found, criteria {}", - fwd.selector().criteria()); - return false; - } - - return true; - } - - private Instruction fetchOutput(ForwardingObjective fwd, String direction) { - Instruction output = fwd.treatment().allInstructions().stream() - .filter(i -> i.type() == Instruction.Type.OUTPUT) - .findFirst().orElse(null); - - if (output == null) { - log.error("OLT {} rule has no output", direction); - fail(fwd, ObjectiveError.BADPARAMS); - return null; - } - return output; - } - - private Instruction fetchMeter(ForwardingObjective fwd) { - Instruction meter = fwd.treatment().metered(); - - if (meter == null) { - log.debug("Meter instruction is not found for the forwarding objective {}", fwd); - return null; - } - - log.debug("Meter instruction is found."); - return meter; - } - - private Instructions.MetadataInstruction fetchWriteMetadata(ForwardingObjective fwd) { - Instructions.MetadataInstruction writeMetadata = fwd.treatment().writeMetadata(); - - if (writeMetadata == null) { - log.warn("Write metadata is not found for the forwarding obj"); - fail(fwd, ObjectiveError.BADPARAMS); - return null; - } - - log.debug("Write metadata is found {}", writeMetadata); - return writeMetadata; - } - - private List> vlanOps(ForwardingObjective fwd, - L2ModificationInstruction.L2SubType type) { - - List> vlanOps = findVlanOps( - fwd.treatment().allInstructions(), type); - - if (vlanOps == null || vlanOps.isEmpty()) { - String direction = type == L2ModificationInstruction.L2SubType.VLAN_POP - ? DOWNSTREAM : UPSTREAM; - log.error("Missing vlan operations in {} forwarding: {}", direction, fwd); - fail(fwd, ObjectiveError.BADPARAMS); - return ImmutableList.of(); - } - return vlanOps; - } - - - private List> findVlanOps(List instructions, - L2ModificationInstruction.L2SubType type) { - - List vlanOperations = findL2Instructions( - type, - instructions); - List vlanSets = findL2Instructions( - L2ModificationInstruction.L2SubType.VLAN_ID, - instructions); - - if (vlanOperations.size() != vlanSets.size()) { - return ImmutableList.of(); - } - - List> pairs = Lists.newArrayList(); - - for (int i = 0; i < vlanOperations.size(); i++) { - pairs.add(new ImmutablePair<>(vlanOperations.get(i), vlanSets.get(i))); - } - return pairs; - } - - private List findL2Instructions(L2ModificationInstruction.L2SubType subType, - List actions) { - return actions.stream() - .filter(i -> i.type() == Instruction.Type.L2MODIFICATION) - .filter(i -> ((L2ModificationInstruction) i).subtype() == subType) - .collect(Collectors.toList()); - } - - private void provisionEthTypeBasedFilter(FilteringObjective filter, - EthTypeCriterion ethType, - Instructions.OutputInstruction output, - L2ModificationInstruction vlanId, - L2ModificationInstruction vlanPush) { - - Instruction meter = filter.meta().metered(); - Instruction writeMetadata = filter.meta().writeMetadata(); - - TrafficSelector selector = buildSelector(filter.key(), ethType); - TrafficTreatment treatment; - - if (vlanPush == null || vlanId == null) { - treatment = buildTreatment(output, meter, writeMetadata); - } else { - // we need to push the vlan because it came untagged (ATT) - treatment = buildTreatment(output, meter, vlanPush, vlanId, writeMetadata); - } - - buildAndApplyRule(filter, selector, treatment); - - } - - private void provisionIgmp(FilteringObjective filter, EthTypeCriterion ethType, - IPProtocolCriterion ipProto, - Instructions.OutputInstruction output, - Instruction vlan, Instruction pcp) { - - Instruction meter = filter.meta().metered(); - Instruction writeMetadata = filter.meta().writeMetadata(); - - // uniTagMatch - VlanIdCriterion vlanId = (VlanIdCriterion) filterForCriterion(filter.conditions(), - Criterion.Type.VLAN_VID); - - TrafficSelector selector = buildSelector(filter.key(), ethType, ipProto, vlanId); - TrafficTreatment treatment = buildTreatment(output, vlan, pcp, meter, writeMetadata); - buildAndApplyRule(filter, selector, treatment); - } - - private void provisionDhcp(FilteringObjective filter, EthTypeCriterion ethType, - IPProtocolCriterion ipProto, - UdpPortCriterion udpSrcPort, - UdpPortCriterion udpDstPort, - Instruction vlanIdInstruction, - Instruction vlanPcpInstruction, - Instructions.OutputInstruction output) { - - Instruction meter = filter.meta().metered(); - Instruction writeMetadata = filter.meta().writeMetadata(); - - VlanIdCriterion matchVlanId = (VlanIdCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.VLAN_VID); - - TrafficSelector selector; - TrafficTreatment treatment; - - if (matchVlanId != null) { - log.debug("Building selector with match VLAN, {}", matchVlanId); - // in case of TT upstream the packet comes tagged and the vlan is swapped. - selector = buildSelector(filter.key(), ethType, ipProto, udpSrcPort, - udpDstPort, matchVlanId); - treatment = buildTreatment(output, meter, writeMetadata, - vlanIdInstruction, vlanPcpInstruction); - } else { - log.debug("Building selector with no VLAN"); - // in case of ATT upstream the packet comes in untagged and we need to push the vlan - selector = buildSelector(filter.key(), ethType, ipProto, udpSrcPort, udpDstPort); - treatment = buildTreatment(output, meter, vlanIdInstruction, writeMetadata); - } - //In case of downstream there will be no match on the VLAN, which is null, - // so it will just be output, meter, writeMetadata - - buildAndApplyRule(filter, selector, treatment); - } - - private void provisionPPPoED(FilteringObjective filter, EthTypeCriterion ethType, - Instruction vlanIdInstruction, - Instruction vlanPcpInstruction, - Instructions.OutputInstruction output) { - Instruction meter = filter.meta().metered(); - Instruction writeMetadata = filter.meta().writeMetadata(); - - VlanIdCriterion matchVlanId = (VlanIdCriterion) - filterForCriterion(filter.conditions(), Criterion.Type.VLAN_VID); - - TrafficSelector selector; - TrafficTreatment treatment; - - if (matchVlanId != null) { - log.debug("Building pppoed selector with match VLAN {}.", matchVlanId); - } else { - log.debug("Building pppoed selector without match VLAN."); - } - - selector = buildSelector(filter.key(), ethType, matchVlanId); - treatment = buildTreatment(output, meter, writeMetadata, vlanIdInstruction, vlanPcpInstruction); - buildAndApplyRule(filter, selector, treatment); - } - - private void buildAndApplyRule(FilteringObjective filter, TrafficSelector selector, - TrafficTreatment treatment) { - FlowRule rule = DefaultFlowRule.builder() - .fromApp(filter.appId()) - .forDevice(deviceId) - .forTable(0) - .makePermanent() - .withSelector(selector) - .withTreatment(treatment) - .withPriority(filter.priority()) - .build(); - - FlowRuleOperations.Builder opsBuilder = FlowRuleOperations.builder(); - - switch (filter.type()) { - case PERMIT: - opsBuilder.add(rule); - break; - case DENY: - opsBuilder.remove(rule); - break; - default: - log.warn("Unknown filter type : {}", filter.type()); - fail(filter, ObjectiveError.UNSUPPORTED); - } - - applyFlowRules(opsBuilder, filter); - } - - private void applyRules(ForwardingObjective fwd, FlowRule.Builder... fwdBuilders) { - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - switch (fwd.op()) { - case ADD: - for (FlowRule.Builder fwdBuilder : fwdBuilders) { - builder.add(fwdBuilder.build()); - } - break; - case REMOVE: - for (FlowRule.Builder fwdBuilder : fwdBuilders) { - builder.remove(fwdBuilder.build()); - } - break; - case ADD_TO_EXISTING: - break; - case REMOVE_FROM_EXISTING: - break; - default: - log.warn("Unknown forwarding operation: {}", fwd.op()); - } - - applyFlowRules(builder, fwd); - } - - private void applyFlowRules(FlowRuleOperations.Builder builder, - Objective objective) { - flowRuleService.apply(builder.build(new FlowRuleOperationsContext() { - @Override - public void onSuccess(FlowRuleOperations ops) { - pass(objective); - } - - @Override - public void onError(FlowRuleOperations ops) { - fail(objective, ObjectiveError.FLOWINSTALLATIONFAILED); - } - })); - } - - private Criterion filterForCriterion(Collection criteria, Criterion.Type type) { - return criteria.stream() - .filter(c -> c.type().equals(type)) - .limit(1) - .findFirst().orElse(null); - } - - private TrafficSelector buildSelector(Criterion... criteria) { - - TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder(); - - Arrays.stream(criteria).filter(Objects::nonNull).forEach(sBuilder::add); - - return sBuilder.build(); - } - - private TrafficTreatment buildTreatment(Instruction... instructions) { - - TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder(); - - Arrays.stream(instructions).filter(Objects::nonNull).forEach(tBuilder::add); - - return tBuilder.build(); - } - - private Instruction writeMetadataIncludingOnlyTp(ForwardingObjective fwd) { - - return Instructions.writeMetadata( - fetchWriteMetadata(fwd).metadata() & 0xFFFF00000000L, 0L); - } - - private void fail(Objective obj, ObjectiveError error) { - obj.context().ifPresent(context -> context.onError(obj, error)); - } - - private void pass(Objective obj) { - obj.context().ifPresent(context -> context.onSuccess(obj)); - } - - - private class InnerGroupListener implements GroupListener { - @Override - public void event(GroupEvent event) { - GroupKey key = event.subject().appCookie(); - NextObjective obj = pendingGroups.getIfPresent(key); - if (obj == null) { - log.debug("No pending group for {}, moving on", key); - return; - } - log.trace("Event {} for group {}, handling pending" + - "NextGroup {}", event.type(), key, obj.id()); - if (event.type() == GroupEvent.Type.GROUP_ADDED || - event.type() == GroupEvent.Type.GROUP_UPDATED) { - flowObjectiveStore.putNextGroup(obj.id(), new OLTPipelineGroup(key)); - pass(obj); - pendingGroups.invalidate(key); - } else if (event.type() == GroupEvent.Type.GROUP_REMOVED) { - flowObjectiveStore.removeNextGroup(obj.id()); - pass(obj); - pendingGroups.invalidate(key); - } - } - } - - private static class OLTPipelineGroup implements NextGroup { - - private final GroupKey key; - - public OLTPipelineGroup(GroupKey key) { - this.key = key; - } - - public GroupKey key() { - return key; - } - - @Override - public byte[] data() { - return appKryo.serialize(key); - } - - } - - @Override - public List getNextMappings(NextGroup nextGroup) { - // TODO Implementation deferred to vendor - return null; - } -} diff --git a/drivers/default/src/main/resources/onos-drivers.xml b/drivers/default/src/main/resources/onos-drivers.xml index fff45dc05e2..48cb7919cab 100644 --- a/drivers/default/src/main/resources/onos-drivers.xml +++ b/drivers/default/src/main/resources/onos-drivers.xml @@ -173,48 +173,6 @@ impl="org.onosproject.driver.traceable.OfdpaPipelineTraceable" /> - - - - - - - - - - - - - - - - - - - - - - - - + impl="org.onosproject.drivers.p4runtime.P4RuntimeMeterProgrammable"/> true diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java index 35f9ddea5a3..4fc61aa8164 100644 --- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java +++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java @@ -53,6 +53,8 @@ public class MeterFeaturesBuilder { private final OFMeterFeatures ofMeterFeatures; private DeviceId deviceId; + private static final long OF_METER_START_INDEX = 1L; + public MeterFeaturesBuilder(OFMeterFeatures features, DeviceId deviceId) { this.ofMeterFeatures = checkNotNull(features); this.deviceId = deviceId; @@ -72,7 +74,8 @@ public MeterFeatures build() { .forDevice(deviceId) .withMaxBands(ofMeterFeatures.getMaxBands()) .withMaxColors(ofMeterFeatures.getMaxColor()) - .withMaxMeters(ofMeterFeatures.getMaxMeter()); + .withStartIndex(OF_METER_START_INDEX) + .withEndIndex(ofMeterFeatures.getMaxMeter()); /* * We extract the supported band types. */ From 664e24926f12b2c1665d4f2f69a6ab78a5b71965 Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Thu, 29 Jul 2021 00:02:56 +0800 Subject: [PATCH 108/235] [SDFAB-384] Modify the MeterStore APIs Change-Id: I2b612bee1c6addc10a0126fe28880e8076735bfa --- .../org/onosproject/net/meter/MeterStore.java | 28 +++++++++ .../meter/impl/DistributedMeterStore.java | 63 +++++++++++++++++-- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 21696e44377..2e632edd693 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -26,12 +26,22 @@ */ public interface MeterStore extends Store { + /** + * Adds a meter to the store or updates a meter in the store. + * + * @param meter a meter + * @return a future indicating the result of the store operation + */ + CompletableFuture addOrUpdateMeter(Meter meter); + /** * Adds a meter to the store. * * @param meter a meter * @return a future indicating the result of the store operation + * @deprecated in onos-2.5 replaced by {@link #addOrUpdateMeter(Meter)} */ + @Deprecated CompletableFuture storeMeter(Meter meter); /** @@ -50,6 +60,14 @@ public interface MeterStore extends Store { */ MeterStoreResult storeMeterFeatures(MeterFeatures meterfeatures); + /** + * Adds a collection of meter features to the store. + * + * @param meterfeatures the collection of meter features + * @return the result of the store operation + */ + MeterStoreResult storeMeterFeatures(Collection meterfeatures); + /** * Deletes the meter features from the store. * @@ -58,12 +76,22 @@ public interface MeterStore extends Store { */ MeterStoreResult deleteMeterFeatures(DeviceId deviceId); + /** + * Deletes a collection of meter features from the store. + * + * @param meterfeatures a collection of meter features + * @return a future indicating the result of the store operation + */ + MeterStoreResult deleteMeterFeatures(Collection meterfeatures); + /** * Updates a meter whose meter id is the same as the passed meter. * * @param meter a new meter * @return a future indicating the result of the store operation + * @deprecated in onos-2.5 replaced by {@link #addOrUpdateMeter(Meter)} */ + @Deprecated CompletableFuture updateMeter(Meter meter); /** diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 2fdba6ffad6..38f8748f1f1 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -86,6 +86,7 @@ import static org.onosproject.net.meter.MeterFailReason.TIMEOUT; import static org.onosproject.net.meter.MeterCellId.MeterCellType.INDEX; import static org.onosproject.net.meter.MeterCellId.MeterCellType.PIPELINE_INDEPENDENT; +import static org.onosproject.net.meter.MeterStoreResult.Type.FAIL; import static org.slf4j.LoggerFactory.getLogger; /** @@ -203,11 +204,31 @@ public void deactivate() { log.info("Stopped"); } + @Override + public CompletableFuture addOrUpdateMeter(Meter meter) { + // Init steps + CompletableFuture future = new CompletableFuture<>(); + MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); + MeterData data = new MeterData(meter, null); + // Store the future related to the operation + futures.put(key, future); + // Check if the meter exists + try { + meters.compute(key, (k, v) -> data); + } catch (StorageException e) { + log.error("{} thrown a storage exception: {}", e.getStackTrace()[0].getMethodName(), + e.getMessage(), e); + futures.remove(key); + future.completeExceptionally(e); + } + return future; + } + @Override public CompletableFuture storeMeter(Meter meter) { // Init steps CompletableFuture future = new CompletableFuture<>(); - MeterKey key = MeterKey.key(meter.deviceId(), meter.id()); + MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); // Store the future related to the operation futures.put(key, future); // Store the meter data @@ -228,7 +249,7 @@ public CompletableFuture storeMeter(Meter meter) { public CompletableFuture deleteMeter(Meter meter) { // Init steps CompletableFuture future = new CompletableFuture<>(); - MeterKey key = MeterKey.key(meter.deviceId(), meter.id()); + MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); // Store the future related to the operation futures.put(key, future); // Create the meter data @@ -266,6 +287,20 @@ public MeterStoreResult storeMeterFeatures(MeterFeatures meterfeatures) { return result; } + @Override + public MeterStoreResult storeMeterFeatures(Collection meterfeatures) { + // These store operations is treated as one single operation + // If one of them is failed, Fail is returned + // But the failed operation will not block the rest. + MeterStoreResult result = MeterStoreResult.success(); + for (MeterFeatures mf : meterfeatures) { + if (storeMeterFeatures(mf).type() == FAIL) { + result = MeterStoreResult.fail(TIMEOUT); + } + } + return result; + } + @Override public MeterStoreResult deleteMeterFeatures(DeviceId deviceId) { MeterStoreResult result = MeterStoreResult.success(); @@ -285,11 +320,31 @@ public MeterStoreResult deleteMeterFeatures(DeviceId deviceId) { return result; } + @Override + public MeterStoreResult deleteMeterFeatures(Collection meterfeatures) { + // These store operations is treated as one single operation + // If one of them is failed, Fail is returned + // But the failed operation will not block the rest. + MeterStoreResult result = MeterStoreResult.success(); + for (MeterFeatures mf : meterfeatures) { + try { + MeterTableKey key = MeterTableKey.key(mf.deviceId(), mf.scope()); + metersFeatures.remove(key); + } catch (StorageException e) { + log.error("{} thrown a storage exception: {}", e.getStackTrace()[0].getMethodName(), + e.getMessage(), e); + result = MeterStoreResult.fail(TIMEOUT); + } + } + + return result; + } + @Override // TODO Should we remove it ? We are not using it public CompletableFuture updateMeter(Meter meter) { CompletableFuture future = new CompletableFuture<>(); - MeterKey key = MeterKey.key(meter.deviceId(), meter.id()); + MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); futures.put(key, future); MeterData data = new MeterData(meter, null); @@ -309,7 +364,7 @@ public CompletableFuture updateMeter(Meter meter) { @Override public Meter updateMeterState(Meter meter) { // Update meter if present (stats workflow) - MeterKey key = MeterKey.key(meter.deviceId(), meter.id()); + MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); Versioned value = meters.computeIfPresent(key, (k, v) -> { DefaultMeter m = (DefaultMeter) v.meter(); MeterState meterState = m.state(); From cfd774018c0ed926873b1e171c106217cb2ac568 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Thu, 15 Jul 2021 17:02:59 +0200 Subject: [PATCH 109/235] [SDFAB-359] Allow purging flows, groups and meters by device and application ID Change-Id: I5e507d230789979ac997dbc99697fa0483363f70 --- .../onosproject/net/flow/FlowRuleService.java | 9 ++ .../onosproject/net/flow/FlowRuleStore.java | 10 +++ .../onosproject/net/group/GroupService.java | 10 +++ .../org/onosproject/net/group/GroupStore.java | 9 ++ .../onosproject/net/meter/MeterService.java | 13 ++- .../org/onosproject/net/meter/MeterStore.java | 11 +++ .../org/onosproject/net/NetTestTools.java | 1 + .../net/flow/FlowRuleServiceAdapter.java | 6 +- .../store/trivial/SimpleFlowRuleStore.java | 11 +++ .../store/trivial/SimpleGroupStore.java | 27 ++++++ .../net/flow/impl/FlowRuleManager.java | 9 ++ .../net/group/impl/GroupManager.java | 6 ++ .../net/meter/impl/MeterManager.java | 6 ++ .../store/flow/impl/DeviceFlowTable.java | 49 +++++++++- .../store/flow/impl/ECFlowRuleStore.java | 66 +++++++++++++- .../impl/ECFlowRuleStoreMessageSubjects.java | 3 + .../store/flow/impl/FlowBucket.java | 19 ++++ .../group/impl/DistributedGroupStore.java | 13 +++ .../meter/impl/DistributedMeterStore.java | 13 ++- .../store/flow/impl/ECFlowRuleStoreTest.java | 89 ++++++++++++------- .../group/impl/DistributedGroupStoreTest.java | 43 +++++++++ .../meter/impl/DistributedMeterStoreTest.java | 43 +++++++++ 22 files changed, 427 insertions(+), 39 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java index 78aef84a7df..2b2950483bd 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java @@ -114,6 +114,15 @@ default Iterable getFlowEntriesByState(DeviceId deviceId, */ void purgeFlowRules(DeviceId deviceId); + /** + * Purges all the flow rules on the specified device from the given application id. + * @param deviceId device identifier + * @param appId application identifier + */ + default void purgeFlowRules(DeviceId deviceId, ApplicationId appId) { + throw new UnsupportedOperationException("purgeFlowRules not implemented!"); + } + /** * Removes the specified flow rules from their respective devices. If the * device is not presently connected to the controller, these flow will diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java index 07493a887a1..1d9e60e434d 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java @@ -15,6 +15,7 @@ */ package org.onosproject.net.flow; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.flow.oldbatch.FlowRuleBatchEvent; import org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation; @@ -136,6 +137,15 @@ default int getFlowRuleCount(DeviceId deviceId, FlowEntry.FlowEntryState state) */ default void purgeFlowRule(DeviceId deviceId) {} + /** + * Removes all flow entries of given device and application ID from store. + * + * @param deviceId device id + * @param appId application id + * @return true if operation was successful, false otherwise. + */ + boolean purgeFlowRules(DeviceId deviceId, ApplicationId appId); + /** * Removes all flow entries from store. */ diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupService.java b/core/api/src/main/java/org/onosproject/net/group/GroupService.java index 460ccb658ee..bf18a2e360d 100644 --- a/core/api/src/main/java/org/onosproject/net/group/GroupService.java +++ b/core/api/src/main/java/org/onosproject/net/group/GroupService.java @@ -132,6 +132,16 @@ default void setBucketsForGroup(DeviceId deviceId, */ void purgeGroupEntries(DeviceId deviceId); + /** + * Purges all the group entries on the specified device and application. + * + * @param deviceId device identifier + * @param appId application identifier + */ + default void purgeGroupEntries(DeviceId deviceId, ApplicationId appId) { + throw new UnsupportedOperationException("purgeGroupEntries not implemented"); + } + /** * Purges all group entries. */ diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java index 850b2ce51d7..672bb4e81a0 100644 --- a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java +++ b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java @@ -17,6 +17,7 @@ import java.util.Collection; +import org.onosproject.core.ApplicationId; import org.onosproject.core.GroupId; import org.onosproject.net.DeviceId; import org.onosproject.store.Store; @@ -129,6 +130,14 @@ void deleteGroupDescription(DeviceId deviceId, */ void purgeGroupEntry(DeviceId deviceId); + /** + * Removes all group entries of given device and given application from store. + * + * @param deviceId device id + * @param appId application id + */ + void purgeGroupEntries(DeviceId deviceId, ApplicationId appId); + /** * Removes all group entries from store. */ diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java index cf99b5ed16e..6339101ae47 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java @@ -15,6 +15,7 @@ */ package org.onosproject.net.meter; +import org.onosproject.core.ApplicationId; import org.onosproject.event.ListenerService; import org.onosproject.net.DeviceId; @@ -93,8 +94,18 @@ public interface MeterService * Purges all the meters on the specified device. * @param deviceId device identifier */ - default void purgeMeters(DeviceId deviceId){ + default void purgeMeters(DeviceId deviceId) { //Default implementation does nothing } + /** + * Purges all the meters on the given device and for the given application. + * + * @param deviceId device identifier + * @param appId application identifier + */ + default void purgeMeters(DeviceId deviceId, ApplicationId appId) { + throw new UnsupportedOperationException("purgeMeter not implemented"); + } + } diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 2e632edd693..811b4188c36 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -15,6 +15,7 @@ */ package org.onosproject.net.meter; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.store.Store; @@ -196,9 +197,19 @@ public interface MeterStore extends Store { /** * Removes all meters of given device from store. + * This API is typically used when the device is offline. * * @param deviceId the device id */ void purgeMeter(DeviceId deviceId); + /** + * Removes all meters of given device and for the given application from store. + * This API is typically used when the device is offline. + * + * @param deviceId the device id + * @param appId the application id + */ + void purgeMeters(DeviceId deviceId, ApplicationId appId); + } diff --git a/core/api/src/test/java/org/onosproject/net/NetTestTools.java b/core/api/src/test/java/org/onosproject/net/NetTestTools.java index dcc3e1502bc..42f828f1821 100644 --- a/core/api/src/test/java/org/onosproject/net/NetTestTools.java +++ b/core/api/src/test/java/org/onosproject/net/NetTestTools.java @@ -57,6 +57,7 @@ private NetTestTools() { public static final ProviderId PID = new ProviderId("of", "foo"); public static final ApplicationId APP_ID = new TestApplicationId("foo"); + public static final ApplicationId APP_ID_2 = new TestApplicationId("foo2"); public static final NodeId NODE_ID = new NodeId("node1"); // Short-hand for producing a device id from a string diff --git a/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java index 21fd0454fd4..4f53b969f9d 100644 --- a/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java @@ -38,7 +38,11 @@ public void applyFlowRules(FlowRule... flowRules) { } @Override - public void purgeFlowRules(DeviceId deviceId){ + public void purgeFlowRules(DeviceId deviceId) { + } + + @Override + public void purgeFlowRules(DeviceId deviceId, ApplicationId appId) { } @Override diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java index 31b58fbe698..3b667a89e6a 100644 --- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java +++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java @@ -25,6 +25,7 @@ import com.google.common.collect.Streams; import com.google.common.util.concurrent.SettableFuture; import org.onlab.util.Tools; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.flow.CompletedBatchOperation; import org.onosproject.net.flow.DefaultFlowEntry; @@ -300,6 +301,16 @@ public void purgeFlowRule(DeviceId deviceId) { flowEntries.remove(deviceId); } + @Override + public boolean purgeFlowRules(DeviceId deviceId, ApplicationId appId) { + flowEntries.get(deviceId).values() + .removeIf(storedFlowEntries -> { + storedFlowEntries.removeIf(storedFlowEntry -> storedFlowEntry.appId() == appId.id()); + return storedFlowEntries.isEmpty(); + }); + return true; + } + @Override public void purgeFlowRules() { flowEntries.clear(); diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java index bf8ba599c00..8ece6483b41 100644 --- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java +++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java @@ -17,6 +17,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.Sets; +import org.onosproject.core.ApplicationId; import org.onosproject.core.GroupId; import org.onosproject.net.DeviceId; import org.onosproject.net.group.DefaultGroup; @@ -51,6 +52,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import static org.slf4j.LoggerFactory.getLogger; @@ -481,6 +483,31 @@ public void purgeGroupEntry(DeviceId deviceId) { }); } + @Override + public void purgeGroupEntries(DeviceId deviceId, ApplicationId appId) { + List entryPendingRemove = + groupEntriesById.get(deviceId).values().stream() + .filter(storedGroupEntry -> storedGroupEntry.appId().equals(appId)) + .collect(Collectors.toList()); + + entryPendingRemove.forEach(storedGroupEntry -> { + groupEntriesById.computeIfPresent(deviceId, (k, value) -> { + value.remove(storedGroupEntry.id()); + if (value.isEmpty()) { + return null; + } + return value; + }); + groupEntriesByKey.computeIfPresent(deviceId, (k, value) -> { + value.remove(storedGroupEntry.appCookie()); + if (value.isEmpty()) { + return null; + } + return value; + }); + }); + } + @Override public void purgeGroupEntries() { groupEntriesById.values().forEach(groupEntries -> { diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index dd7f8029e9c..ac97636c75f 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -319,6 +319,15 @@ public void purgeFlowRules(DeviceId deviceId) { store.purgeFlowRule(deviceId); } + @Override + public void purgeFlowRules(DeviceId deviceId, ApplicationId appId) { + checkPermission(FLOWRULE_WRITE); + checkNotNull(deviceId, DEVICE_ID_NULL); + checkNotNull(appId, "Application ID cannot be null!"); + + store.purgeFlowRules(deviceId, appId); + } + @Override public void removeFlowRules(FlowRule... flowRules) { checkPermission(FLOWRULE_WRITE); diff --git a/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java b/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java index e633a960c68..65ec5d31b62 100644 --- a/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java +++ b/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java @@ -304,6 +304,12 @@ public void purgeGroupEntries(DeviceId deviceId) { store.purgeGroupEntry(deviceId); } + @Override + public void purgeGroupEntries(DeviceId deviceId, ApplicationId appId) { + checkPermission(GROUP_WRITE); + store.purgeGroupEntries(deviceId, appId); + } + @Override public void purgeGroupEntries() { checkPermission(GROUP_WRITE); diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java index 03bb5ca5c0f..805009dfc81 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java @@ -23,6 +23,7 @@ import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; +import org.onosproject.core.ApplicationId; import org.onosproject.mastership.MastershipService; import org.onosproject.net.DeviceId; import org.onosproject.net.config.NetworkConfigRegistry; @@ -331,6 +332,11 @@ public void purgeMeters(DeviceId deviceId) { store.purgeMeter(deviceId); } + @Override + public void purgeMeters(DeviceId deviceId, ApplicationId appId) { + store.purgeMeters(deviceId, appId); + } + private class InternalMeterProviderService extends AbstractProviderService implements MeterProviderService { diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java index c438885d5d7..a257cbd60a3 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java @@ -33,19 +33,21 @@ import java.util.stream.Collectors; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.onlab.util.KryoNamespace; import org.onlab.util.Tools; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.device.DeviceService; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowId; import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.StoredFlowEntry; import org.onosproject.net.flow.FlowRuleStoreException; +import org.onosproject.net.flow.StoredFlowEntry; import org.onosproject.store.LogicalTimestamp; import org.onosproject.store.cluster.messaging.ClusterCommunicationService; import org.onosproject.store.cluster.messaging.MessageSubject; @@ -959,6 +961,51 @@ public void purge() { inFlightUpdates.clear(); } + /** + * Purges the flows with the given application id. + * + * @param appId the application id + * @return a future to be completed once flow rules with given application + * id have been purged on all buckets + */ + public CompletableFuture purge(ApplicationId appId) { + DeviceReplicaInfo replicaInfo = lifecycleManager.getReplicaInfo(); + if (!replicaInfo.isMaster(localNodeId)) { + return Tools.exceptionalFuture(new IllegalStateException()); + } + + // If the master's term is not currently active (has not been synchronized + // with prior replicas), enqueue the changes to be executed once the master + // has been synchronized. + final long term = replicaInfo.term(); + List> completablePurges = Lists.newArrayList(); + if (activeTerm < term) { + log.debug("Enqueueing operations for device {}", deviceId); + flowBuckets.values().forEach( + bucket -> { + CompletableFuture future = new CompletableFuture<>(); + completablePurges.add(future); + flowTasks.computeIfAbsent(bucket.bucketId().bucket(), + b -> new LinkedList<>()) + .add(() -> future.complete(apply((bkt, trm) -> { + bkt.purge(appId, trm, clock); + return null; + }, bucket, term))); + }); + + } else { + flowBuckets.values().forEach(bucket -> { + CompletableFuture future = new CompletableFuture<>(); + completablePurges.add(future); + future.complete(apply((bkt, trm) -> { + bkt.purge(appId, trm, clock); + return null; + }, bucket, term)); + }); + } + return CompletableFuture.allOf(completablePurges.toArray(new CompletableFuture[0])); + } + /** * Closes the device flow table. */ diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java index 0a962521e38..e4850d8866c 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java @@ -44,6 +44,7 @@ import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; +import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.core.IdGenerator; import org.onosproject.event.AbstractListenerManager; @@ -63,8 +64,8 @@ import org.onosproject.net.flow.FlowRuleService; import org.onosproject.net.flow.FlowRuleStore; import org.onosproject.net.flow.FlowRuleStoreDelegate; -import org.onosproject.net.flow.StoredFlowEntry; import org.onosproject.net.flow.FlowRuleStoreException; +import org.onosproject.net.flow.StoredFlowEntry; import org.onosproject.net.flow.TableStatisticsEntry; import org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry; import org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry.FlowRuleOperation; @@ -110,6 +111,7 @@ import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.FLOW_TABLE_BACKUP; import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.GET_DEVICE_FLOW_COUNT; import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.GET_FLOW_ENTRY; +import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.PURGE_FLOW_RULES; import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.REMOTE_APPLY_COMPLETED; import static org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.REMOVE_FLOW_ENTRY; import static org.slf4j.LoggerFactory.getLogger; @@ -137,6 +139,7 @@ public class ECFlowRuleStore private final Logger log = getLogger(getClass()); private static final long FLOW_RULE_STORE_TIMEOUT_MILLIS = 5000; + private static final long PURGE_TIMEOUT_MILLIS = 30000; private static final int GET_FLOW_ENTRIES_TIMEOUT = 30; //seconds /** Number of threads in the message handler pool. */ @@ -340,6 +343,11 @@ private void registerMessageHandlers(ExecutorService executor) { serializer::encode, executor); clusterCommunicator.addSubscriber( REMOVE_FLOW_ENTRY, serializer::decode, this::removeFlowRuleInternal, serializer::encode, executor); + clusterCommunicator., Boolean>addSubscriber( + PURGE_FLOW_RULES, + serializer::decode, + p -> flowTable.purgeFlowRules(p.getLeft(), p.getRight()), + serializer::encode, executor); } private void unregisterMessageHandlers() { @@ -633,6 +641,35 @@ public void purgeFlowRule(DeviceId deviceId) { flowTable.purgeFlowRule(deviceId); } + @Override + public boolean purgeFlowRules(DeviceId deviceId, ApplicationId appId) { + NodeId master = mastershipService.getMasterFor(deviceId); + + if (Objects.equals(local, master)) { + // bypass and handle it locally + return flowTable.purgeFlowRules(deviceId, appId); + } + + if (master == null) { + log.warn("Failed to purgeFlowRules: No master for {}", deviceId); + return false; + } + + log.trace("Forwarding purgeFlowRules to {}, which is the master for device {}", + master, deviceId); + + return Tools.futureGetOrElse( + clusterCommunicator.sendAndReceive( + Pair.of(deviceId, appId), + PURGE_FLOW_RULES, + serializer::encode, + serializer::decode, + master), + FLOW_RULE_STORE_TIMEOUT_MILLIS, + TimeUnit.MILLISECONDS, + false); + } + @Override public void purgeFlowRules() { flowTable.purgeFlowRules(); @@ -873,6 +910,33 @@ public void purgeFlowRule(DeviceId deviceId) { } } + /** + * Purges flow rules for the given device and application id. + * + * @param deviceId the device for which to purge flow rules + * @param appId the application id for with to purge flow rules + * @return true if purge is successful, false otherwise + */ + public boolean purgeFlowRules(DeviceId deviceId, ApplicationId appId) { + DeviceFlowTable flowTable = flowTables.get(deviceId); + if (flowTable != null) { + // flowTable.purge() returns a CompletableFuture, we want + // to return true when the completable future returns correctly + // within the timeout, otherwise return false. + try { + // Use higher timeout, purge(appId) may require more time + // than normal operations because it's applying the purge + // operation on every single flow table bucket. + flowTable.purge(appId).get(PURGE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); + return true; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } catch (ExecutionException | TimeoutException ignored) { + } + } + return false; + } + /** * Purges all flow rules from the table. */ diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStoreMessageSubjects.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStoreMessageSubjects.java index e5a7631436e..80f376e36ac 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStoreMessageSubjects.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStoreMessageSubjects.java @@ -40,4 +40,7 @@ private ECFlowRuleStoreMessageSubjects() {} public static final MessageSubject FLOW_TABLE_BACKUP = new MessageSubject("peer-flow-table-backup"); + + public static final MessageSubject PURGE_FLOW_RULES + = new MessageSubject("peer-purge-flow-rules"); } diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/FlowBucket.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/FlowBucket.java index ea1887df9f7..020559fa5fb 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/FlowBucket.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/FlowBucket.java @@ -21,6 +21,7 @@ import java.util.stream.Collectors; import com.google.common.collect.Maps; +import org.onosproject.core.ApplicationId; import org.onosproject.net.flow.DefaultFlowEntry; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowId; @@ -270,6 +271,24 @@ public void purge() { flowBucket.clear(); } + /** + * Purge the entries with the given application ID. + * + * @param appId the application ID + * @param term the term in which the purge occurred + * @param clock the logical clock + */ + public void purge(ApplicationId appId, long term, LogicalClock clock) { + boolean anythingRemoved = flowBucket.values().removeIf(flowEntryMap -> { + flowEntryMap.values().removeIf(storedFlowEntry -> storedFlowEntry.appId() == appId.id()); + return flowEntryMap.isEmpty(); + }); + if (anythingRemoved) { + recordUpdate(term, clock.getTimestamp()); + } + } + + /** * Clears the bucket. */ diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java index 8fd32ab0ff4..8337e845176 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java @@ -23,6 +23,7 @@ import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; +import org.onosproject.core.ApplicationId; import org.onosproject.core.GroupId; import org.onosproject.mastership.MastershipService; import org.onosproject.net.DeviceId; @@ -1092,6 +1093,18 @@ public void purgeGroupEntry(DeviceId deviceId) { purgeGroupEntries(entriesPendingRemove); } + @Override + public void purgeGroupEntries(DeviceId deviceId, ApplicationId appId) { + Set> entriesPendingRemove = + new HashSet<>(); + + getGroupStoreKeyMap().entrySet().stream() + .filter(entry -> entry.getKey().deviceId().equals(deviceId) && entry.getValue().appId().equals(appId)) + .forEach(entriesPendingRemove::add); + + purgeGroupEntries(entriesPendingRemove); + } + @Override public void purgeGroupEntries() { purgeGroupEntries(getGroupStoreKeyMap().entrySet()); diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 38f8748f1f1..b2034dc10a7 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -22,6 +22,7 @@ import com.google.common.collect.Maps; import org.apache.commons.lang.math.RandomUtils; import org.onlab.util.KryoNamespace; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.behaviour.MeterQuery; import org.onosproject.net.driver.DriverHandler; @@ -440,16 +441,24 @@ public void purgeMeter(Meter m) { @Override public void purgeMeter(DeviceId deviceId) { - // Purge api (typically used when the device is offline) List> metersPendingRemove = meters.stream() .filter(e -> Objects.equals(e.getKey().deviceId(), deviceId)) .map(Map.Entry::getValue) .collect(Collectors.toList()); - // Remove definitely the meter metersPendingRemove.forEach(versionedMeterKey -> purgeMeter(versionedMeterKey.value().meter())); } + @Override + public void purgeMeters(DeviceId deviceId, ApplicationId appId) { + List> metersPendingRemove = meters.stream() + .filter(e -> Objects.equals(e.getKey().deviceId(), deviceId) && + e.getValue().value().meter().appId().equals(appId)) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + metersPendingRemove.forEach(versionedMeterKey -> deleteMeterNow(versionedMeterKey.value().meter())); + } + @Override public long getMaxMeters(MeterFeaturesKey key) { // Leverage the meter features to know the max id diff --git a/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ECFlowRuleStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ECFlowRuleStoreTest.java index 0dfc2a2b0ff..60261d69cdd 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ECFlowRuleStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ECFlowRuleStoreTest.java @@ -50,7 +50,6 @@ import org.onosproject.store.service.TestStorageService; import org.onlab.packet.Ip4Address; -import java.util.Iterator; import java.util.Optional; import org.osgi.service.component.ComponentContext; @@ -64,6 +63,7 @@ import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertEquals; import static org.onosproject.net.NetTestTools.APP_ID; +import static org.onosproject.net.NetTestTools.APP_ID_2; import static org.onosproject.net.NetTestTools.did; /** @@ -83,6 +83,7 @@ public class ECFlowRuleStoreTest { private static final IntentTestsMocks.MockTreatment TREATMENT = new IntentTestsMocks.MockTreatment(); DeviceId deviceId = did("device1"); + DeviceId deviceId2 = did("device2"); FlowRule flowRule = DefaultFlowRule.builder() .forDevice(deviceId) @@ -101,6 +102,25 @@ public class ECFlowRuleStoreTest { .makeTemporary(44) .fromApp(APP_ID) .build(); + FlowRule flowRule2 = + DefaultFlowRule.builder() + .forDevice(deviceId) + .withSelector(SELECTOR) + .withTreatment(TREATMENT) + .withPriority(44) + .makePermanent() + .fromApp(APP_ID_2) + .build(); + FlowRule flowRule3 = + DefaultFlowRule.builder() + .forDevice(deviceId2) + .withSelector(SELECTOR) + .withTreatment(TREATMENT) + .withPriority(55) + .makePermanent() + .fromApp(APP_ID_2) + .build(); + static class MasterOfAll extends MastershipServiceAdapter { @Override @@ -247,14 +267,7 @@ public void testAddFlow() { assertEquals("PENDING_ADD", flowEntry1.state().toString()); flowStoreImpl.addOrUpdateFlowRule(flowEntry); - Iterable flows = flowStoreImpl.getFlowEntries(deviceId); - int sum = 0; - Iterator it = flows.iterator(); - while (it.hasNext()) { - it.next(); - sum++; - } - assertThat(sum, is(1)); + assertFlowsOnDevice(deviceId, 1); FlowEntry flowEntry2 = flowStoreImpl.getFlowEntry(flowRule); assertEquals("ADDED", flowEntry2.state().toString()); @@ -270,15 +283,7 @@ public void testRemoveFlow() { for (FlowEntry flow : flows1) { flowStoreImpl.removeFlowRule(flow); } - - Iterable flows2 = flowStoreImpl.getFlowEntries(deviceId); - int sum = 0; - Iterator it = flows2.iterator(); - while (it.hasNext()) { - it.next(); - sum++; - } - assertThat(sum, is(0)); + assertFlowsOnDevice(deviceId, 0); } /** @@ -291,23 +296,41 @@ public void testPurgeFlow() { FlowEntry flowEntry1 = new DefaultFlowEntry(flowRule1); flowStoreImpl.addOrUpdateFlowRule(flowEntry1); - Iterable flows1 = flowStoreImpl.getFlowEntries(deviceId); - int sum2 = 0; - Iterator it1 = flows1.iterator(); - while (it1.hasNext()) { - it1.next(); - sum2++; - } - assertThat(sum2, is(2)); + assertFlowsOnDevice(deviceId, 2); flowStoreImpl.purgeFlowRule(deviceId); - Iterable flows3 = flowStoreImpl.getFlowEntries(deviceId); - int sum3 = 0; - Iterator it3 = flows3.iterator(); - while (it3.hasNext()) { - it3.next(); - sum3++; + assertFlowsOnDevice(deviceId, 0); + } + + /** + * Tests purge flow for a device and an application. + */ + @Test + public void testPurgeFlowAppId() { + FlowEntry flowEntry1 = new DefaultFlowEntry(flowRule1); + flowStoreImpl.addOrUpdateFlowRule(flowEntry1); + + FlowEntry flowEntry2 = new DefaultFlowEntry(flowRule2); + flowStoreImpl.addOrUpdateFlowRule(flowEntry2); + + FlowEntry flowEntry3 = new DefaultFlowEntry(flowRule3); + flowStoreImpl.addOrUpdateFlowRule(flowEntry3); + + assertFlowsOnDevice(deviceId, 2); + assertFlowsOnDevice(deviceId2, 1); + + flowStoreImpl.purgeFlowRules(deviceId, APP_ID_2); + + assertFlowsOnDevice(deviceId, 1); + assertFlowsOnDevice(deviceId2, 1); + } + + private void assertFlowsOnDevice(DeviceId deviceId, int nFlows) { + Iterable flows1 = flowStoreImpl.getFlowEntries(deviceId); + int sum1 = 0; + for (FlowEntry flowEntry : flows1) { + sum1++; } - assertThat(sum3, is(0)); + assertThat(sum1, is(nFlows)); } } diff --git a/core/store/dist/src/test/java/org/onosproject/store/group/impl/DistributedGroupStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/group/impl/DistributedGroupStoreTest.java index 9e0dd9d9134..e3dc8a47753 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/group/impl/DistributedGroupStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/group/impl/DistributedGroupStoreTest.java @@ -69,6 +69,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.onosproject.net.NetTestTools.APP_ID; +import static org.onosproject.net.NetTestTools.APP_ID_2; import static org.onosproject.net.NetTestTools.did; import static org.onosproject.net.group.GroupDescription.Type.ALL; import static org.onosproject.net.group.GroupDescription.Type.INDIRECT; @@ -84,9 +85,13 @@ public class DistributedGroupStoreTest { private final GroupId groupId1 = new GroupId(1); private final GroupId groupId2 = new GroupId(2); private final GroupId groupId3 = new GroupId(3); + private final GroupId groupId4 = new GroupId(4); + private final GroupId groupId5 = new GroupId(5); private final GroupKey groupKey1 = new DefaultGroupKey("abc".getBytes()); private final GroupKey groupKey2 = new DefaultGroupKey("def".getBytes()); private final GroupKey groupKey3 = new DefaultGroupKey("ghi".getBytes()); + private final GroupKey groupKey4 = new DefaultGroupKey("jkl".getBytes()); + private final GroupKey groupKey5 = new DefaultGroupKey("mno".getBytes()); private final TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment(); private final TrafficTreatment treatment2 = DefaultTrafficTreatment.builder() @@ -118,6 +123,20 @@ public class DistributedGroupStoreTest { groupKey3, groupId3.id(), APP_ID); + private final GroupDescription groupDescription4 = new DefaultGroupDescription( + deviceId2, + INDIRECT, + indirectGroupBuckets, + groupKey4, + groupId4.id(), + APP_ID_2); + private final GroupDescription groupDescription5 = new DefaultGroupDescription( + deviceId1, + INDIRECT, + indirectGroupBuckets, + groupKey5, + groupId5.id(), + APP_ID_2); private DistributedGroupStore groupStoreImpl; private GroupStore groupStore; @@ -309,6 +328,30 @@ public void testRemoveGroupOnDevice() throws Exception { assertThat(groupStore.getGroupCount(deviceId2), is(0)); } + /** + * Tests removing all groups on the given device from a specific application. + */ + @Test + public void testRemoveGroupOnDeviceFromApp() throws Exception { + groupStore.deviceInitialAuditCompleted(deviceId1, true); + assertThat(groupStore.deviceInitialAuditStatus(deviceId1), is(true)); + groupStore.deviceInitialAuditCompleted(deviceId2, true); + assertThat(groupStore.deviceInitialAuditStatus(deviceId2), is(true)); + + // Make sure the pending list starts out empty + assertThat(auditPendingReqQueue.size(), is(0)); + + groupStore.storeGroupDescription(groupDescription3); + groupStore.storeGroupDescription(groupDescription4); + groupStore.storeGroupDescription(groupDescription5); + assertThat(groupStore.getGroupCount(deviceId1), is(1)); + assertThat(groupStore.getGroupCount(deviceId2), is(2)); + + groupStore.purgeGroupEntries(deviceId2, APP_ID_2); + assertThat(groupStore.getGroupCount(deviceId1), is(1)); + assertThat(groupStore.getGroupCount(deviceId2), is(1)); + } + /** * Tests adding and removing a group. */ diff --git a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java index 4cddf547ac3..05277552986 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java @@ -54,6 +54,7 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.*; import static org.onosproject.net.NetTestTools.APP_ID; +import static org.onosproject.net.NetTestTools.APP_ID_2; import static org.onosproject.net.NetTestTools.did; /** @@ -79,6 +80,7 @@ public class DistributedMeterStoreTest { // Meter ids used during the tests private MeterId mid1 = MeterId.meterId(1); private MeterId mid2 = MeterId.meterId(2); + private MeterId mid3 = MeterId.meterId(3); private MeterId mid10 = MeterId.meterId(10); // Bands used during the tests @@ -96,6 +98,22 @@ public class DistributedMeterStoreTest { .withBands(Collections.singletonList(b1)) .build(); + private Meter m2 = DefaultMeter.builder() + .forDevice(did1) + .fromApp(APP_ID_2) + .withCellId(mid2) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + + private Meter m3 = DefaultMeter.builder() + .forDevice(did2) + .fromApp(APP_ID_2) + .withCellId(mid3) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + // Meter features used during the tests private MeterFeatures mef1 = DefaultMeterFeatures.builder().forDevice(did1) .withMaxMeters(3L) @@ -416,6 +434,31 @@ public void testPurgeMeter() { assertNull(meterStore.getMeter(keyOne)); } + /** + * Test purge meter given device and application. + */ + @Test + public void testPurgeMeterDeviceAndApp() { + // Init the store + initMeterStore(); + // add the meters + ((DefaultMeter) m1).setState(MeterState.PENDING_ADD); + ((DefaultMeter) m2).setState(MeterState.PENDING_ADD); + ((DefaultMeter) m3).setState(MeterState.PENDING_ADD); + meterStore.storeMeter(m1); + meterStore.storeMeter(m2); + meterStore.storeMeter(m3); + assertThat(3, is(meterStore.getAllMeters().size())); + + meterStore.purgeMeters(did1, APP_ID_2); + // Verify delete + MeterKey keyTwo = MeterKey.key(did1, mid2); + assertThat(2, is(meterStore.getAllMeters().size())); + assertThat(1, is(meterStore.getAllMeters(did1).size())); + assertThat(1, is(meterStore.getAllMeters(did2).size())); + assertNull(meterStore.getMeter(keyTwo)); + } + /** * Test getMeters API immutability. */ From 8aa21454df8ce1603bdf7e406195795ff62370c2 Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Fri, 6 Aug 2021 16:23:36 +0800 Subject: [PATCH 110/235] [SDFAB-356] Extend P4RuntimeMeterProgrammable and Codecs to support reset scenario Change-Id: Ifad0b296568d3f78b2aa792fa63f2f81fa80ebae --- .../net/pi/runtime/PiMeterCellConfig.java | 30 ++++++++++++++++ .../p4runtime/P4RuntimeMeterProgrammable.java | 36 ++++++++++++------- .../ctl/codec/DirectMeterEntryCodec.java | 13 ++++--- .../p4runtime/ctl/codec/MeterEntryCodec.java | 22 ++++++++---- 4 files changed, 79 insertions(+), 22 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java index f13e276af3b..e62482b077b 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import static com.google.common.base.Preconditions.checkNotNull; @@ -66,6 +67,35 @@ public Collection meterBands() { return piMeterBands; } + /** + * Check if the config represents a modify operation. + * + * @return true if there are exactly 2 bands + */ + public boolean isModify() { + return piMeterBands.size() == 2; + } + + /** + * Check if the config represents a reset operation. + * + * @return true if there is no band. + */ + public boolean isReset() { + return piMeterBands.isEmpty(); + } + + /** + * Returns a PiMeterCellConfig with no bands. + * Used to reset a PI meter cell. + * + * @param piMeterCellId the PiMeterCellId need to be reset + * @return a PiMeterCellConfig with no bands + */ + public static PiMeterCellConfig reset(PiMeterCellId piMeterCellId) { + return new PiMeterCellConfig(piMeterCellId, Collections.emptyList()); + } + @Override public PiEntityType piEntityType() { return PiEntityType.METER_CELL_CONFIG; diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index 0bcfcafc39e..caaa751a479 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -37,6 +37,7 @@ import org.onosproject.net.pi.model.PiPipelineModel; import org.onosproject.net.pi.runtime.PiMeterCellConfig; import org.onosproject.net.pi.runtime.PiMeterCellHandle; +import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.service.PiMeterTranslator; import org.onosproject.net.pi.service.PiTranslationException; @@ -51,6 +52,9 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.net.meter.MeterOperation.Type.ADD; +import static org.onosproject.net.meter.MeterOperation.Type.MODIFY; +import static org.onosproject.net.meter.MeterOperation.Type.REMOVE; /** * Implementation of MeterProgrammable behaviour for P4Runtime. @@ -95,19 +99,27 @@ public CompletableFuture performMeterOperation(MeterOperation meterOp) } private boolean processMeterOp(MeterOperation meterOp) { - - if (meterOp.type() != MeterOperation.Type.MODIFY) { - log.warn("P4Runtime meter operations must be MODIFY!"); - return false; - } - PiMeterCellConfig piMeterCellConfig; - try { - piMeterCellConfig = translator.translate(meterOp.meter(), pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable translate meter, aborting meter operation {}: {}", meterOp.type(), e.getMessage()); - log.debug("exception", e); - return false; + switch (meterOp.type()) { + case ADD: + case MODIFY: + // Create a config for modify operation + try { + piMeterCellConfig = translator.translate(meterOp.meter(), pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable translate meter, aborting meter operation {}: {}", meterOp.type(), e.getMessage()); + log.debug("exception", e); + return false; + } + break; + case REMOVE: + // Create a empty config for reset operation + PiMeterCellId piMeterCellId = (PiMeterCellId) meterOp.meter().meterCellId(); + piMeterCellConfig = PiMeterCellConfig.reset(piMeterCellId); + break; + default: + log.warn("Meter Operation type {} not supported", meterOp.type()); + return false; } final PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, piMeterCellConfig); diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java index 3bedfbf4115..0f3241759e6 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java @@ -38,11 +38,16 @@ protected P4RuntimeOuterClass.DirectMeterEntry encode( PiMeterCellConfig piEntity, Object ignored, PiPipeconf pipeconf, P4InfoBrowser browser) throws CodecException { - return P4RuntimeOuterClass.DirectMeterEntry.newBuilder() + P4RuntimeOuterClass.DirectMeterEntry.Builder builder = + P4RuntimeOuterClass.DirectMeterEntry.newBuilder() .setTableEntry(CODECS.tableEntry().encode( - piEntity.cellId().tableEntry(), null, pipeconf)) - .setConfig(MeterEntryCodec.getP4Config(piEntity)) - .build(); + piEntity.cellId().tableEntry(), null, pipeconf)); + // We keep the config field unset if it is reset scenario + P4RuntimeOuterClass.MeterConfig meterConfig = MeterEntryCodec.getP4Config(piEntity); + if (meterConfig != null) { + builder = builder.setConfig(meterConfig); + } + return builder.build(); } @Override diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java index b2107091e49..2da12d161a7 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java @@ -34,8 +34,13 @@ public final class MeterEntryCodec static P4RuntimeOuterClass.MeterConfig getP4Config(PiMeterCellConfig piConfig) throws CodecException { - if (piConfig.meterBands().size() != 2) { - throw new CodecException("Number of meter bands should be 2"); + // A reset config has no band + if (piConfig.isReset()) { + return null; + } + // A modify config has exactly 2 bands + if (!piConfig.isModify()) { + throw new CodecException("Number of meter bands should be 2 (Modify) or 0 (Reset)"); } final PiMeterBand[] bands = piConfig.meterBands().toArray(new PiMeterBand[0]); long cir, cburst, pir, pburst; @@ -68,12 +73,17 @@ protected P4RuntimeOuterClass.MeterEntry encode( throws P4InfoBrowser.NotFoundException, CodecException { final int meterId = browser.meters().getByName( piEntity.cellId().meterId().id()).getPreamble().getId(); - return P4RuntimeOuterClass.MeterEntry.newBuilder() + P4RuntimeOuterClass.MeterEntry.Builder builder = + P4RuntimeOuterClass.MeterEntry.newBuilder() .setMeterId(meterId) .setIndex(P4RuntimeOuterClass.Index.newBuilder() - .setIndex(piEntity.cellId().index()).build()) - .setConfig(getP4Config(piEntity)) - .build(); + .setIndex(piEntity.cellId().index()).build()); + // We keep the config field unset if it is reset scenario + P4RuntimeOuterClass.MeterConfig meterConfig = getP4Config(piEntity); + if (meterConfig != null) { + builder = builder.setConfig(meterConfig); + } + return builder.build(); } @Override From 607fd0b70e4553226d0937d36de9cde655f2eb62 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Mon, 19 Jul 2021 22:39:22 +0200 Subject: [PATCH 111/235] [SDFAB-359] Purge all objective for a given application ID Change-Id: I51847b0be890deacec5caddc18d52bcd2993959a --- .../VirtualNetworkFlowObjectiveManager.java | 12 +++++++ .../onosproject/net/behaviour/Pipeliner.java | 8 +++++ .../flowobjective/FlowObjectiveService.java | 9 ++++++ .../net/behaviour/PipelinerAdapter.java | 6 ++++ .../FlowObjectiveServiceAdapter.java | 6 ++++ .../net/meter/MeterServiceAdapter.java | 6 ++++ .../impl/FlowObjectiveManager.java | 31 +++++++++++++++++++ .../FlowObjectiveCompositionManager.java | 6 ++++ .../drivers/corsa/AbstractCorsaPipeline.java | 6 ++++ .../driver/pipeline/CentecV350Pipeline.java | 5 +++ .../pipeline/DefaultSingleTablePipeline.java | 6 ++++ .../driver/pipeline/PicaPipeline.java | 5 +++ .../driver/pipeline/SoftRouterPipeline.java | 5 +++ .../driver/pipeline/SpringOpenTTP.java | 6 ++++ .../driver/pipeline/ofdpa/Ofdpa2Pipeline.java | 6 ++++ .../drivers/hp/AbstractHPPipeline.java | 7 +++++ .../pipelines/basic/BasicPipelinerImpl.java | 6 ++++ .../behaviour/pipeliner/FabricPipeliner.java | 7 +++++ 18 files changed, 143 insertions(+) diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java index 0a5a509a5d8..b4c84b6ee55 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java @@ -26,6 +26,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.onlab.osgi.ServiceDirectory; import org.onlab.util.KryoNamespace; +import org.onosproject.core.ApplicationId; import org.onosproject.incubator.net.virtual.AbstractVnetService; import org.onosproject.incubator.net.virtual.NetworkId; import org.onosproject.incubator.net.virtual.VirtualNetworkFlowObjectiveStore; @@ -248,6 +249,12 @@ public List getPendingFlowObjectives() { return pendingFlowObjectives; } + @Override + public void purgeAll(DeviceId deviceId, ApplicationId appId) { + // TODO: purge queued flow objectives? + pipeliners.get(deviceId).purgeAll(appId); + } + private boolean queueFwdObjective(DeviceId deviceId, ForwardingObjective fwd) { boolean queued = false; synchronized (pendingForwards) { @@ -695,6 +702,11 @@ public void next(NextObjective nextObjective) { nextObjective.context().ifPresent(context -> context.onSuccess(nextObjective)); } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + @Override public List getNextMappings(NextGroup nextGroup) { // Default single table pipeline does not use nextObjectives or groups diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java b/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java index 6f497e736e2..bd4af6cf685 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java @@ -17,6 +17,7 @@ import java.util.List; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.driver.HandlerBehaviour; import org.onosproject.net.flowobjective.FilteringObjective; @@ -67,6 +68,13 @@ public interface Pipeliner extends HandlerBehaviour { */ void next(NextObjective nextObjective); + /** + * Purges all objectives for the given application. + * + * @param appId application identifier + */ + void purgeAll(ApplicationId appId); + /** * Retrieves a mapping of the nextObjective to the groups in the dataplane, * and returns it in a form that can be displayed on the CLI. Typically diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java b/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java index 11a7f5f41b6..4def9534686 100644 --- a/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java +++ b/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java @@ -25,6 +25,7 @@ import com.google.common.collect.Maps; import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang3.tuple.Pair; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; /** @@ -128,6 +129,14 @@ default void apply(DeviceId deviceId, Objective objective) { */ List getPendingFlowObjectives(); + /** + * Purges all flow objectives on a given device and for a given application. + * + * @param deviceId device identifier + * @param appId application identifier + */ + void purgeAll(DeviceId deviceId, ApplicationId appId); + /** * Returns all filtering objective that are waiting for the completion of previous objective * with the same FilteringObjQueueKey. diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/PipelinerAdapter.java b/core/api/src/test/java/org/onosproject/net/behaviour/PipelinerAdapter.java index c87dee2dc14..0ff36447edc 100644 --- a/core/api/src/test/java/org/onosproject/net/behaviour/PipelinerAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/behaviour/PipelinerAdapter.java @@ -17,6 +17,7 @@ import java.util.List; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.driver.DriverData; import org.onosproject.net.driver.DriverHandler; @@ -48,6 +49,11 @@ public void next(NextObjective nextObjective) { } + @Override + public void purgeAll(ApplicationId appId) { + + } + @Override public DriverHandler handler() { return null; diff --git a/core/api/src/test/java/org/onosproject/net/flowobjective/FlowObjectiveServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/flowobjective/FlowObjectiveServiceAdapter.java index 0b17ce8217d..66ff1259d9d 100644 --- a/core/api/src/test/java/org/onosproject/net/flowobjective/FlowObjectiveServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/flowobjective/FlowObjectiveServiceAdapter.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.apache.commons.lang3.tuple.Pair; import java.util.Map; @@ -69,6 +70,11 @@ public List getPendingFlowObjectives() { return ImmutableList.of(); } + @Override + public void purgeAll(DeviceId deviceId, ApplicationId appId) { + + } + @Override public Map, List> getNextMappingsChain() { return ImmutableMap.of(); diff --git a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java index cc556725692..7148c06593f 100644 --- a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java @@ -16,6 +16,7 @@ package org.onosproject.net.meter; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import java.util.Collection; @@ -64,6 +65,11 @@ public void purgeMeters(DeviceId deviceId) { } + @Override + public void purgeMeters(DeviceId deviceId, ApplicationId appId) { + + } + @Override public void addListener(MeterListener listener) { diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java index 597e91e5f30..a31f0b9a01a 100644 --- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java +++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java @@ -27,6 +27,7 @@ import org.onlab.util.Tools; import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; +import org.onosproject.core.ApplicationId; import org.onosproject.net.Device; import org.onosproject.net.DeviceId; import org.onosproject.net.behaviour.NextGroup; @@ -834,4 +835,34 @@ public List getPendingFlowObjectives() { return pendingFlowObjectives; } + + @Override + public void purgeAll(DeviceId deviceId, ApplicationId appId) { + synchronized (pendingForwards) { + List emptyPendingForwards = Lists.newArrayList(); + pendingForwards.forEach((nextId, pendingObjectives) -> { + pendingObjectives.removeIf(pendingFlowObjective -> pendingFlowObjective.deviceId().equals(deviceId)); + if (pendingObjectives.isEmpty()) { + emptyPendingForwards.add(nextId); + } + }); + emptyPendingForwards.forEach(pendingForwards::remove); + } + synchronized (pendingNexts) { + List emptyPendingNexts = Lists.newArrayList(); + pendingNexts.forEach((nextId, pendingObjectives) -> { + pendingObjectives.removeIf(pendingFlowObjective -> pendingFlowObjective.deviceId().equals(deviceId)); + if (pendingObjectives.isEmpty()) { + emptyPendingNexts.add(nextId); + } + }); + emptyPendingNexts.forEach(pendingNexts::remove); + } + Pipeliner pipeliner = getDevicePipeliner(deviceId); + if (pipeliner != null) { + pipeliner.purgeAll(appId); + } else { + log.warn("Skip purgeAll, pipeliner not ready!"); + } + } } diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java index dc5ef05ceb9..b930d6b9614 100644 --- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java +++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java @@ -23,6 +23,7 @@ import org.onlab.osgi.ServiceDirectory; import org.onlab.util.ItemNotFoundException; import org.onosproject.cluster.ClusterService; +import org.onosproject.core.ApplicationId; import org.onosproject.mastership.MastershipEvent; import org.onosproject.mastership.MastershipListener; import org.onosproject.mastership.MastershipService; @@ -441,4 +442,9 @@ public List getPendingFlowObjectives() { // TODO Implementation deferred as this is an experimental component. return ImmutableList.of(); } + + @Override + public void purgeAll(DeviceId deviceId, ApplicationId appId) { + // TODO Implementation deferred as this is an experimental component. + } } diff --git a/drivers/corsa/src/main/java/org/onosproject/drivers/corsa/AbstractCorsaPipeline.java b/drivers/corsa/src/main/java/org/onosproject/drivers/corsa/AbstractCorsaPipeline.java index b0b02befa95..b9fa750accb 100644 --- a/drivers/corsa/src/main/java/org/onosproject/drivers/corsa/AbstractCorsaPipeline.java +++ b/drivers/corsa/src/main/java/org/onosproject/drivers/corsa/AbstractCorsaPipeline.java @@ -647,4 +647,10 @@ public void onError(FlowRuleOperations ops) { } })); } + + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + groupService.purgeGroupEntries(deviceId, appId); + } } diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java index cad1a8832ae..dedc8102833 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java @@ -289,6 +289,11 @@ public void next(NextObjective nextObjective) { } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + private Collection processForward(ForwardingObjective fwd) { switch (fwd.flag()) { case SPECIFIC: diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/DefaultSingleTablePipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/DefaultSingleTablePipeline.java index 1b3d310e4a0..e66adb9c392 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/DefaultSingleTablePipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/DefaultSingleTablePipeline.java @@ -21,6 +21,7 @@ import com.google.common.cache.RemovalNotification; import org.onlab.osgi.ServiceDirectory; import org.onlab.util.KryoNamespace; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.behaviour.NextGroup; import org.onosproject.net.behaviour.Pipeliner; @@ -273,6 +274,11 @@ public void next(NextObjective nextObjective) { nextObjective.context().ifPresent(context -> context.onSuccess(nextObjective)); } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + @Override public List getNextMappings(NextGroup nextGroup) { // Default single table pipeline does not use nextObjectives or groups diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java index ef79ee3ae14..57ef6eadb33 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java @@ -216,6 +216,11 @@ public void next(NextObjective nextObjective) { } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + private Collection processForward(ForwardingObjective fwd) { switch (fwd.flag()) { case SPECIFIC: diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java index 9ca9420a656..1d0e0dd8eb5 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java @@ -186,6 +186,11 @@ public void next(NextObjective nextObjective) { } } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + private void pass(Objective obj) { obj.context().ifPresent(context -> context.onSuccess(obj)); } diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/SpringOpenTTP.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/SpringOpenTTP.java index 43762950ed5..166ba729602 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/SpringOpenTTP.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/SpringOpenTTP.java @@ -286,6 +286,12 @@ public void next(NextObjective nextObjective) { } } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + groupService.purgeGroupEntries(deviceId, appId); + } + private void removeGroup(NextObjective nextObjective) { log.debug("removeGroup in {}: for next objective id {}", deviceId, nextObjective.id()); diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java index a020a647a2c..a22ecbefc5b 100644 --- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java +++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java @@ -477,6 +477,12 @@ public void next(NextObjective nextObjective) { } } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + groupService.purgeGroupEntries(deviceId, appId); + } + ////////////////////////////////////// // Flow handling ////////////////////////////////////// diff --git a/drivers/hp/src/main/java/org/onosproject/drivers/hp/AbstractHPPipeline.java b/drivers/hp/src/main/java/org/onosproject/drivers/hp/AbstractHPPipeline.java index 7979ab1a09c..4d1f013cac9 100644 --- a/drivers/hp/src/main/java/org/onosproject/drivers/hp/AbstractHPPipeline.java +++ b/drivers/hp/src/main/java/org/onosproject/drivers/hp/AbstractHPPipeline.java @@ -544,6 +544,13 @@ public void filter(FilteringObjective filteringObjective) { } } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + groupService.purgeGroupEntries(deviceId, appId); + meterService.purgeMeters(deviceId, appId); + } + /** * Gets traffic treatment from a next objective. * Merge traffic treatments from next objective if the next objective is diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicPipelinerImpl.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicPipelinerImpl.java index 9fc532bd8e1..3b66f95bd9b 100644 --- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicPipelinerImpl.java +++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicPipelinerImpl.java @@ -16,6 +16,7 @@ package org.onosproject.pipelines.basic; +import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.behaviour.NextGroup; import org.onosproject.net.behaviour.Pipeliner; @@ -100,6 +101,11 @@ public void next(NextObjective obj) { obj.context().ifPresent(c -> c.onError(obj, ObjectiveError.UNSUPPORTED)); } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + } + @Override public List getNextMappings(NextGroup nextGroup) { // We do not use nextObjectives or groups. diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java index 3105e66209b..e3bc567aab5 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java @@ -203,6 +203,13 @@ public void next(NextObjective obj) { handleResult(obj, result); } + @Override + public void purgeAll(ApplicationId appId) { + flowRuleService.purgeFlowRules(deviceId, appId); + groupService.purgeGroupEntries(deviceId, appId); + // TODO: should we purge also the FlowObjectiveStore? + } + @Override public List getNextMappings(NextGroup nextGroup) { final FabricNextGroup fabricNextGroup = KRYO.deserialize(nextGroup.data()); From 411f6f7f461db6491d627c2cb31642bdd6e7c8d8 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Wed, 28 Jul 2021 18:53:34 +0200 Subject: [PATCH 112/235] [SDFAB-357] Backport slicing in fabric and add support for QFI in PDR and fabric Change-Id: Ieb10140dc0029a0cbf59ddfbb77f64f9a8c7379e --- .../behaviour/upf/ForwardingActionRule.java | 3 +- .../behaviour/upf/PacketDetectionRule.java | 143 +- .../pipelines/fabric/FabricConstants.java | 53 +- .../fabric/impl/behaviour/Constants.java | 9 + .../upf/DistributedFabricUpfStore.java | 25 - .../behaviour/upf/FabricUpfProgrammable.java | 19 +- .../impl/behaviour/upf/FabricUpfStore.java | 16 - .../behaviour/upf/FabricUpfTranslator.java | 107 +- .../upf/FabricUpfTranslatorUtil.java | 18 + .../fabric/impl/src/main/resources/fabric.p4 | 17 +- .../src/main/resources/include/control/acl.p4 | 50 +- .../include/control/lookup_md_init.p4 | 66 + .../main/resources/include/control/slicing.p4 | 165 + .../main/resources/include/control/spgw.p4 | 59 +- .../impl/src/main/resources/include/define.p4 | 17 + .../impl/src/main/resources/include/header.p4 | 46 + .../impl/src/main/resources/include/parser.p4 | 29 +- .../impl/src/main/resources/include/size.p4 | 6 + .../p4c-out/fabric-bng/bmv2/default/bmv2.json | 4844 ++++-- .../fabric-bng/bmv2/default/p4info.txt | 202 + .../fabric-full/bmv2/default/bmv2.json | 14049 +++++++++------- .../fabric-full/bmv2/default/p4info.txt | 238 +- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 3855 +++-- .../fabric-int/bmv2/default/p4info.txt | 202 + .../fabric-spgw-int/bmv2/default/bmv2.json | 11016 +++++++----- .../fabric-spgw-int/bmv2/default/p4info.txt | 238 +- .../fabric-spgw/bmv2/default/bmv2.json | 6325 +++++-- .../fabric-spgw/bmv2/default/p4info.txt | 238 +- .../p4c-out/fabric/bmv2/default/bmv2.json | 3851 +++-- .../p4c-out/fabric/bmv2/default/p4info.txt | 202 + .../upf/FabricUpfTranslatorTest.java | 99 +- .../impl/behaviour/upf/TestUpfConstants.java | 122 +- 32 files changed, 30128 insertions(+), 16201 deletions(-) create mode 100644 pipelines/fabric/impl/src/main/resources/include/control/lookup_md_init.p4 create mode 100644 pipelines/fabric/impl/src/main/resources/include/control/slicing.p4 diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java index 3cd7c8cd5ce..bfed1ce26fd 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java @@ -86,7 +86,8 @@ public String actionString() { } else if (tunnel != null) { actionName = "Encap"; actionParams = String.format("Src=%s, SPort=%d, TEID=%s, Dst=%s", - tunnel.src().toString(), tunnel.srcPort(), tunnel.teid().toString(), tunnel.dst().toString()); + tunnel.src().toString(), tunnel.srcPort(), + tunnel.teid().toString(), tunnel.dst().toString()); } else { actionName = "Forward"; } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java index c2069a58b6f..f607d8704e3 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java @@ -43,22 +43,27 @@ public final class PacketDetectionRule { private final Integer ctrId; // Counter ID unique to this PDR private final Integer farId; // The PFCP session-local ID of the FAR that should apply after this PDR hits private final Type type; - private final Integer schedulingPriority; + + private final Byte qfi; // QoS Flow Identifier of this PDR + private final boolean qfiPush; // True when QFI should be pushed to the packet + private final boolean qfiMatch; // True when QFI should be matched private static final int SESSION_ID_BITWIDTH = 96; private PacketDetectionRule(ImmutableByteSequence sessionId, Integer ctrId, - Integer farId, Integer schedulingPriority, - Ip4Address ueAddr, ImmutableByteSequence teid, - Ip4Address tunnelDst, Type type) { + Integer farId, Ip4Address ueAddr, Byte qfi, + ImmutableByteSequence teid, Ip4Address tunnelDst, + Type type, boolean qfiPush, boolean qfiMatch) { this.ueAddr = ueAddr; this.teid = teid; this.tunnelDst = tunnelDst; this.sessionId = sessionId; this.ctrId = ctrId; this.farId = farId; - this.schedulingPriority = schedulingPriority; + this.qfi = qfi; this.type = type; + this.qfiPush = qfiPush; + this.qfiMatch = qfiMatch; } public static Builder builder() { @@ -72,7 +77,9 @@ public static Builder builder() { */ public String matchString() { if (matchesEncapped()) { - return String.format("Match(Dst=%s, TEID=%s)", tunnelDest(), teid()); + return matchQfi() ? + String.format("Match(Dst=%s, TEID=%s, QFI=%s)", tunnelDest(), teid(), qfi()) : + String.format("Match(Dst=%s, TEID=%s)", tunnelDest(), teid()); } else { return String.format("Match(Dst=%s, !GTP)", ueAddress()); } @@ -82,8 +89,12 @@ public String matchString() { public String toString() { String actionParams = ""; if (hasActionParameters()) { - actionParams = String.format("SEID=%s, FAR=%d, CtrIdx=%d, SchedulingPrio=%d", - sessionId.toString(), farId, ctrId, schedulingPriority); + actionParams = hasQfi() && !matchQfi() ? + String.format("SEID=%s, FAR=%d, CtrIdx=%d, QFI=%s", + sessionId.toString(), farId, ctrId, qfi) : + String.format("SEID=%s, FAR=%d, CtrIdx=%d", + sessionId.toString(), farId, ctrId); + actionParams = pushQfi() ? String.format("%s, QFI_PUSH", actionParams) : actionParams; } return String.format("PDR{%s -> LoadParams(%s)}", @@ -111,13 +122,15 @@ public boolean equals(Object obj) { Objects.equals(this.ctrId, that.ctrId) && Objects.equals(this.sessionId, that.sessionId) && Objects.equals(this.farId, that.farId) && - Objects.equals(this.schedulingPriority, that.schedulingPriority)); + Objects.equals(this.qfi, that.qfi) && + Objects.equals(this.qfiPush, that.qfiPush) && + Objects.equals(this.qfiMatch, that.qfiMatch)); } @Override public int hashCode() { return Objects.hash(ueAddr, teid, tunnelDst, sessionId, ctrId, farId, - schedulingPriority, type); + qfi, type); } /** @@ -139,10 +152,14 @@ public boolean hasActionParameters() { */ public PacketDetectionRule withoutActionParams() { if (matchesEncapped()) { - return PacketDetectionRule.builder() + PacketDetectionRule.Builder pdrBuilder = PacketDetectionRule.builder() .withTeid(teid) - .withTunnelDst(tunnelDst) - .build(); + .withTunnelDst(tunnelDst); + if (this.hasQfi() && this.matchQfi()) { + pdrBuilder.withQfiMatch(); + pdrBuilder.withQfi(qfi); + } + return pdrBuilder.build(); } else { return PacketDetectionRule.builder() .withUeAddr(ueAddr).build(); @@ -227,22 +244,39 @@ public int farId() { } /** - * Get the scheduling priority that this PDR is assigned. + * Get the QoS Flow Identifier for this PDR. * - * @return scheduling priority + * @return QoS Flow Identifier */ - public int schedulingPriority() { - return schedulingPriority; + public byte qfi() { + return qfi; } /** - * This method is used to differentiate between prioritized and non-prioritized - * flows. + * Returns whether QFi should be pushed to the packet. * - * @return true if scheduling priority is assigned. + * @return True if the QFI should be pushed to the packet, false otherwise */ - public boolean hasSchedulingPriority() { - return schedulingPriority > 0; + public boolean pushQfi() { + return qfiPush; + } + + /** + * Returns whether QFI should be matched on the packet or not. + * + * @return True if QFI should be matched on the packet, false otherwise + */ + public boolean matchQfi() { + return qfiMatch; + } + + /** + * Checks if the PDR has a QFI to match upon or to push on the packet. + * + * @return True if the PDR has a QFI, false otherwise + */ + public boolean hasQfi() { + return qfi != null; } private enum Type { @@ -276,6 +310,9 @@ public static class Builder { private Ip4Address ueAddr = null; private ImmutableByteSequence teid = null; private Ip4Address tunnelDst = null; + private Byte qfi = null; + private boolean qfiPush = false; + private boolean qfiMatch = false; public Builder() { @@ -342,8 +379,36 @@ public Builder withLocalFarId(int localFarId) { return this; } - public Builder withSchedulingPriority(int schedulingPriority) { - this.schedulingPriority = schedulingPriority; + /** + * Set the QoS Flow Identifier for this PDR. + * + * @param qfi GTP Tunnel QFI + * @return This builder object + */ + public Builder withQfi(byte qfi) { + this.qfi = qfi; + return this; + } + + /** + * The QoS Flow Identifier should be pushed to the packet. + * This is valid for downstream packets and for 5G traffic only. + * + * @return This builder object + */ + public Builder withQfiPush() { + this.qfiPush = true; + return this; + } + + /** + * The QoS Flow Identifier should be matched to the packet. + * This is valid for upstream packets and for 5G traffic only. + * + * @return This builder object + */ + public Builder withQfiMatch() { + this.qfiMatch = true; return this; } @@ -393,6 +458,21 @@ public Builder withTunnel(ImmutableByteSequence teid, Ip4Address tunnelDst) { return this; } + /** + * Set the tunnel ID, destination IP and QFI of the GTP tunnel that this PDR matches on. + * + * @param teid GTP tunnel ID + * @param tunnelDst GTP tunnel destination IP + * @param qfi GTP QoS Flow Identifier + * @return This builder object + */ + public Builder withTunnel(ImmutableByteSequence teid, Ip4Address tunnelDst, byte qfi) { + this.teid = teid; + this.tunnelDst = tunnelDst; + this.qfi = qfi; + return this; + } + public PacketDetectionRule build() { // Some match keys are required. checkArgument( @@ -401,9 +481,15 @@ public PacketDetectionRule build() { "Either a UE address or a TEID and Tunnel destination must be provided, but not both."); // Action parameters are optional but must be all provided together if they are provided checkArgument( - (sessionId != null && ctrId != null && localFarId != null && schedulingPriority != null) || - (sessionId == null && ctrId == null && localFarId == null && schedulingPriority == null), + (sessionId != null && ctrId != null && localFarId != null) || + (sessionId == null && ctrId == null && localFarId == null), "PDR action parameters must be provided together or not at all."); + checkArgument(!qfiPush || !qfiMatch, + "Either match of push QFI can be true, not both."); + checkArgument(!qfiPush || qfi != null, + "A QFI must be provided when pushing QFI to the packet."); + checkArgument(!qfiMatch || qfi != null, + "A QFI must be provided when matching QFI on the packet."); Type type; if (teid != null) { if (sessionId != null) { @@ -418,8 +504,9 @@ public PacketDetectionRule build() { type = Type.MATCH_UNENCAPPED_NO_ACTION; } } - return new PacketDetectionRule(sessionId, ctrId, localFarId, schedulingPriority, - ueAddr, teid, tunnelDst, type); + return new PacketDetectionRule(sessionId, ctrId, localFarId, ueAddr, + qfi, teid, tunnelDst, type, + qfiPush, qfiMatch); } } } diff --git a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index 5a6f28ef0d5..7e12b556a49 100644 --- a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java +++ b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -40,6 +40,7 @@ private FabricConstants() { PiMatchFieldId.of("vlan_is_valid"); public static final PiMatchFieldId HDR_IPV6_SRC_NET_ID = PiMatchFieldId.of("ipv6_src_net_id"); + public static final PiMatchFieldId HDR_COLOR = PiMatchFieldId.of("color"); public static final PiMatchFieldId HDR_C_TAG = PiMatchFieldId.of("c_tag"); public static final PiMatchFieldId HDR_IPV4_SRC = PiMatchFieldId.of("ipv4_src"); @@ -58,6 +59,8 @@ private FabricConstants() { public static final PiMatchFieldId HDR_S_TAG = PiMatchFieldId.of("s_tag"); public static final PiMatchFieldId HDR_VLAN_ID = PiMatchFieldId.of("vlan_id"); + public static final PiMatchFieldId HDR_HAS_QFI = + PiMatchFieldId.of("has_qfi"); public static final PiMatchFieldId HDR_ETH_DST = PiMatchFieldId.of("eth_dst"); public static final PiMatchFieldId HDR_ICMP_TYPE = @@ -100,14 +103,18 @@ private FabricConstants() { public static final PiMatchFieldId HDR_UE_ADDR = PiMatchFieldId.of("ue_addr"); public static final PiMatchFieldId HDR_TEID = PiMatchFieldId.of("teid"); + public static final PiMatchFieldId HDR_SLICE_ID = + PiMatchFieldId.of("slice_id"); public static final PiMatchFieldId HDR_INT_IS_VALID = PiMatchFieldId.of("int_is_valid"); + public static final PiMatchFieldId HDR_TC = PiMatchFieldId.of("tc"); public static final PiMatchFieldId HDR_MPLS_LABEL = PiMatchFieldId.of("mpls_label"); public static final PiMatchFieldId HDR_IP_PROTO = PiMatchFieldId.of("ip_proto"); public static final PiMatchFieldId HDR_PPPOE_PROTOCOL = PiMatchFieldId.of("pppoe_protocol"); + public static final PiMatchFieldId HDR_QFI = PiMatchFieldId.of("qfi"); // Table IDs public static final PiTableId FABRIC_INGRESS_NEXT_HASHED = PiTableId.of("FabricIngress.next.hashed"); @@ -135,8 +142,12 @@ private FabricConstants() { PiTableId.of("FabricIngress.forwarding.mpls"); public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V4 = PiTableId.of("FabricIngress.forwarding.routing_v4"); + public static final PiTableId FABRIC_INGRESS_SLICE_TC_CLASSIFIER_CLASSIFIER = + PiTableId.of("FabricIngress.slice_tc_classifier.classifier"); public static final PiTableId FABRIC_INGRESS_ACL_ACL = PiTableId.of("FabricIngress.acl.acl"); + public static final PiTableId FABRIC_EGRESS_DSCP_REWRITER_REWRITER = + PiTableId.of("FabricEgress.dscp_rewriter.rewriter"); public static final PiTableId FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS = PiTableId.of("FabricIngress.pre_next.next_mpls"); public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN = @@ -147,6 +158,8 @@ private FabricConstants() { PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_term_v4"); public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_TERM_V6 = PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_term_v6"); + public static final PiTableId FABRIC_INGRESS_QOS_QUEUES = + PiTableId.of("FabricIngress.qos.queues"); public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING = PiTableId.of("FabricIngress.forwarding.bridging"); public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_LINE_SESSION_MAP = @@ -205,14 +218,18 @@ private FabricConstants() { PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_source"); public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_COUNTER_INT_SOURCE = PiCounterId.of("FabricEgress.process_int_main.process_int_source.counter_int_source"); - public static final PiCounterId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SINK = - PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_sink"); public static final PiCounterId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN_COUNTER = PiCounterId.of("FabricEgress.egress_next.egress_vlan_counter"); + public static final PiCounterId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SINK = + PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_sink"); + public static final PiCounterId FABRIC_INGRESS_QOS_QUEUES_STATS = + PiCounterId.of("FabricIngress.qos.queues_stats"); public static final PiCounterId FABRIC_INGRESS_ACL_ACL_COUNTER = PiCounterId.of("FabricIngress.acl.acl_counter"); public static final PiCounterId FABRIC_INGRESS_NEXT_XCONNECT_COUNTER = PiCounterId.of("FabricIngress.next.xconnect_counter"); + public static final PiCounterId FABRIC_INGRESS_SLICE_TC_CLASSIFIER_CLASSIFIER_STATS = + PiCounterId.of("FabricIngress.slice_tc_classifier.classifier_stats"); public static final PiCounterId FABRIC_INGRESS_FORWARDING_ROUTING_V6_COUNTER = PiCounterId.of("FabricIngress.forwarding.routing_v6_counter"); public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER = @@ -222,6 +239,8 @@ private FabricConstants() { public static final PiCounterId FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN_COUNTER = PiCounterId.of("FabricIngress.pre_next.next_vlan_counter"); // Action IDs + public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 = + PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_NEXT_ID_XCONNECT = PiActionId.of("FabricIngress.next.set_next_id_xconnect"); public static final PiActionId FABRIC_INGRESS_PRE_NEXT_SET_VLAN = @@ -252,10 +271,12 @@ private FabricConstants() { PiActionId.of("FabricIngress.bng_ingress.upstream.punt_to_cpu"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_DROP = PiActionId.of("FabricIngress.bng_ingress.downstream.drop"); - public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR = - PiActionId.of("FabricIngress.spgw.load_normal_far"); + public static final PiActionId FABRIC_INGRESS_SLICE_TC_CLASSIFIER_TRUST_DSCP = + PiActionId.of("FabricIngress.slice_tc_classifier.trust_dscp"); public static final PiActionId FABRIC_INGRESS_PRE_NEXT_SET_DOUBLE_VLAN = PiActionId.of("FabricIngress.pre_next.set_double_vlan"); + public static final PiActionId FABRIC_EGRESS_DSCP_REWRITER_REWRITE = + PiActionId.of("FabricEgress.dscp_rewriter.rewrite"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_SET_LINE = PiActionId.of("FabricIngress.bng_ingress.set_line"); public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_DISABLED = @@ -264,6 +285,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.acl.set_next_id_acl"); public static final PiActionId FABRIC_INGRESS_FILTERING_PERMIT = PiActionId.of("FabricIngress.filtering.permit"); + public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR = + PiActionId.of("FabricIngress.spgw.load_normal_far"); public static final PiActionId FABRIC_INGRESS_SPGW_IFACE_MISS = PiActionId.of("FabricIngress.spgw.iface_miss"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4 = @@ -274,10 +297,14 @@ private FabricConstants() { PiActionId.of("FabricIngress.next.routing_simple"); public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_PDR_QOS = PiActionId.of("FabricIngress.spgw.load_pdr_qos"); + public static final PiActionId FABRIC_INGRESS_QOS_SET_QUEUE = + PiActionId.of("FabricIngress.qos.set_queue"); + public static final PiActionId FABRIC_EGRESS_DSCP_REWRITER_CLEAR = + PiActionId.of("FabricEgress.dscp_rewriter.clear"); public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_PUSH_VLAN = PiActionId.of("FabricEgress.egress_next.push_vlan"); - public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 = - PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4"); + public static final PiActionId FABRIC_INGRESS_QOS_METER_DROP = + PiActionId.of("FabricIngress.qos.meter_drop"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_HASHED = PiActionId.of("FabricIngress.next.output_hashed"); public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_IFACE = @@ -319,6 +346,8 @@ private FabricConstants() { PiActionId.of("FabricIngress.next.set_mcast_group_id"); public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE = PiActionId.of("FabricIngress.filtering.set_forwarding_type"); + public static final PiActionId FABRIC_INGRESS_SLICE_TC_CLASSIFIER_SET_SLICE_ID_TC = + PiActionId.of("FabricIngress.slice_tc_classifier.set_slice_id_tc"); public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION = PiActionId.of("FabricEgress.process_int_main.process_int_report.do_report_encapsulation"); public static final PiActionId NO_ACTION = PiActionId.of("NoAction"); @@ -351,7 +380,7 @@ private FabricConstants() { public static final PiActionParamId MON_MAC = PiActionParamId.of("mon_mac"); public static final PiActionParamId NEXT_ID = PiActionParamId.of("next_id"); public static final PiActionParamId INS_CNT = PiActionParamId.of("ins_cnt"); - public static final PiActionParamId SRC_MAC = PiActionParamId.of("src_mac"); + public static final PiActionParamId TC = PiActionParamId.of("tc"); public static final PiActionParamId INNER_VLAN_ID = PiActionParamId.of("inner_vlan_id"); public static final PiActionParamId PPPOE_SESSION_ID = @@ -360,7 +389,8 @@ private FabricConstants() { public static final PiActionParamId MON_IP = PiActionParamId.of("mon_ip"); public static final PiActionParamId INS_MASK0003 = PiActionParamId.of("ins_mask0003"); - public static final PiActionParamId LINE_ID = PiActionParamId.of("line_id"); + public static final PiActionParamId NEEDS_QFI_PUSH = + PiActionParamId.of("needs_qfi_push"); public static final PiActionParamId FWD_TYPE = PiActionParamId.of("fwd_type"); public static final PiActionParamId OUTER_VLAN_ID = @@ -370,11 +400,16 @@ private FabricConstants() { public static final PiActionParamId INS_MASK0407 = PiActionParamId.of("ins_mask0407"); public static final PiActionParamId TEID = PiActionParamId.of("teid"); + public static final PiActionParamId SLICE_ID = + PiActionParamId.of("slice_id"); + public static final PiActionParamId LINE_ID = PiActionParamId.of("line_id"); public static final PiActionParamId DROP = PiActionParamId.of("drop"); public static final PiActionParamId PORT_NUM = PiActionParamId.of("port_num"); + public static final PiActionParamId SRC_MAC = PiActionParamId.of("src_mac"); public static final PiActionParamId TUNNEL_DST_ADDR = PiActionParamId.of("tunnel_dst_addr"); + public static final PiActionParamId QFI = PiActionParamId.of("qfi"); public static final PiActionParamId GROUP_ID = PiActionParamId.of("group_id"); public static final PiActionParamId MAX_HOP = PiActionParamId.of("max_hop"); @@ -389,6 +424,8 @@ private FabricConstants() { public static final PiPacketMetadataId EGRESS_PORT = PiPacketMetadataId.of("egress_port"); // Meter IDs + public static final PiMeterId FABRIC_INGRESS_QOS_SLICE_TC_METER = + PiMeterId.of("FabricIngress.qos.slice_tc_meter"); public static final PiMeterId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_M_BESTEFF = PiMeterId.of("FabricIngress.bng_ingress.downstream.m_besteff"); public static final PiMeterId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_M_PRIO = diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java index f55a8257832..6f92cad8629 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java @@ -25,6 +25,9 @@ public final class Constants { public static final byte[] ONE = new byte[]{1}; public static final byte[] ZERO = new byte[]{0}; + public static final byte FALSE = (byte) 0x00; + public static final byte TRUE = (byte) 0x01; + public static final long PORT_TYPE_MASK = 0x3; public static final byte PORT_TYPE_EDGE = 0x1; public static final byte PORT_TYPE_INFRA = 0x2; @@ -40,6 +43,12 @@ public final class Constants { public static final int DEFAULT_VLAN = 4094; public static final int DEFAULT_PW_TRANSPORT_VLAN = 4090; + // Default Slice and Traffic Class IDs + public static final int DEFAULT_SLICE_ID = 0; + public static final int DEFAULT_TC = 0; + public static final byte DEFAULT_QFI = (byte) 0x00; + + // hide default constructor private Constants() { } diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java index 21c60540b46..7045c2d043c 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java @@ -16,8 +16,6 @@ package org.onosproject.pipelines.fabric.impl.behaviour.upf; -import com.google.common.collect.BiMap; -import com.google.common.collect.ImmutableBiMap; import com.google.common.hash.HashCode; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; @@ -41,7 +39,6 @@ /** * Distributed implementation of FabricUpfStore. */ -// FIXME: this store is generic and not tied to a single device, should we have a store based on deviceId? @Component(immediate = true, service = FabricUpfStore.class) public final class DistributedFabricUpfStore implements FabricUpfStore { @@ -55,18 +52,6 @@ public final class DistributedFabricUpfStore implements FabricUpfStore { .register(KryoNamespaces.API) .register(UpfRuleIdentifier.class); - // TODO: check queue IDs for BMv2, is priority inverted? - // Mapping between scheduling priority ranges with BMv2 priority queues - private static final BiMap SCHEDULING_PRIORITY_MAP - = new ImmutableBiMap.Builder() - // Highest scheduling priority for 3GPP is 1 and highest BMv2 queue priority is 7 - .put(1, 5) - .put(6, 4) - .put(7, 3) - .put(8, 2) - .put(9, 1) - .build(); - // EC map to remember the mapping far_id -> rule_id this is mostly used during reads, // it can be definitely removed by simplifying the logical pipeline protected EventuallyConsistentMap reverseFarIdMap; @@ -130,16 +115,6 @@ public int removeGlobalFarId(ImmutableByteSequence pfcpSessionId, int sessionLoc return removeGlobalFarId(farId); } - @Override - public String queueIdOf(int schedulingPriority) { - return (SCHEDULING_PRIORITY_MAP.get(schedulingPriority)).toString(); - } - - @Override - public String schedulingPriorityOf(int queueId) { - return (SCHEDULING_PRIORITY_MAP.inverse().get(queueId)).toString(); - } - @Override public UpfRuleIdentifier localFarIdOf(int globalFarId) { return reverseFarIdMap.get(globalFarId); diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java index 401b5db9ec9..310f28dacf1 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java @@ -70,11 +70,15 @@ import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_UPLINK_PDRS; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; - +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; /** * Implementation of a UPF programmable device behavior. @@ -531,10 +535,17 @@ public void removePdr(PacketDetectionRule pdr) throws UpfProgrammableException { final PiCriterion match; final PiTableId tableId; if (pdr.matchesEncapped()) { - match = PiCriterion.builder() + PiCriterion.Builder criterionBuilder = PiCriterion.builder() .matchExact(HDR_TEID, pdr.teid().asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()) - .build(); + .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()); + if (pdr.matchQfi()) { + criterionBuilder.matchExact(HDR_HAS_QFI, TRUE); + criterionBuilder.matchExact(HDR_QFI, pdr.qfi()); + } else { + criterionBuilder.matchExact(HDR_HAS_QFI, FALSE); + criterionBuilder.matchExact(HDR_QFI, DEFAULT_QFI); + } + match = criterionBuilder.build(); tableId = FABRIC_INGRESS_SPGW_UPLINK_PDRS; } else { match = PiCriterion.builder() diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java index ae3b0e9c6c4..8e9e92bb4fd 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java @@ -80,20 +80,4 @@ public interface FabricUpfStore { * @return the corresponding PFCP session ID and session-local FAR ID, as a RuleIdentifier */ UpfRuleIdentifier localFarIdOf(int globalFarId); - - /** - * Get the corresponding queue Id from scheduling priority. - * - * @param schedulingPriority QCI scheduling priority - * @return the corresponding queue ID - */ - String queueIdOf(int schedulingPriority); - - /** - * Get the corresponding queue Id from scheduling priority. - * - * @param queueId Tofino queue Id - * @return the corresponding scheduling priroity - */ - String schedulingPriorityOf(int queueId); } diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java index 2341e04214a..179e7931c42 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java @@ -54,18 +54,28 @@ import static org.onosproject.pipelines.fabric.FabricConstants.FAR_ID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_GTPU_DECAP; +import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_QFI_PUSH; import static org.onosproject.pipelines.fabric.FabricConstants.NOTIFY_CP; -import static org.onosproject.pipelines.fabric.FabricConstants.QID; +import static org.onosproject.pipelines.fabric.FabricConstants.QFI; +import static org.onosproject.pipelines.fabric.FabricConstants.SLICE_ID; import static org.onosproject.pipelines.fabric.FabricConstants.SRC_IFACE; +import static org.onosproject.pipelines.fabric.FabricConstants.TC; import static org.onosproject.pipelines.fabric.FabricConstants.TEID; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_DST_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_SLICE_ID; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_TC; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; /** * Provides logic to translate UPF entities into pipeline-specific ones and vice-versa. @@ -140,30 +150,29 @@ public PacketDetectionRule fabricEntryToPdr(FlowRule entry) throw new UpfProgrammableException(String.format("Unable to find local far id of %s", globalFarId)); } - PiActionId actionId = action.id(); - if (actionId.equals(FABRIC_INGRESS_SPGW_LOAD_PDR)) { - int schedulingPriority = 0; - pdrBuilder.withSchedulingPriority(schedulingPriority); - } else if (actionId.equals(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS)) { - int queueId = FabricUpfTranslatorUtil.getParamInt(action, QID); - String schedulingPriority = fabricUpfStore.schedulingPriorityOf(queueId); - if (schedulingPriority == null) { - throw new UpfProgrammableException("Undefined Scheduling Priority"); - } - pdrBuilder.withSchedulingPriority(Integer.parseInt(schedulingPriority)); - } else { - throw new UpfProgrammableException("Unknown action ID"); - } pdrBuilder.withCounterId(FabricUpfTranslatorUtil.getParamInt(action, CTR_ID)) .withLocalFarId(farId.getSessionLocalId()) .withSessionId(farId.getPfcpSessionId()); + PiActionId actionId = action.id(); + if (actionId.equals(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS)) { + pdrBuilder.withQfi(FabricUpfTranslatorUtil.getParamByte(action, QFI)); + if (FabricUpfTranslatorUtil.getParamByte(action, NEEDS_QFI_PUSH) == TRUE) { + pdrBuilder.withQfiPush(); + } + } + if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_TEID)) { // F-TEID is only present for GTP-matching PDRs ImmutableByteSequence teid = FabricUpfTranslatorUtil.getFieldValue(match, HDR_TEID); Ip4Address tunnelDst = FabricUpfTranslatorUtil.getFieldAddress(match, HDR_TUNNEL_IPV4_DST); pdrBuilder.withTeid(teid) .withTunnelDst(tunnelDst); + if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_HAS_QFI) && + FabricUpfTranslatorUtil.getFieldByte(match, HDR_HAS_QFI) == TRUE) { + pdrBuilder.withQfi(FabricUpfTranslatorUtil.getFieldByte(match, HDR_QFI)); + pdrBuilder.withQfiMatch(); + } } else if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_UE_ADDR)) { // And UE address is only present for non-GTP-matching PDRs pdrBuilder.withUeAddr(FabricUpfTranslatorUtil.getFieldAddress(match, HDR_UE_ADDR)); @@ -324,45 +333,52 @@ public FlowRule farToFabricEntry(ForwardingActionRule far, DeviceId deviceId, Ap */ public FlowRule pdrToFabricEntry(PacketDetectionRule pdr, DeviceId deviceId, ApplicationId appId, int priority) throws UpfProgrammableException { - PiCriterion match; - PiTableId tableId; - PiAction action; + final PiCriterion match; + final PiTableId tableId; + final PiAction action; - if (pdr.matchesEncapped()) { - match = PiCriterion.builder() - .matchExact(HDR_TEID, pdr.teid().asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()) - .build(); - tableId = FABRIC_INGRESS_SPGW_UPLINK_PDRS; - } else if (pdr.matchesUnencapped()) { - match = PiCriterion.builder() - .matchExact(HDR_UE_ADDR, pdr.ueAddress().toInt()) - .build(); - tableId = FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; - } else { - throw new UpfProgrammableException("Flexible PDRs not yet supported! Cannot translate " + pdr.toString()); - } + final PiCriterion.Builder matchBuilder = PiCriterion.builder(); - PiAction.Builder builder = PiAction.builder() + PiAction.Builder actionBuilder = PiAction.builder() .withParameters(Arrays.asList( new PiActionParam(CTR_ID, pdr.counterId()), new PiActionParam(FAR_ID, fabricUpfStore.globalFarIdOf(pdr.sessionId(), pdr.farId())), - new PiActionParam(NEEDS_GTPU_DECAP, pdr.matchesEncapped() ? 1 : 0) + new PiActionParam(NEEDS_GTPU_DECAP, pdr.matchesEncapped() ? + TRUE : FALSE), + new PiActionParam(TC, DEFAULT_TC) )); - if (pdr.hasSchedulingPriority()) { - String queueId = fabricUpfStore.queueIdOf(pdr.schedulingPriority()); - if (queueId == null) { - throw new UpfProgrammableException("Udefined Scheduling Priority"); + PiActionId actionId = FABRIC_INGRESS_SPGW_LOAD_PDR; + if (pdr.matchesEncapped()) { + tableId = FABRIC_INGRESS_SPGW_UPLINK_PDRS; + matchBuilder.matchExact(HDR_TEID, pdr.teid().asArray()) + .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()); + if (pdr.matchQfi()) { + matchBuilder.matchExact(HDR_HAS_QFI, TRUE) + .matchExact(HDR_QFI, pdr.qfi()); + } else { + matchBuilder.matchExact(HDR_HAS_QFI, FALSE) + .matchExact(HDR_QFI, DEFAULT_QFI); + if (pdr.hasQfi()) { + actionId = FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; + actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())) + .withParameter(new PiActionParam(NEEDS_QFI_PUSH, FALSE)); + } } - action = builder - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS) - .withParameter(new PiActionParam(QID, Integer.parseInt(queueId))) - .build(); + } else if (pdr.matchesUnencapped()) { + tableId = FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; + matchBuilder.matchExact(HDR_UE_ADDR, pdr.ueAddress().toInt()); + if (pdr.hasQfi()) { + actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())); + actionId = FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; + } + actionBuilder.withParameter( + new PiActionParam(NEEDS_QFI_PUSH, pdr.pushQfi() ? TRUE : FALSE)); } else { - action = builder - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR) - .build(); + throw new UpfProgrammableException("Flexible PDRs not yet supported! Cannot translate " + pdr); } + match = matchBuilder.build(); + action = actionBuilder.withId(actionId) + .build(); return DefaultFlowRule.builder() .forDevice(deviceId).fromApp(appId).makePermanent() .forTable(tableId) @@ -407,6 +423,7 @@ public FlowRule interfaceToFabricEntry(UpfInterface upfInterface, DeviceId devic PiAction action = PiAction.builder() .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) .withParameter(new PiActionParam(SRC_IFACE, interfaceTypeInt)) + .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) .build(); return DefaultFlowRule.builder() .forDevice(deviceId).fromApp(appId).makePermanent() diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java index a931f1ff2c0..cfbf95e4b3d 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java @@ -94,11 +94,21 @@ static int getFieldInt(PiCriterion criterion, PiMatchFieldId fieldId) return byteSeqToInt(getFieldValue(criterion, fieldId)); } + static byte getFieldByte(PiCriterion criterion, PiMatchFieldId fieldId) + throws UpfProgrammableException { + return byteSeqToByte(getFieldValue(criterion, fieldId)); + } + static int getParamInt(PiAction action, PiActionParamId paramId) throws UpfProgrammableException { return byteSeqToInt(getParamValue(action, paramId)); } + static byte getParamByte(PiAction action, PiActionParamId paramId) + throws UpfProgrammableException { + return byteSeqToByte(getParamValue(action, paramId)); + } + static Ip4Address getParamAddress(PiAction action, PiActionParamId paramId) throws UpfProgrammableException { return Ip4Address.valueOf(getParamValue(action, paramId).asArray()); @@ -127,6 +137,14 @@ static int byteSeqToInt(ImmutableByteSequence sequence) { } } + static byte byteSeqToByte(ImmutableByteSequence sequence) { + try { + return sequence.fit(8).asReadOnlyBuffer().get(); + } catch (ImmutableByteSequence.ByteSequenceTrimException e) { + throw new IllegalArgumentException("Attempted to convert a >1 byte wide sequence to a byte!"); + } + } + static Pair fabricEntryToPiPair(FlowRule entry) { PiCriterion match = (PiCriterion) entry.selector().getCriterion(Criterion.Type.PROTOCOL_INDEPENDENT); PiTableAction action = null; diff --git a/pipelines/fabric/impl/src/main/resources/fabric.p4 b/pipelines/fabric/impl/src/main/resources/fabric.p4 index 0b336b59a98..bb6ff7c21fd 100644 --- a/pipelines/fabric/impl/src/main/resources/fabric.p4 +++ b/pipelines/fabric/impl/src/main/resources/fabric.p4 @@ -24,6 +24,8 @@ #include "include/control/acl.p4" #include "include/control/next.p4" #include "include/control/packetio.p4" +#include "include/control/lookup_md_init.p4" +#include "include/control/slicing.p4" #include "include/header.p4" #include "include/checksum.p4" #include "include/parser.p4" @@ -48,12 +50,15 @@ control FabricIngress (inout parsed_headers_t hdr, inout fabric_metadata_t fabric_metadata, inout standard_metadata_t standard_metadata) { + LookupMdInit() lkp_md_init; PacketIoIngress() pkt_io_ingress; Filtering() filtering; Forwarding() forwarding; PreNext() pre_next; Acl() acl; Next() next; + IngressSliceTcClassifier() slice_tc_classifier; + IngressQos() qos; #ifdef WITH_PORT_COUNTER PortCountersControl() port_counters_control; #endif // WITH_PORT_COUNTER @@ -63,11 +68,15 @@ control FabricIngress (inout parsed_headers_t hdr, apply { _PRE_INGRESS + lkp_md_init.apply(hdr, fabric_metadata.lkp); pkt_io_ingress.apply(hdr, fabric_metadata, standard_metadata); + slice_tc_classifier.apply(hdr, fabric_metadata, standard_metadata); + filtering.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_SPGW - spgw.apply(hdr, fabric_metadata, standard_metadata); + if (fabric_metadata.skip_forwarding == _FALSE) { + spgw.apply(hdr, fabric_metadata, standard_metadata); + } #endif // WITH_SPGW - filtering.apply(hdr, fabric_metadata, standard_metadata); if (fabric_metadata.skip_forwarding == _FALSE) { forwarding.apply(hdr, fabric_metadata, standard_metadata); } @@ -89,7 +98,7 @@ control FabricIngress (inout parsed_headers_t hdr, #ifdef WITH_BNG bng_ingress.apply(hdr, fabric_metadata, standard_metadata); #endif // WITH_BNG - + qos.apply(fabric_metadata, standard_metadata); } } @@ -99,6 +108,7 @@ control FabricEgress (inout parsed_headers_t hdr, PacketIoEgress() pkt_io_egress; EgressNextControl() egress_next; + EgressDscpRewriter() dscp_rewriter; #ifdef WITH_SPGW SpgwEgress() spgw; #endif // WITH_SPGW @@ -116,6 +126,7 @@ control FabricEgress (inout parsed_headers_t hdr, #ifdef WITH_INT process_int_main.apply(hdr, fabric_metadata, standard_metadata); #endif + dscp_rewriter.apply(hdr, fabric_metadata, standard_metadata); } } diff --git a/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 index ae86e3b1215..9d7c7bafae5 100644 --- a/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 @@ -21,29 +21,22 @@ #include "../header.p4" control Acl (inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, + inout fabric_metadata_t fabric_md, inout standard_metadata_t standard_metadata) { - - ipv4_addr_t ipv4_src = 0; - ipv4_addr_t ipv4_dst = 0; - bit<8> ip_proto = 0; - l4_port_t l4_sport = 0; - l4_port_t l4_dport = 0; - /* * ACL Table. */ direct_counter(CounterType.packets_and_bytes) acl_counter; action set_next_id_acl(next_id_t next_id) { - fabric_metadata.next_id = next_id; + fabric_md.next_id = next_id; acl_counter.count(); } // Send immendiatelly to CPU - skip the rest of ingress. action punt_to_cpu() { standard_metadata.egress_spec = CPU_PORT; - fabric_metadata.skip_next = _TRUE; + fabric_md.skip_next = _TRUE; acl_counter.count(); } @@ -55,7 +48,7 @@ control Acl (inout parsed_headers_t hdr, action drop() { mark_to_drop(standard_metadata); - fabric_metadata.skip_next = _TRUE; + fabric_md.skip_next = _TRUE; acl_counter.count(); } @@ -70,14 +63,14 @@ control Acl (inout parsed_headers_t hdr, hdr.ethernet.src_addr : ternary @name("eth_src"); // 48 hdr.vlan_tag.vlan_id : ternary @name("vlan_id"); // 12 hdr.eth_type.value : ternary @name("eth_type"); // 16 - ipv4_src : ternary @name("ipv4_src"); // 32 - ipv4_dst : ternary @name("ipv4_dst"); // 32 - ip_proto : ternary @name("ip_proto"); // 8 + fabric_md.lkp.ipv4_src : ternary @name("ipv4_src"); // 32 + fabric_md.lkp.ipv4_dst : ternary @name("ipv4_dst"); // 32 + fabric_md.lkp.ip_proto : ternary @name("ip_proto"); // 8 hdr.icmp.icmp_type : ternary @name("icmp_type"); // 8 hdr.icmp.icmp_code : ternary @name("icmp_code"); // 8 - l4_sport : ternary @name("l4_sport"); // 16 - l4_dport : ternary @name("l4_dport"); // 16 - fabric_metadata.port_type : ternary @name("port_type"); // 2 + fabric_md.lkp.l4_sport : ternary @name("l4_sport"); // 16 + fabric_md.lkp.l4_dport : ternary @name("l4_dport"); // 16 + fabric_md.port_type : ternary @name("port_type"); // 2 } actions = { @@ -94,29 +87,6 @@ control Acl (inout parsed_headers_t hdr, } apply { - if (hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()) { - ipv4_src = hdr.inner_ipv4.src_addr; - ipv4_dst = hdr.inner_ipv4.dst_addr; - ip_proto = hdr.inner_ipv4.protocol; - if (hdr.inner_tcp.isValid()) { - l4_sport = hdr.inner_tcp.sport; - l4_dport = hdr.inner_tcp.dport; - } else if (hdr.inner_udp.isValid()) { - l4_sport = hdr.inner_udp.sport; - l4_dport = hdr.inner_udp.dport; - } - } else if (hdr.ipv4.isValid()) { - ipv4_src = hdr.ipv4.src_addr; - ipv4_dst = hdr.ipv4.dst_addr; - ip_proto = hdr.ipv4.protocol; - if (hdr.tcp.isValid()) { - l4_sport = hdr.tcp.sport; - l4_dport = hdr.tcp.dport; - } else if (hdr.udp.isValid()) { - l4_sport = hdr.udp.sport; - l4_dport = hdr.udp.dport; - } - } acl.apply(); } } diff --git a/pipelines/fabric/impl/src/main/resources/include/control/lookup_md_init.p4 b/pipelines/fabric/impl/src/main/resources/include/control/lookup_md_init.p4 new file mode 100644 index 00000000000..c672bc97f30 --- /dev/null +++ b/pipelines/fabric/impl/src/main/resources/include/control/lookup_md_init.p4 @@ -0,0 +1,66 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOOKUP__ +#define __LOOKUP__ + +control LookupMdInit (in parsed_headers_t hdr, + out lookup_metadata_t lkp_md) { + apply { + 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; + } + } + } +} + +#endif + diff --git a/pipelines/fabric/impl/src/main/resources/include/control/slicing.p4 b/pipelines/fabric/impl/src/main/resources/include/control/slicing.p4 new file mode 100644 index 00000000000..87d887a548e --- /dev/null +++ b/pipelines/fabric/impl/src/main/resources/include/control/slicing.p4 @@ -0,0 +1,165 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __SLICING__ +#define __SLICING__ + +// ACL-like classification, maps lookup metadata to slice_id and tc. For UE +// traffic, values can be overriden later by the SPGW PDR tables. +// To apply the same slicing and QoS treatment end-to-end, we use the IPv4 DSCP +// field to piggyback slice_id and tc (see EgressDscpRewriter). This is +// especially important for UE traffic, where classification based on PDRs can +// only happen at the ingress leaf switch (implementing the UPF function). +// As such, for traffic coming from selected ports, we allow trusting the +// slice_id and tc values carried in the dscp. +control IngressSliceTcClassifier (in parsed_headers_t hdr, + inout fabric_metadata_t fabric_md, + in standard_metadata_t standard_metadata) { + + 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; + classifier_stats.count(); + } + + // Should be used only for infrastructure ports (leaf-leaf, or leaf-spine), + // or ports facing servers that implement early classification based on the + // SDFAB DSCP encoding (slice_id++tc). + action trust_dscp() { + fabric_md.slice_id = hdr.ipv4.dscp[SLICE_ID_WIDTH+TC_WIDTH-1:TC_WIDTH]; + fabric_md.tc = hdr.ipv4.dscp[TC_WIDTH-1:0]; + classifier_stats.count(); + } + + table classifier { + key = { + standard_metadata.ingress_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; + } + const default_action = set_slice_id_tc(DEFAULT_SLICE_ID, DEFAULT_TC); + counters = classifier_stats; + size = QOS_CLASSIFIER_TABLE_SIZE; + } + + apply { + classifier.apply(); + } +} + +// Provides metering and mapping to queues based on slice_id and tc. Should be +// applied after any other block writing slice_id and tc. +control IngressQos (inout fabric_metadata_t fabric_md, + inout standard_metadata_t standard_metadata) { + + // One meter per tc per slice. The index should be slice_id++tc. + meter(1 << SLICE_TC_WIDTH, MeterType.bytes) slice_tc_meter; + + direct_counter(CounterType.packets) queues_stats; + + action set_queue(qid_t qid) { + // We can't set the queue id in bmv2. + queues_stats.count(); + } + + // For policing. + action meter_drop() { + mark_to_drop(standard_metadata); + queues_stats.count(); + } + + table queues { + key = { + fabric_md.slice_id: exact @name("slice_id"); + fabric_md.tc: exact @name("tc"); + fabric_md.packet_color: ternary @name("color"); // 0=GREEN, 1=YELLOW, 2=RED + } + actions = { + set_queue; + meter_drop; + } + const default_action = set_queue(0); // 0 = Best Effort + counters = queues_stats; + // Two times the number of tcs for all slices, because we might need to + // match on different colors for the same slice and tc. + size = 1 << (SLICE_TC_WIDTH + 1); + } + + slice_tc_t slice_tc = fabric_md.slice_id++fabric_md.tc; + + apply { + // Meter index should be 0 for all packets with default slice_id and tc. + slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); + fabric_md.dscp = slice_tc; + queues.apply(); + } +} + +// Allows per-egress port rewriting of the outermost IPv4 DSCP field to +// piggyback slice_id and tc across the fabric. +control EgressDscpRewriter (inout parsed_headers_t hdr, + in fabric_metadata_t fabric_md, + in standard_metadata_t standard_metadata) { + + bit<6> tmp_dscp = fabric_md.dscp; + + action rewrite() { + // Do nothing, tmp_dscp is already initialized. + } + + // Sets the DSCP field to zero. Should be used for edge ports facing devices + // that do not support the SDFAB DSCP encoding. + action clear() { + tmp_dscp = 0; + } + + table rewriter { + key = { + standard_metadata.egress_port : exact @name("eg_port"); + } + actions = { + rewrite; + clear; + @defaultonly nop; + } + const default_action = nop; + size = DSCP_REWRITER_TABLE_SIZE; + } + + apply { + if (rewriter.apply().hit) { +#ifdef WITH_SPGW + if (hdr.gtpu_ipv4.isValid()) { + hdr.ipv4.dscp = tmp_dscp; + } else +#endif // WITH_SPGW + if (hdr.ipv4.isValid()) { + hdr.inner_ipv4.dscp = tmp_dscp; + } + } + } +} + +#endif diff --git a/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 b/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 index adacd9a3ddb..6750dbd81b7 100644 --- a/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/control/spgw.p4 @@ -45,6 +45,8 @@ control DecapGtpu(inout parsed_headers_t hdr, hdr.ipv4 = hdr.inner_ipv4; hdr.inner_ipv4.setInvalid(); hdr.gtpu.setInvalid(); + hdr.gtpu_options.setInvalid(); + hdr.gtpu_ext_psc.setInvalid(); } @hidden action decap_inner_tcp() { @@ -115,10 +117,11 @@ control SpgwIngress(inout parsed_headers_t hdr, //===== Interface Tables ======// //=============================// - action load_iface(spgw_interface_t src_iface) { + action load_iface(spgw_interface_t src_iface, slice_id_t slice_id) { // Interface type can be access, core, from_dbuf (see InterfaceType enum) fabric_md.spgw.src_iface = src_iface; fabric_md.spgw.skip_spgw = _FALSE; + fabric_md.slice_id = slice_id; } action iface_miss() { fabric_md.spgw.src_iface = SPGW_IFACE_UNKNOWN; @@ -143,21 +146,26 @@ control SpgwIngress(inout parsed_headers_t hdr, //=============================// //===== PDR Tables ======// //=============================// - action load_pdr(pdr_ctr_id_t ctr_id, far_id_t far_id, - bit<1> needs_gtpu_decap) { + bit<1> needs_gtpu_decap, + tc_t tc) { fabric_md.spgw.ctr_id = ctr_id; fabric_md.spgw.far_id = far_id; fabric_md.spgw.needs_gtpu_decap = (_BOOL)needs_gtpu_decap; + fabric_md.tc = tc; } - action load_pdr_qos(pdr_ctr_id_t ctr_id, - far_id_t far_id, - bit<1> needs_gtpu_decap, - qid_t qid) { - load_pdr(ctr_id, far_id, needs_gtpu_decap); - // we cannot set the qid, since bmv2 does not support it + action load_pdr_qos(pdr_ctr_id_t ctr_id, + far_id_t far_id, + bit<1> needs_gtpu_decap, + // Used to push QFI, valid for 5G traffic only + bit<1> needs_qfi_push, + qfi_t qfi, + tc_t tc) { + load_pdr(ctr_id, far_id, needs_gtpu_decap, tc); + fabric_md.spgw.qfi = qfi; + fabric_md.spgw.needs_qfi_push = (_BOOL)needs_qfi_push; } // These two tables scale well and cover the average case PDR @@ -177,6 +185,10 @@ control SpgwIngress(inout parsed_headers_t hdr, key = { hdr.ipv4.dst_addr : exact @name("tunnel_ipv4_dst"); hdr.gtpu.teid : exact @name("teid"); + // Match valid only for 5G traffic + hdr.gtpu_ext_psc.isValid() : exact @name("has_qfi"); + // QFI metadata is 0 when gptu_ext_psc is invalid. + fabric_md.spgw.qfi : exact @name("qfi"); } actions = { load_pdr; @@ -294,7 +306,6 @@ control SpgwEgress( counter(MAX_PDR_COUNTERS, CounterType.packets_and_bytes) pdr_counter; - @hidden action gtpu_encap() { hdr.gtpu_ipv4.setValid(); @@ -320,7 +331,6 @@ control SpgwEgress( + (UDP_HDR_SIZE + GTP_HDR_SIZE); hdr.gtpu_udp.checksum = 0; // Updated later, if WITH_SPGW_UDP_CSUM_UPDATE - hdr.outer_gtpu.setValid(); hdr.outer_gtpu.version = GTP_V1; hdr.outer_gtpu.pt = GTP_PROTOCOL_TYPE_GTP; @@ -333,10 +343,35 @@ control SpgwEgress( hdr.outer_gtpu.teid = fabric_md.spgw.teid; } + @hidden + action gtpu_encap_qfi() { + gtpu_encap(); + hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len + + IPV4_HDR_SIZE + UDP_HDR_SIZE + GTP_HDR_SIZE + + GTPU_OPTIONS_HDR_BYTES + GTPU_EXT_PSC_HDR_BYTES; + hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len + + UDP_HDR_SIZE + GTP_HDR_SIZE + + GTPU_OPTIONS_HDR_BYTES + GTPU_EXT_PSC_HDR_BYTES; + hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len + + GTPU_OPTIONS_HDR_BYTES + GTPU_EXT_PSC_HDR_BYTES; + hdr.outer_gtpu.ex_flag = 1; + hdr.outer_gtpu_options.setValid(); + hdr.outer_gtpu_options.next_ext = GTPU_NEXT_EXT_PSC; + hdr.outer_gtpu_ext_psc.setValid(); + hdr.outer_gtpu_ext_psc.type = GTPU_EXT_PSC_TYPE_DL; + hdr.outer_gtpu_ext_psc.len = GTPU_EXT_PSC_LEN; + hdr.outer_gtpu_ext_psc.qfi = fabric_md.spgw.qfi; + hdr.outer_gtpu_ext_psc.next_ext = GTPU_NEXT_EXT_NONE; + } + apply { if (fabric_md.spgw.skip_spgw == _FALSE) { if (fabric_md.spgw.needs_gtpu_encap == _TRUE) { - gtpu_encap(); + if (fabric_md.spgw.needs_qfi_push == _TRUE) { + gtpu_encap_qfi(); + } else { + gtpu_encap(); + } } if (fabric_md.spgw.skip_egress_pdr_ctr == _FALSE) { pdr_counter.count(fabric_md.spgw.ctr_id); diff --git a/pipelines/fabric/impl/src/main/resources/include/define.p4 b/pipelines/fabric/impl/src/main/resources/include/define.p4 index 36a5ec76a2c..519d4541469 100644 --- a/pipelines/fabric/impl/src/main/resources/include/define.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/define.p4 @@ -73,10 +73,20 @@ #define UDP_HDR_SIZE 8 #define GTP_HDR_SIZE 8 +#define GTPU_OPTIONS_HDR_BYTES 4 +#define GTPU_EXT_PSC_HDR_BYTES 4 + #define UDP_PORT_GTPU 2152 #define GTP_GPDU 0xff #define GTP_V1 0x01 #define GTP_PROTOCOL_TYPE_GTP 0x01 +#define GTPU_NEXT_EXT_NONE 0x0 +#define GTPU_NEXT_EXT_PSC 0x85 +// 1*4-octets +#define GTPU_EXT_PSC_LEN 8w1 + +const bit<4> GTPU_EXT_PSC_TYPE_DL = 4w0; // Downlink +const bit<4> GTPU_EXT_PSC_TYPE_UL = 4w1; // Uplink #define PKT_INSTANCE_TYPE_NORMAL 0 #define PKT_INSTANCE_TYPE_INGRESS_CLONE 1 @@ -95,6 +105,12 @@ typedef bit<16> mcast_group_id_t; typedef bit<12> vlan_id_t; typedef bit<32> ipv4_addr_t; typedef bit<16> l4_port_t; +typedef bit slice_id_t; +typedef bit tc_t; // Traffic Class (for QoS) within a slice +typedef bit slice_tc_t; // Slice and TC identifier + +const slice_id_t DEFAULT_SLICE_ID = 0; +const tc_t DEFAULT_TC = 0; // SPGW types typedef bit<2> direction_t; @@ -105,6 +121,7 @@ typedef bit<32> pcc_rule_id_t; typedef bit<32> far_id_t; typedef bit<32> pdr_ctr_id_t; typedef bit<32> teid_t; +typedef bit<6> qfi_t; typedef bit<5> qid_t; const spgw_interface_t SPGW_IFACE_UNKNOWN = 8w0; diff --git a/pipelines/fabric/impl/src/main/resources/include/header.p4 b/pipelines/fabric/impl/src/main/resources/include/header.p4 index b76ea01f0a6..8e3537eed8f 100644 --- a/pipelines/fabric/impl/src/main/resources/include/header.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/header.p4 @@ -139,6 +139,25 @@ header gtpu_t { teid_t teid; /* tunnel endpoint id */ } +// Follows gtpu_t if any of ex_flag, seq_flag, or npdu_flag is 1. +header gtpu_options_t { + bit<16> seq_num; /* Sequence number */ + bit<8> n_pdu_num; /* N-PDU number */ + bit<8> next_ext; /* Next extension header */ +} + +// GTPU extension: PDU Session Container (PSC) -- 3GPP TS 38.415 version 15.2.0 +// https://www.etsi.org/deliver/etsi_ts/138400_138499/138415/15.02.00_60/ts_138415v150200p.pdf +header gtpu_ext_psc_t { + bit<8> len; /* Length in 4-octet units (common to all extensions) */ + bit<4> type; /* Uplink or downlink */ + bit<4> spare0; /* Reserved */ + bit<1> ppp; /* Paging Policy Presence (UL only, not supported) */ + bit<1> rqi; /* Reflective QoS Indicator (UL only) */ + qfi_t qfi; /* QoS Flow Identifier */ + bit<8> next_ext; +} + #ifdef WITH_SPGW struct spgw_meta_t { bit<16> ipv4_len; @@ -149,11 +168,13 @@ struct spgw_meta_t { pdr_ctr_id_t ctr_id; far_id_t far_id; spgw_interface_t src_iface; + qfi_t qfi; _BOOL skip_spgw; _BOOL notify_spgwc; _BOOL needs_gtpu_encap; _BOOL needs_gtpu_decap; _BOOL skip_egress_pdr_ctr; + _BOOL needs_qfi_push; } #endif // WITH_SPGW @@ -174,8 +195,25 @@ struct bng_meta_t { } #endif // WITH_BNG +// Used for table lookup. Initialized with the parsed headers, or 0 if invalid. +// Never updated by the pipe. When both outer and inner IPv4 headers are valid, +// this should always carry the inner ones. The assumption is that we terminate +// GTP tunnels in the fabric, so we are more interested in observing/blocking +// the inner flows. We might revisit this decision in the future. +struct lookup_metadata_t { + _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; +} + //Custom metadata definition struct fabric_metadata_t { + lookup_metadata_t lkp; bit<16> ip_eth_type; vlan_id_t vlan_id; bit<3> vlan_pri; @@ -199,6 +237,10 @@ struct fabric_metadata_t { bit<16> l4_dport; bit<32> ipv4_src_addr; bit<32> ipv4_dst_addr; + slice_id_t slice_id; + bit<2> packet_color; + tc_t tc; + bit<6> dscp; #ifdef WITH_SPGW bit<16> inner_l4_sport; bit<16> inner_l4_dport; @@ -228,8 +270,12 @@ struct parsed_headers_t { ipv4_t gtpu_ipv4; udp_t gtpu_udp; gtpu_t outer_gtpu; + gtpu_options_t outer_gtpu_options; + gtpu_ext_psc_t outer_gtpu_ext_psc; #endif // WITH_SPGW gtpu_t gtpu; + gtpu_options_t gtpu_options; + gtpu_ext_psc_t gtpu_ext_psc; ipv4_t inner_ipv4; udp_t inner_udp; tcp_t inner_tcp; diff --git a/pipelines/fabric/impl/src/main/resources/include/parser.p4 b/pipelines/fabric/impl/src/main/resources/include/parser.p4 index fb9e76448ad..0a77d4ce8c6 100644 --- a/pipelines/fabric/impl/src/main/resources/include/parser.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/parser.p4 @@ -200,7 +200,30 @@ parser FabricParser (packet_in packet, state parse_gtpu { packet.extract(hdr.gtpu); - transition parse_inner_ipv4; + transition select(hdr.gtpu.ex_flag, hdr.gtpu.seq_flag, hdr.gtpu.npdu_flag) { + (0, 0, 0): parse_inner_ipv4; + default: parse_gtpu_options; + } + } + + state parse_gtpu_options { + packet.extract(hdr.gtpu_options); + bit<8> gtpu_ext_len = packet.lookahead>(); + transition select(hdr.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.gtpu_ext_psc); +#ifdef WITH_SPGW + fabric_metadata.spgw.qfi = hdr.gtpu_ext_psc.qfi; +#endif // WITH_SPGW + transition select(hdr.gtpu_ext_psc.next_ext) { + GTPU_NEXT_EXT_NONE: parse_inner_ipv4; + default: accept; + } } state parse_inner_ipv4 { @@ -307,6 +330,8 @@ control FabricDeparser(packet_out packet,in parsed_headers_t hdr) { packet.emit(hdr.gtpu_ipv4); packet.emit(hdr.gtpu_udp); packet.emit(hdr.outer_gtpu); + packet.emit(hdr.outer_gtpu_options); + packet.emit(hdr.outer_gtpu_ext_psc); #endif // WITH_SPGW packet.emit(hdr.ipv4); #ifdef WITH_IPV6 @@ -317,6 +342,8 @@ control FabricDeparser(packet_out packet,in parsed_headers_t hdr) { packet.emit(hdr.icmp); // if we parsed a GTPU packet but did not decap it packet.emit(hdr.gtpu); + packet.emit(hdr.gtpu_options); + packet.emit(hdr.gtpu_ext_psc); packet.emit(hdr.inner_ipv4); packet.emit(hdr.inner_tcp); packet.emit(hdr.inner_udp); diff --git a/pipelines/fabric/impl/src/main/resources/include/size.p4 b/pipelines/fabric/impl/src/main/resources/include/size.p4 index caa8c1407c6..3a782f10183 100644 --- a/pipelines/fabric/impl/src/main/resources/include/size.p4 +++ b/pipelines/fabric/impl/src/main/resources/include/size.p4 @@ -25,5 +25,11 @@ #define HASHED_ACT_PROFILE_SIZE 32w1024 #define MULTICAST_NEXT_TABLE_SIZE 1024 #define EGRESS_VLAN_TABLE_SIZE 1024 +#define QOS_CLASSIFIER_TABLE_SIZE 512 +#define DSCP_REWRITER_TABLE_SIZE 512 + +#define SLICE_ID_WIDTH 4 +#define TC_WIDTH 2 +#define SLICE_TC_WIDTH (SLICE_ID_WIDTH + TC_WIDTH) #endif diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json index 19a3cd96fb9..2d265cb9c2e 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json @@ -7,6 +7,7 @@ ["tmp_0", 1, false], ["tmp_2", 3, false], ["tmp_4", 8, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -14,41 +15,50 @@ ["tmp_7", 64, false], ["tmp_8", 32, false], ["tmp_9", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], + ["tmp_10", 32, false], ["bng_ingress_upstream_hasReturned", 1, false], - ["userMetadata._ip_eth_type0", 16, false], - ["userMetadata._vlan_id1", 12, false], - ["userMetadata._vlan_pri2", 3, false], - ["userMetadata._vlan_cfi3", 1, false], - ["userMetadata._push_double_vlan4", 1, false], - ["userMetadata._inner_vlan_id5", 12, false], - ["userMetadata._inner_vlan_pri6", 3, false], - ["userMetadata._inner_vlan_cfi7", 1, false], - ["userMetadata._mpls_label8", 20, false], - ["userMetadata._mpls_ttl9", 8, false], - ["userMetadata._skip_forwarding10", 1, false], - ["userMetadata._skip_next11", 1, false], - ["userMetadata._fwd_type12", 3, false], - ["userMetadata._next_id13", 32, false], - ["userMetadata._is_multicast14", 1, false], - ["userMetadata._is_controller_packet_out15", 1, false], - ["userMetadata._ip_proto16", 8, false], - ["userMetadata._l4_sport17", 16, false], - ["userMetadata._l4_dport18", 16, false], - ["userMetadata._ipv4_src_addr19", 32, false], - ["userMetadata._ipv4_dst_addr20", 32, false], - ["userMetadata._bng_type21", 2, false], - ["userMetadata._bng_line_id22", 32, false], - ["userMetadata._bng_pppoe_session_id23", 16, false], - ["userMetadata._bng_ds_meter_result24", 32, false], - ["userMetadata._bng_s_tag25", 12, false], - ["userMetadata._bng_c_tag26", 12, false], - ["userMetadata._port_type27", 2, false], - ["_padding_0", 7, false] + ["dscp_rewriter_tmp_dscp", 6, false], + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._push_double_vlan12", 1, false], + ["userMetadata._inner_vlan_id13", 12, false], + ["userMetadata._inner_vlan_pri14", 3, false], + ["userMetadata._inner_vlan_cfi15", 1, false], + ["userMetadata._mpls_label16", 20, false], + ["userMetadata._mpls_ttl17", 8, false], + ["userMetadata._skip_forwarding18", 1, false], + ["userMetadata._skip_next19", 1, false], + ["userMetadata._fwd_type20", 3, false], + ["userMetadata._next_id21", 32, false], + ["userMetadata._is_multicast22", 1, false], + ["userMetadata._is_controller_packet_out23", 1, false], + ["userMetadata._ip_proto24", 8, false], + ["userMetadata._l4_sport25", 16, false], + ["userMetadata._l4_dport26", 16, false], + ["userMetadata._ipv4_src_addr27", 32, false], + ["userMetadata._ipv4_dst_addr28", 32, false], + ["userMetadata._slice_id29", 4, false], + ["userMetadata._packet_color30", 2, false], + ["userMetadata._tc31", 2, false], + ["userMetadata._dscp32", 6, false], + ["userMetadata._bng_type33", 2, false], + ["userMetadata._bng_line_id34", 32, false], + ["userMetadata._bng_pppoe_session_id35", 16, false], + ["userMetadata._bng_ds_meter_result36", 32, false], + ["userMetadata._bng_s_tag37", 12, false], + ["userMetadata._bng_c_tag38", 12, false], + ["userMetadata._port_type39", 2, false], + ["_padding_0", 2, false] ] }, { @@ -146,8 +156,30 @@ ] }, { - "name" : "ipv4_t", + "name" : "gtpu_options_t", "id" : 9, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 10, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "ipv4_t", + "id" : 11, "fields" : [ ["version", 4, false], ["ihl", 4, false], @@ -166,7 +198,7 @@ }, { "name" : "udp_t", - "id" : 10, + "id" : 12, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -176,7 +208,7 @@ }, { "name" : "tcp_t", - "id" : 11, + "id" : 13, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -193,7 +225,7 @@ }, { "name" : "icmp_t", - "id" : 12, + "id" : 14, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -205,7 +237,7 @@ }, { "name" : "packet_in_header_t", - "id" : 13, + "id" : 15, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -291,71 +323,85 @@ "pi_omit" : true }, { - "name" : "inner_ipv4", + "name" : "gtpu_options", "id" : 11, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 12, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_ipv4", + "id" : 13, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 12, + "id" : 14, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 13, + "id" : 15, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 14, + "id" : 16, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 15, + "id" : 17, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 16, + "id" : 18, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 17, + "id" : 19, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 18, + "id" : 20, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 19, + "id" : 21, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 20, + "id" : 22, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true @@ -371,7 +417,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -706,7 +752,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -779,7 +825,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_s_tag25"] + "value" : ["scalars", "userMetadata._bng_s_tag37"] }, { "type" : "field", @@ -840,7 +886,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_c_tag26"] + "value" : ["scalars", "userMetadata._bng_c_tag38"] }, { "type" : "field", @@ -971,7 +1017,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "field", @@ -984,7 +1030,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "value" : ["scalars", "userMetadata._mpls_ttl17"] }, { "type" : "field", @@ -1045,7 +1091,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -1058,7 +1104,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -1071,7 +1117,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -1084,7 +1130,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -1144,7 +1190,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", @@ -1157,7 +1203,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", @@ -1194,7 +1240,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", @@ -1207,7 +1253,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", @@ -1795,7 +1841,128 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 17, + "parser_ops" : [ { "parameters" : [ { @@ -1841,7 +2008,7 @@ }, { "name" : "parse_inner_udp", - "id" : 15, + "id" : 18, "parser_ops" : [ { "parameters" : [ @@ -1865,7 +2032,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -1889,7 +2056,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 17, + "id" : 20, "parser_ops" : [ { "parameters" : [ @@ -1921,11 +2088,11 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "pppoe", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], + "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "pppoe", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], "primitives" : [] } ], @@ -1957,6 +2124,20 @@ "size" : 8192, "rate_count" : 2, "type" : "bytes" + }, + { + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 2, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" } ], "counter_arrays" : [ @@ -2087,7 +2268,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -2117,8 +2298,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 13, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 14, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 15, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -2130,7 +2335,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 14, + "id" : 16, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -2142,7 +2347,7 @@ }, { "name" : "FabricEgress.bng_egress.downstream.c_line_tx", - "id" : 15, + "id" : 17, "source_info" : { "filename" : "include/bng.p4", "line" : 267, @@ -2154,7 +2359,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 16, + "id" : 18, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2398,7 +2603,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { @@ -2420,7 +2625,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type21"] + "value" : ["scalars", "userMetadata._bng_type33"] }, { "type" : "hexstr", @@ -2429,7 +2634,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 184, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -2470,7 +2675,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -2499,7 +2704,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { @@ -2526,7 +2731,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type21"] + "value" : ["scalars", "userMetadata._bng_type33"] }, { "type" : "hexstr", @@ -2535,7 +2740,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 186, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -2545,7 +2750,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_pppoe_session_id23"] + "value" : ["scalars", "userMetadata._bng_pppoe_session_id35"] }, { "type" : "runtime_data", @@ -2568,7 +2773,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { @@ -2590,7 +2795,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type21"] + "value" : ["scalars", "userMetadata._bng_type33"] }, { "type" : "hexstr", @@ -2599,7 +2804,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 186, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -2613,7 +2818,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { @@ -2667,7 +2872,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._bng_line_id34"] }, { "type" : "runtime_data", @@ -2693,7 +2898,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] }, { "type" : "expression", @@ -2722,7 +2927,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -2751,7 +2956,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type27"] + "value" : ["scalars", "userMetadata._port_type39"] }, { "type" : "hexstr", @@ -2760,7 +2965,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -2782,7 +2987,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type27"] + "value" : ["scalars", "userMetadata._port_type39"] }, { "type" : "runtime_data", @@ -2817,7 +3022,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2836,7 +3041,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type27"] + "value" : ["scalars", "userMetadata._port_type39"] }, { "type" : "runtime_data", @@ -2867,7 +3072,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, { "type" : "runtime_data", @@ -2898,7 +3103,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -2929,7 +3134,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "hexstr", @@ -2948,7 +3153,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -2979,7 +3184,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -3016,7 +3221,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "runtime_data", @@ -3047,7 +3252,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -3082,7 +3287,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -3101,7 +3306,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._push_double_vlan4"] + "value" : ["scalars", "userMetadata._push_double_vlan12"] }, { "type" : "expression", @@ -3130,7 +3335,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "value" : ["scalars", "userMetadata._inner_vlan_id13"] }, { "type" : "runtime_data", @@ -3149,7 +3354,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_s_tag25"] + "value" : ["scalars", "userMetadata._bng_s_tag37"] }, { "type" : "runtime_data", @@ -3168,7 +3373,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_c_tag26"] + "value" : ["scalars", "userMetadata._bng_c_tag38"] }, { "type" : "runtime_data", @@ -3199,7 +3404,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -3208,8 +3413,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 32, + "line" : 32, + "column" : 26, "source_fragment" : "= next_id; ..." } } @@ -3234,7 +3439,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -3244,7 +3449,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -3263,8 +3468,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 34, + "line" : 39, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3294,7 +3499,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -3316,7 +3521,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -3326,7 +3531,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -3345,8 +3550,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 34, + "line" : 51, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3500,7 +3705,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast14"] + "value" : ["scalars", "userMetadata._is_multicast22"] }, { "type" : "expression", @@ -3527,152 +3732,186 @@ ] }, { - "name" : "packetio25", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 36, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._slice_id29"] }, { - "type" : "field", - "value" : ["packet_out", "egress_port"] + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_out" + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 37, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out15"] + "value" : ["scalars", "userMetadata._slice_id29"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x0f" + } + } + } } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 53, - "source_fragment" : "= true; ..." + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." } }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "filtering113", - "id" : 37, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._tc31"] }, { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 36, - "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 38, + "runtime_data" : [ { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] - }, - { - "type" : "field", - "value" : ["vlan_tag", "pri"] - } - ], - "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.pri; ..." - } - }, + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 39, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "mark_to_drop", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] - }, - { - "type" : "field", - "value" : ["vlan_tag", "cfi"] + "type" : "header", + "value" : "standard_metadata" } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.cfi; ..." + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" } } ] }, { - "name" : "filtering119", - "id" : 38, + "name" : "lookup_md_init37", + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -3680,18 +3919,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 119, - "column" : 42, - "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } }, { @@ -3699,70 +3938,70 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_pri6"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_vlan_tag", "pri"] + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 120, - "column" : 43, - "source_fragment" : "= hdr.inner_vlan_tag.pri; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } - }, + } + ] + }, + { + "name" : "lookup_md_init40", + "id" : 41, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_cfi7"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 121, - "column" : 43, - "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 39, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_udp", "dport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 37, - "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "acl102", - "id" : 40, + "name" : "lookup_md_init43", + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -3770,18 +4009,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } }, { @@ -3789,25 +4028,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "acl105", - "id" : 41, + "name" : "lookup_md_init32", + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -3815,18 +4054,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["inner_udp", "sport"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -3834,33 +4083,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] - }, - { - "type" : "field", - "value" : ["inner_udp", "dport"] - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" - } - } - ] - }, - { - "name" : "acl98", - "id" : 42, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", @@ -3868,10 +4091,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -3879,7 +4102,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", @@ -3887,10 +4110,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -3898,7 +4121,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", @@ -3906,17 +4129,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl113", - "id" : 43, + "name" : "lookup_md_init52", + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -3924,7 +4147,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3932,10 +4155,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -3943,7 +4166,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3951,17 +4174,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." } } ] }, { - "name" : "acl116", - "id" : 44, + "name" : "lookup_md_init55", + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -3969,7 +4192,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3977,10 +4200,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -3988,7 +4211,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3996,17 +4219,62 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl109", - "id" : 45, + "name" : "lookup_md_init58", + "id" : 46, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] + }, + { + "type" : "field", + "value" : ["icmp", "icmp_type"] + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] + }, + { + "type" : "field", + "value" : ["icmp", "icmp_code"] + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." + } + } + ] + }, + { + "name" : "lookup_md_init47", + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -4014,7 +4282,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", @@ -4022,10 +4319,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } }, { @@ -4033,7 +4330,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", @@ -4041,10 +4338,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -4052,7 +4349,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", @@ -4060,17 +4357,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "acl27", - "id" : 46, + "name" : "lookup_md_init23", + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -4078,7 +4375,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "hexstr", @@ -4086,10 +4412,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -4097,7 +4423,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "hexstr", @@ -4105,10 +4431,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -4116,7 +4442,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "hexstr", @@ -4124,10 +4450,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -4135,7 +4461,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "hexstr", @@ -4143,10 +4469,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 27, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -4154,7 +4480,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", @@ -4162,75 +4488,55 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 28, + "column" : 24, + "source_fragment" : "= 0; ..." } - } - ] - }, - { - "name" : "port_counter31", - "id" : 47, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_8"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_spec"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 38, - "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + "filename" : "include/control/lookup_md_init.p4", + "line" : 29, + "column" : 25, + "source_fragment" : "= 0; ..." } }, { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.egress_port_counter" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { - "type" : "field", - "value" : ["scalars", "tmp_8"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 30, + "column" : 25, + "source_fragment" : "= 0; ..." } } ] }, { - "name" : "port_counter34", - "id" : 48, + "name" : "packetio25", + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -4238,65 +4544,41 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_9"] + "value" : ["standard_metadata", "egress_spec"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "field", + "value" : ["packet_out", "egress_port"] } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 39, - "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" } }, { - "op" : "count", + "op" : "remove_header", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.ingress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_9"] + "type" : "header", + "value" : "packet_out" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, + "filename" : "include/control/packetio.p4", + "line" : 26, "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + "source_fragment" : "hdr.packet_out.setInvalid()" } - } - ] - }, - { - "name" : "bng126", - "id" : 49, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "bng_ingress_upstream_hasReturned"] + "value" : ["scalars", "userMetadata._is_controller_packet_out23"] }, { "type" : "expression", @@ -4314,16 +4596,26 @@ } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 126, + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 29, "column" : 12, - "source_fragment" : "return" + "source_fragment" : "exit" } } ] }, { - "name" : "bng342", + "name" : "filtering113", "id" : 50, "runtime_data" : [], "primitives" : [ @@ -4332,18 +4624,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type21"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/control/../header.p4", - "line" : 164, - "column" : 37, - "source_fragment" : "2w0x1; ..." + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." } }, { @@ -4351,115 +4643,44 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "bng_ingress_upstream_hasReturned"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } - } - ] - } - ] - }, - { - "name" : "bng131", - "id" : 51, - "runtime_data" : [], - "primitives" : [ - { - "op" : "count", - "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricIngress.bng_ingress.upstream.c_dropped" - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] - } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 131, - "column" : 20, - "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" - } - } - ] - }, - { - "name" : "bng238", - "id" : 52, - "runtime_data" : [], - "primitives" : [ - { - "op" : "execute_meter", - "parameters" : [ - { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_prio" - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._vlan_pri10"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result24"] + "value" : ["vlan_tag", "pri"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 238, - "column" : 24, - "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." } - } - ] - }, - { - "name" : "bng241", - "id" : 53, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "execute_meter", + "op" : "assign", "parameters" : [ - { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_besteff" - }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result24"] + "value" : ["vlan_tag", "cfi"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 241, - "column" : 24, - "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." } } ] }, { - "name" : "FabricEgress.bng_egress.downstream.encap_v4", - "id" : 54, + "name" : "filtering119", + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -4467,33 +4688,18 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["scalars", "userMetadata._inner_vlan_id13"] }, { - "type" : "hexstr", - "value" : "0x8864" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 136, - "column" : 33, - "source_fragment" : "0x8864; ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "pppoe" + "type" : "field", + "value" : ["inner_vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 273, - "column" : 8, - "source_fragment" : "hdr.pppoe.setValid()" + "filename" : "include/control/filtering.p4", + "line" : 119, + "column" : 42, + "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..." } }, { @@ -4501,18 +4707,18 @@ "parameters" : [ { "type" : "field", - "value" : ["pppoe", "version"] + "value" : ["scalars", "userMetadata._inner_vlan_pri14"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["inner_vlan_tag", "pri"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 274, - "column" : 8, - "source_fragment" : "hdr.pppoe.version = 4w1" + "filename" : "include/control/filtering.p4", + "line" : 120, + "column" : 43, + "source_fragment" : "= hdr.inner_vlan_tag.pri; ..." } }, { @@ -4520,56 +4726,83 @@ "parameters" : [ { "type" : "field", - "value" : ["pppoe", "type_id"] + "value" : ["scalars", "userMetadata._inner_vlan_cfi15"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["inner_vlan_tag", "cfi"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 275, - "column" : 8, - "source_fragment" : "hdr.pppoe.type_id = 4w1" + "filename" : "include/control/filtering.p4", + "line" : 121, + "column" : 43, + "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..." } - }, + } + ] + }, + { + "name" : "filtering129", + "id" : 52, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "code"] + "value" : ["scalars", "userMetadata._mpls_ttl17"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x41" } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 276, - "column" : 8, - "source_fragment" : "hdr.pppoe.code = 8w0" + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." } - }, + } + ] + }, + { + "name" : "port_counter31", + "id" : 53, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "session_id"] + "value" : ["scalars", "tmp_8"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_pppoe_session_id23"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 277, - "column" : 8, - "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" } }, { @@ -4577,26 +4810,33 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricEgress.bng_egress.downstream.c_line_tx" + "value" : "FabricIngress.port_counters_control.egress_port_counter" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id22"] + "value" : ["scalars", "tmp_8"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 278, - "column" : 8, - "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" } - }, + } + ] + }, + { + "name" : "port_counter34", + "id" : 54, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "length"] + "value" : ["scalars", "tmp_9"] }, { "type" : "expression", @@ -4605,160 +4845,92 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0002" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 283, - "column" : 8, - "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["pppoe", "protocol"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" }, { - "type" : "hexstr", - "value" : "0x0021" + "type" : "field", + "value" : ["scalars", "tmp_9"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 138, - "column" : 35, - "source_fragment" : "0x0021; ..." + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" } } ] }, { - "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "name" : "bng126", "id" : 55, "runtime_data" : [], "primitives" : [ - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "mpls" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 204, - "column" : 8, - "source_fragment" : "hdr.mpls.setInvalid()" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["scalars", "bng_ingress_upstream_hasReturned"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 206, - "column" : 8, - "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." + "filename" : "include/bng.p4", + "line" : 126, + "column" : 12, + "source_fragment" : "return" } } ] }, { - "name" : "FabricEgress.egress_next.set_mpls", + "name" : "bng342", "id" : 56, "runtime_data" : [], "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "mpls" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.mpls.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["mpls", "label"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 212, - "column" : 8, - "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["mpls", "tc"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 213, - "column" : 8, - "source_fragment" : "hdr.mpls.tc = 3w0" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["mpls", "bos"] + "value" : ["scalars", "userMetadata._bng_type33"] }, { "type" : "hexstr", @@ -4766,10 +4938,10 @@ } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 214, - "column" : 8, - "source_fragment" : "hdr.mpls.bos = 1w1" + "filename" : "include/control/../header.p4", + "line" : 185, + "column" : 37, + "source_fragment" : "2w0x1; ..." } }, { @@ -4777,157 +4949,230 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["scalars", "bng_ingress_upstream_hasReturned"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 215, - "column" : 8, - "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." - } - }, + ] + } + ] + }, + { + "name" : "bng131", + "id" : 57, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["eth_type", "value"] + "type" : "counter_array", + "value" : "FabricIngress.bng_ingress.upstream.c_dropped" }, { - "type" : "hexstr", - "value" : "0x8847" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 130, - "column" : 31, - "source_fragment" : "0x8847; ..." + "filename" : "include/bng.p4", + "line" : 131, + "column" : 20, + "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" } } ] }, { - "name" : "FabricEgress.egress_next.push_outer_vlan", - "id" : 57, + "name" : "bng238", + "id" : 58, "runtime_data" : [], "primitives" : [ { - "op" : "add_header", + "op" : "execute_meter", "parameters" : [ { - "type" : "header", - "value" : "vlan_tag" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_prio" + }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["scalars", "userMetadata._bng_line_id34"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._bng_ds_meter_result36"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "filename" : "include/bng.p4", + "line" : 238, + "column" : 24, + "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } - }, + } + ] + }, + { + "name" : "bng241", + "id" : 59, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "pri"] + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_besteff" }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["scalars", "userMetadata._bng_line_id34"] }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_ds_meter_result36"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/bng.p4", + "line" : 241, + "column" : 24, + "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } - }, + } + ] + }, + { + "name" : "slicing114", + "id" : 60, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["scalars", "tmp_10"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] - } + "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" : "field", + "value" : ["scalars", "userMetadata._slice_id29"] + }, + "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._tc31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.push_inner_vlan", - "id" : 58, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "execute_meter", "parameters" : [ { - "type" : "header", - "value" : "inner_vlan_tag" + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color30"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 234, + "filename" : "include/control/slicing.p4", + "line" : 114, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.setValid()" + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" } }, { @@ -4935,56 +5180,128 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] + "value" : ["scalars", "userMetadata._dscp32"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_cfi7"] + "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._slice_id29"] + }, + "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._tc31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 235, - "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." } - }, + } + ] + }, + { + "name" : "nop", + "id" : 61, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.bng_egress.downstream.encap_v4", + "id" : 62, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "pri"] + "value" : ["eth_type", "value"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_pri6"] + "type" : "hexstr", + "value" : "0x8864" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 236, - "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." + "filename" : "include/control/../define.p4", + "line" : 153, + "column" : 33, + "source_fragment" : "0x8864; ..." } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "type" : "header", + "value" : "pppoe" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 237, + "filename" : "include/bng.p4", + "line" : 273, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + "source_fragment" : "hdr.pppoe.setValid()" } }, { @@ -4992,18 +5309,18 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "eth_type"] + "value" : ["pppoe", "version"] }, { "type" : "hexstr", - "value" : "0x8100" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/bng.p4", + "line" : 274, + "column" : 8, + "source_fragment" : "hdr.pppoe.version = 4w1" } }, { @@ -5011,40 +5328,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["pppoe", "type_id"] }, { "type" : "hexstr", - "value" : "0x8100" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." - } - } - ] - }, - { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 59, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "vlan_tag" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, + "filename" : "include/bng.p4", + "line" : 275, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "source_fragment" : "hdr.pppoe.type_id = 4w1" } }, { @@ -5052,18 +5347,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["pppoe", "code"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, + "filename" : "include/bng.p4", + "line" : 276, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.pppoe.code = 8w0" } }, { @@ -5071,37 +5366,37 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["pppoe", "session_id"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._bng_pppoe_session_id35"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, + "filename" : "include/bng.p4", + "line" : 277, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "type" : "counter_array", + "value" : "FabricEgress.bng_egress.downstream.c_line_tx" }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_line_id34"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/bng.p4", + "line" : 278, + "column" : 8, + "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" } }, { @@ -5109,86 +5404,108 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["pppoe", "length"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0002" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, + "filename" : "include/bng.p4", + "line" : 283, "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 60, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "vlan_tag" + "type" : "field", + "value" : ["pppoe", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x0021" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 256, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.setInvalid()" + "filename" : "include/control/../define.p4", + "line" : 155, + "column" : 35, + "source_fragment" : "0x0021; ..." } } ] }, { - "name" : "FabricEgress.egress_next.drop", - "id" : 61, + "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "id" : 63, "runtime_data" : [], "primitives" : [ { - "op" : "mark_to_drop", + "op" : "remove_header", "parameters" : [ { "type" : "header", - "value" : "standard_metadata" + "value" : "mpls" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 261, + "line" : 204, "column" : 8, - "source_fragment" : "mark_to_drop(standard_metadata)" + "source_fragment" : "hdr.mpls.setInvalid()" } - } - ] - }, - { - "name" : "packetio41", - "id" : 62, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "exit", - "parameters" : [], + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["eth_type", "value"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_eth_type8"] + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 41, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/next.p4", + "line" : 206, + "column" : 8, + "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." } } ] }, { - "name" : "packetio44", - "id" : 63, + "name" : "FabricEgress.egress_next.set_mpls", + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -5196,14 +5513,14 @@ "parameters" : [ { "type" : "header", - "value" : "packet_in" + "value" : "mpls" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 44, - "column" : 12, - "source_fragment" : "hdr.packet_in.setValid()" + "filename" : "include/control/next.p4", + "line" : 211, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" } }, { @@ -5211,234 +5528,1070 @@ "parameters" : [ { "type" : "field", - "value" : ["packet_in", "ingress_port"] + "value" : ["mpls", "label"] }, { "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "value" : ["scalars", "userMetadata._mpls_label16"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 45, - "column" : 12, - "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + "filename" : "include/control/next.p4", + "line" : 212, + "column" : 8, + "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." } }, { - "op" : "exit", - "parameters" : [], + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 47, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/next.p4", + "line" : 213, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = 3w0" } - } - ] - }, - { - "name" : "next283", - "id" : 64, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 283, - "column" : 12, - "source_fragment" : "mark_to_drop(standard_metadata)" + "line" : 214, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" } - } - ] - }, - { - "name" : "next299", - "id" : 65, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_vlan_tag" + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl17"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 299, - "column" : 12, - "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" + "line" : 215, + "column" : 8, + "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["eth_type", "value"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 147, + "column" : 31, + "source_fragment" : "0x8847; ..." } } ] }, { - "name" : "next310", - "id" : 66, + "name" : "FabricEgress.egress_next.push_outer_vlan", + "id" : 65, "runtime_data" : [], "primitives" : [ { - "op" : "mark_to_drop", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "standard_metadata" + "value" : "vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 310, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" + "line" : 223, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setValid()" } - } - ] - }, - { - "name" : "next309", - "id" : 67, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["vlan_tag", "cfi"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["mpls", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 309, - "column" : 12, - "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + "line" : 224, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 225, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 227, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." } } ] }, { - "name" : "next314", - "id" : 68, + "name" : "FabricEgress.egress_next.push_inner_vlan", + "id" : 66, "runtime_data" : [], "primitives" : [ { - "op" : "mark_to_drop", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "standard_metadata" + "value" : "inner_vlan_tag" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 314, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" + "line" : 234, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "cfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._inner_vlan_cfi15"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 235, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "pri"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._inner_vlan_pri14"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 236, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._inner_vlan_id13"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 237, + "column" : 8, + "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_vlan_tag", "eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } } ] }, { - "name" : "next313", - "id" : 69, + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 67, "runtime_data" : [], "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 223, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setValid()" + } + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "ttl"] + "value" : ["vlan_tag", "cfi"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + "line" : 224, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } - } - ] - } - ], - "pipelines" : [ - { - "name" : "ingress", - "id" : 0, - "source_info" : { - "filename" : "fabric.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "FabricIngress" - }, - "init_table" : "node_2", - "tables" : [ + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 225, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 227, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 256, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 261, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 70, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 71, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 135, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, + { + "name" : "packetio41", + "id" : 72, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio44", + "id" : 73, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 45, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 47, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "next283", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 283, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next299", + "id" : 75, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 299, + "column" : 12, + "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "next310", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 310, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next309", + "id" : 77, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 309, + "column" : 12, + "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + } + } + ] + }, + { + "name" : "next314", + "id" : 78, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 314, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next313", + "id" : 79, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 313, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "slicing159", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp32"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] + } + ], + "pipelines" : [ + { + "name" : "ingress", + "id" : 0, + "source_info" : { + "filename" : "fabric.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "FabricIngress" + }, + "init_table" : "tbl_lookup_md_init23", + "tables" : [ + { + "name" : "tbl_lookup_md_init23", + "id" : 0, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "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" : [48], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", + "next_tables" : { + "lookup_md_init23" : "node_3" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init32", + "id" : 1, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "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" : [43], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", + "next_tables" : { + "lookup_md_init32" : "node_5" + }, + "default_entry" : { + "action_id" : 43, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init37", + "id" : 2, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "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" : [40], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init37" : "node_19" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init40", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "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" : [41], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init40" : "node_19" + }, + "default_entry" : { + "action_id" : 41, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init43", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "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" : [42], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init43" : "node_19" + }, + "default_entry" : { + "action_id" : 42, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init47", + "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "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" : [47], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", + "next_tables" : { + "lookup_md_init47" : "node_13" + }, + "default_entry" : { + "action_id" : 47, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init52", + "id" : 6, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "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" : [44], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init52" : "node_19" + }, + "default_entry" : { + "action_id" : 44, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init55", + "id" : 7, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "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" : [45], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init55" : "node_19" + }, + "default_entry" : { + "action_id" : 45, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init58", + "id" : 8, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "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" : [46], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init58" : "node_19" + }, + "default_entry" : { + "action_id" : 46, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, { "name" : "tbl_packetio25", - "id" : 0, + "id" : 9, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 25, @@ -5448,26 +6601,93 @@ "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [49], + "actions" : ["packetio25"], + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", + "next_tables" : { + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" + }, + "default_entry" : { + "action_id" : 49, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 49, + "column" : 10, + "source_fragment" : "classifier" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 512, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36], - "actions" : ["packetio25"], - "base_default_next" : "node_4", + "action_ids" : [36, 37], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", "next_tables" : { - "packetio25" : "node_4" + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" }, "default_entry" : { "action_id" : 36, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_filtering113", - "id" : 1, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -5481,14 +6701,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [37], + "action_ids" : [50], "actions" : ["filtering113"], - "base_default_next" : "node_6", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_6" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 37, + "action_id" : 50, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5496,7 +6716,7 @@ }, { "name" : "tbl_filtering119", - "id" : 2, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 119, @@ -5510,14 +6730,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], + "action_ids" : [51], "actions" : ["filtering119"], - "base_default_next" : "node_8", + "base_default_next" : "node_26", "next_tables" : { - "filtering119" : "node_8" + "filtering119" : "node_26" }, "default_entry" : { - "action_id" : 38, + "action_id" : 51, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5525,7 +6745,7 @@ }, { "name" : "tbl_filtering129", - "id" : 3, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -5539,14 +6759,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39], + "action_ids" : [52], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 39, + "action_id" : 52, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5554,7 +6774,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 4, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -5610,7 +6830,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 5, + "id" : 15, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -5639,7 +6859,7 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata._ip_eth_type0"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], "mask" : null } ], @@ -5651,9 +6871,9 @@ "direct_meters" : null, "action_ids" : [20], "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_12", + "base_default_next" : "node_30", "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_12" + "FabricIngress.filtering.set_forwarding_type" : "node_30" }, "default_entry" : { "action_id" : 20, @@ -5664,7 +6884,7 @@ }, { "name" : "FabricIngress.forwarding.bridging", - "id" : 6, + "id" : 16, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 46, @@ -5673,386 +6893,183 @@ }, "key" : [ { - "match_type" : "exact", - "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], - "mask" : null - }, - { - "match_type" : "ternary", - "name" : "eth_dst", - "target" : ["ethernet", "dst_addr"], - "mask" : null - } - ], - "match_type" : "ternary", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [21, 2], - "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_19", - "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_19", - "nop" : "node_19" - }, - "default_entry" : { - "action_id" : 2, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.forwarding.mpls", - "id" : 7, - "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 71, - "column" : 10, - "source_fragment" : "mpls" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "mpls_label", - "target" : ["scalars", "userMetadata._mpls_label8"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [22, 3], - "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_19", - "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_19", - "nop" : "node_19" - }, - "default_entry" : { - "action_id" : 3, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.forwarding.routing_v4", - "id" : 8, - "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 108, - "column" : 10, - "source_fragment" : "routing_v4" - }, - "key" : [ - { - "match_type" : "lpm", - "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata._ipv4_dst_addr20"], - "mask" : null - } - ], - "match_type" : "lpm", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [23, 24, 4], - "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_19", - "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_19", - "FabricIngress.forwarding.nop_routing_v4" : "node_19", - "nop" : "node_19" - }, - "default_entry" : { - "action_id" : 4, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "FabricIngress.pre_next.next_mpls", - "id" : 9, - "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 36, - "column" : 10, - "source_fragment" : "next_mpls" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [25, 5], - "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" : 5, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.pre_next.next_vlan", - "id" : 10, - "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 73, - "column" : 10, - "source_fragment" : "next_vlan" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [26, 27, 6], - "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"], - "base_default_next" : "tbl_acl27", - "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "FabricIngress.pre_next.set_double_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" - }, - "default_entry" : { - "action_id" : 6, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl27", - "id" : 11, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [46], - "actions" : ["acl27"], - "base_default_next" : "node_23", - "next_tables" : { - "acl27" : "node_23" - }, - "default_entry" : { - "action_id" : 46, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl98", - "id" : 12, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [42], - "actions" : ["acl98"], - "base_default_next" : "node_25", - "next_tables" : { - "acl98" : "node_25" - }, - "default_entry" : { - "action_id" : 42, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl102", - "id" : 13, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "source_fragment" : "= hdr.inner_tcp.sport; ..." - }, - "key" : [], - "match_type" : "exact", + "match_type" : "exact", + "name" : "vlan_id", + "target" : ["scalars", "userMetadata._vlan_id9"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "eth_dst", + "target" : ["ethernet", "dst_addr"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [21, 2], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], + "base_default_next" : "node_37", "next_tables" : { - "acl102" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.set_next_id_bridging" : "node_37", + "nop" : "node_37" }, "default_entry" : { - "action_id" : 40, + "action_id" : 2, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl105", - "id" : 14, + "name" : "FabricIngress.forwarding.mpls", + "id" : 17, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "source_fragment" : "= hdr.inner_udp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 71, + "column" : 10, + "source_fragment" : "mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "mpls_label", + "target" : ["scalars", "userMetadata._mpls_label16"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [22, 3], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], + "base_default_next" : "node_37", "next_tables" : { - "acl105" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_37", + "nop" : "node_37" }, "default_entry" : { - "action_id" : 41, + "action_id" : 3, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl109", - "id" : 15, + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 18, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." + "filename" : "include/control/forwarding.p4", + "line" : 108, + "column" : 10, + "source_fragment" : "routing_v4" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._ipv4_dst_addr28"], + "mask" : null + } + ], + "match_type" : "lpm", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], - "actions" : ["acl109"], - "base_default_next" : "node_31", + "action_ids" : [23, 24, 4], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], + "base_default_next" : "node_37", "next_tables" : { - "acl109" : "node_31" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_37", + "FabricIngress.forwarding.nop_routing_v4" : "node_37", + "nop" : "node_37" }, "default_entry" : { - "action_id" : 45, - "action_const" : true, + "action_id" : 4, + "action_const" : false, "action_data" : [], - "action_entry_const" : true + "action_entry_const" : false } }, { - "name" : "tbl_acl113", - "id" : 16, + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 19, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "source_fragment" : "= hdr.tcp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 36, + "column" : 10, + "source_fragment" : "next_mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id21"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [25, 5], + "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], + "base_default_next" : "FabricIngress.pre_next.next_vlan", "next_tables" : { - "acl113" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", + "nop" : "FabricIngress.pre_next.next_vlan" }, "default_entry" : { - "action_id" : 43, + "action_id" : 5, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl116", - "id" : 17, + "name" : "FabricIngress.pre_next.next_vlan", + "id" : 20, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "source_fragment" : "= hdr.udp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 73, + "column" : 10, + "source_fragment" : "next_vlan" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id21"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [44], - "actions" : ["acl116"], + "action_ids" : [26, 27, 6], + "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "FabricIngress.pre_next.set_double_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 44, + "action_id" : 6, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6060,10 +7077,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 18, + "id" : 21, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -6101,19 +7118,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -6131,19 +7148,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata._port_type27"], + "target" : ["scalars", "userMetadata._port_type39"], "mask" : null } ], @@ -6155,13 +7172,13 @@ "direct_meters" : null, "action_ids" : [28, 29, 30, 31, 32], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_36", + "base_default_next" : "node_41", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_36", - "FabricIngress.acl.punt_to_cpu" : "node_36", - "FabricIngress.acl.set_clone_session_id" : "node_36", - "FabricIngress.acl.drop" : "node_36", - "FabricIngress.acl.nop_acl" : "node_36" + "FabricIngress.acl.set_next_id_acl" : "node_41", + "FabricIngress.acl.punt_to_cpu" : "node_41", + "FabricIngress.acl.set_clone_session_id" : "node_41", + "FabricIngress.acl.drop" : "node_41", + "FabricIngress.acl.nop_acl" : "node_41" }, "default_entry" : { "action_id" : 32, @@ -6172,7 +7189,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 19, + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -6183,7 +7200,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -6205,7 +7222,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 20, + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -6216,7 +7233,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -6228,10 +7245,10 @@ "direct_meters" : null, "action_ids" : [35, 8], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_39", + "base_default_next" : "node_44", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_39", - "nop" : "node_39" + "FabricIngress.next.set_mcast_group_id" : "node_44", + "nop" : "node_44" }, "default_entry" : { "action_id" : 8, @@ -6242,7 +7259,7 @@ }, { "name" : "tbl_port_counter31", - "id" : 21, + "id" : 24, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 31, @@ -6256,14 +7273,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], + "action_ids" : [53], "actions" : ["port_counter31"], - "base_default_next" : "node_41", + "base_default_next" : "node_46", "next_tables" : { - "port_counter31" : "node_41" + "port_counter31" : "node_46" }, "default_entry" : { - "action_id" : 47, + "action_id" : 53, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6271,7 +7288,7 @@ }, { "name" : "tbl_port_counter34", - "id" : 22, + "id" : 25, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 34, @@ -6285,14 +7302,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], + "action_ids" : [54], "actions" : ["port_counter34"], "base_default_next" : "FabricIngress.bng_ingress.t_line_map", "next_tables" : { "port_counter34" : "FabricIngress.bng_ingress.t_line_map" }, "default_entry" : { - "action_id" : 48, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6300,7 +7317,7 @@ }, { "name" : "FabricIngress.bng_ingress.t_line_map", - "id" : 23, + "id" : 26, "source_info" : { "filename" : "include/bng.p4", "line" : 323, @@ -6311,13 +7328,13 @@ { "match_type" : "exact", "name" : "s_tag", - "target" : ["scalars", "userMetadata._bng_s_tag25"], + "target" : ["scalars", "userMetadata._bng_s_tag37"], "mask" : null }, { "match_type" : "exact", "name" : "c_tag", - "target" : ["scalars", "userMetadata._bng_c_tag26"], + "target" : ["scalars", "userMetadata._bng_c_tag38"], "mask" : null } ], @@ -6329,9 +7346,9 @@ "direct_meters" : null, "action_ids" : [16], "actions" : ["FabricIngress.bng_ingress.set_line"], - "base_default_next" : "node_44", + "base_default_next" : "node_49", "next_tables" : { - "FabricIngress.bng_ingress.set_line" : "node_44" + "FabricIngress.bng_ingress.set_line" : "node_49" }, "default_entry" : { "action_id" : 16, @@ -6342,7 +7359,7 @@ }, { "name" : "tbl_bng342", - "id" : 24, + "id" : 27, "source_info" : { "filename" : "include/bng.p4", "line" : 342, @@ -6356,14 +7373,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], + "action_ids" : [56], "actions" : ["bng342"], "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp", "next_tables" : { "bng342" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp" }, "default_entry" : { - "action_id" : 50, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6371,7 +7388,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp", - "id" : 25, + "id" : 28, "source_info" : { "filename" : "include/bng.p4", "line" : 51, @@ -6403,7 +7420,7 @@ "base_default_next" : null, "next_tables" : { "__HIT__" : "tbl_bng126", - "__MISS__" : "node_48" + "__MISS__" : "node_53" }, "default_entry" : { "action_id" : 0, @@ -6414,7 +7431,7 @@ }, { "name" : "tbl_bng126", - "id" : 26, + "id" : 29, "source_info" : { "filename" : "include/bng.p4", "line" : 126, @@ -6428,14 +7445,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], + "action_ids" : [55], "actions" : ["bng126"], - "base_default_next" : "node_48", + "base_default_next" : "node_53", "next_tables" : { - "bng126" : "node_48" + "bng126" : "node_53" }, "default_entry" : { - "action_id" : 49, + "action_id" : 55, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6443,7 +7460,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4", - "id" : 27, + "id" : 30, "source_info" : { "filename" : "include/bng.p4", "line" : 87, @@ -6454,7 +7471,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id22"], + "target" : ["scalars", "userMetadata._bng_line_id34"], "mask" : null }, { @@ -6478,10 +7495,10 @@ "direct_meters" : null, "action_ids" : [11, 10], "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_bng131", - "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null + "FabricIngress.bng_ingress.upstream.term_enabled_v4" : "tbl_slicing114" }, "default_entry" : { "action_id" : 10, @@ -6492,7 +7509,7 @@ }, { "name" : "tbl_bng131", - "id" : 28, + "id" : 31, "source_info" : { "filename" : "include/bng.p4", "line" : 131, @@ -6506,14 +7523,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [57], "actions" : ["bng131"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng131" : null + "bng131" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 51, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6521,7 +7538,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map", - "id" : 29, + "id" : 32, "source_info" : { "filename" : "include/bng.p4", "line" : 169, @@ -6532,7 +7549,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id22"], + "target" : ["scalars", "userMetadata._bng_line_id34"], "mask" : null } ], @@ -6546,8 +7563,8 @@ "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"], "base_default_next" : null, "next_tables" : { - "__MISS__" : null, - "__HIT__" : "node_53" + "__HIT__" : "node_58", + "__MISS__" : "tbl_slicing114" }, "default_entry" : { "action_id" : 1, @@ -6558,7 +7575,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4", - "id" : 30, + "id" : 33, "source_info" : { "filename" : "include/bng.p4", "line" : 194, @@ -6569,7 +7586,7 @@ { "match_type" : "ternary", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id22"], + "target" : ["scalars", "userMetadata._bng_line_id34"], "mask" : null }, { @@ -6599,7 +7616,7 @@ "direct_meters" : null, "action_ids" : [14, 15], "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_bng238", "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng241" @@ -6613,7 +7630,7 @@ }, { "name" : "tbl_bng238", - "id" : 31, + "id" : 34, "source_info" : { "filename" : "include/bng.p4", "line" : 238, @@ -6627,14 +7644,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [52], + "action_ids" : [58], "actions" : ["bng238"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng238" : null + "bng238" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 52, + "action_id" : 58, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -6642,7 +7659,7 @@ }, { "name" : "tbl_bng241", - "id" : 32, + "id" : 35, "source_info" : { "filename" : "include/bng.p4", "line" : 241, @@ -6656,18 +7673,96 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], + "action_ids" : [59], "actions" : ["bng241"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng241" : null + "bng241" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 53, + "action_id" : 59, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing114", + "id" : 36, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [60], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing114" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 60, "action_const" : true, "action_data" : [], "action_entry_const" : true } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 37, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 93, + "column" : 10, + "source_fragment" : "queues" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id29"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc31"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color30"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [38, 39], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], + "base_default_next" : null, + "next_tables" : { + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null + }, + "default_entry" : { + "action_id" : 38, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } } ], "action_profiles" : [ @@ -6686,23 +7781,23 @@ "input" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] } ] } @@ -6710,13 +7805,13 @@ ], "conditionals" : [ { - "name" : "node_2", + "name" : "node_3", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 24, + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, "column" : 12, - "source_fragment" : "hdr.packet_out.isValid()" + "source_fragment" : "hdr.inner_ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -6725,21 +7820,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["packet_out", "$valid$"] + "value" : ["inner_ipv4", "$valid$"] } } }, - "true_next" : "tbl_packetio25", - "false_next" : "node_4" + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" }, { - "name" : "node_4", + "name" : "node_5", "id" : 1, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 112, - "column" : 12, - "source_fragment" : "hdr.vlan_tag.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, + "column" : 16, + "source_fragment" : "hdr.inner_tcp.isValid()" }, "expression" : { "type" : "expression", @@ -6748,21 +7843,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["vlan_tag", "$valid$"] + "value" : ["inner_tcp", "$valid$"] } } }, - "true_next" : "tbl_filtering113", - "false_next" : "node_6" + "true_next" : "tbl_lookup_md_init37", + "false_next" : "node_7" }, { - "name" : "node_6", + "name" : "node_7", "id" : 2, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 118, - "column" : 12, - "source_fragment" : "hdr.inner_vlan_tag.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" }, "expression" : { "type" : "expression", @@ -6771,229 +7866,182 @@ "left" : null, "right" : { "type" : "field", - "value" : ["inner_vlan_tag", "$valid$"] + "value" : ["inner_udp", "$valid$"] } } }, - "true_next" : "tbl_filtering119", - "false_next" : "node_8" + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" }, { - "name" : "node_8", + "name" : "node_9", "id" : 3, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 124, - "column" : 12, - "source_fragment" : "!hdr.mpls.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["mpls", "$valid$"] - } - } + "type" : "field", + "value" : ["inner_icmp", "$valid$"] } } }, - "true_next" : "tbl_filtering129", - "false_next" : "FabricIngress.filtering.ingress_port_vlan" + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" }, { - "name" : "node_12", + "name" : "node_11", "id" : 4, "source_info" : { - "filename" : "fabric.p4", - "line" : 71, - "column" : 12, - "source_fragment" : "fabric_metadata.skip_forwarding" + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] - } - } + "type" : "field", + "value" : ["ipv4", "$valid$"] } } }, - "true_next" : "node_13", + "true_next" : "tbl_lookup_md_init47", "false_next" : "node_19" }, { "name" : "node_13", "id" : 5, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 150, - "column" : 12, - "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["tcp", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.bridging", + "true_next" : "tbl_lookup_md_init52", "false_next" : "node_15" }, { "name" : "node_15", "id" : 6, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 151, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["udp", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.mpls", + "true_next" : "tbl_lookup_md_init55", "false_next" : "node_17" }, { "name" : "node_17", "id" : 7, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 152, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x02" + "type" : "field", + "value" : ["icmp", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.routing_v4", + "true_next" : "tbl_lookup_md_init58", "false_next" : "node_19" }, { "name" : "node_19", "id" : 8, "source_info" : { - "filename" : "fabric.p4", - "line" : 74, + "filename" : "include/control/packetio.p4", + "line" : 24, "column" : 12, - "source_fragment" : "fabric_metadata.skip_next" + "source_fragment" : "hdr.packet_out.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] - } - } + "type" : "field", + "value" : ["packet_out", "$valid$"] } } }, - "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" + "true_next" : "tbl_packetio25", + "false_next" : "FabricIngress.slice_tc_classifier.classifier" }, { - "name" : "node_23", + "name" : "node_22", "id" : 9, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, + "filename" : "include/control/filtering.p4", + "line" : 112, "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" + "source_fragment" : "hdr.vlan_tag.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_ipv4", "$valid$"] - } - } + "type" : "field", + "value" : ["vlan_tag", "$valid$"] } } }, - "true_next" : "tbl_acl98", - "false_next" : "node_29" + "true_next" : "tbl_filtering113", + "false_next" : "node_24" }, { - "name" : "node_25", + "name" : "node_24", "id" : 10, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" + "filename" : "include/control/filtering.p4", + "line" : 118, + "column" : 12, + "source_fragment" : "hdr.inner_vlan_tag.isValid()" }, "expression" : { "type" : "expression", @@ -7002,111 +8050,187 @@ "left" : null, "right" : { "type" : "field", - "value" : ["inner_tcp", "$valid$"] + "value" : ["inner_vlan_tag", "$valid$"] } } }, - "true_next" : "tbl_acl102", - "false_next" : "node_27" + "true_next" : "tbl_filtering119", + "false_next" : "node_26" }, { - "name" : "node_27", + "name" : "node_26", "id" : 11, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" + "filename" : "include/control/filtering.p4", + "line" : 124, + "column" : 12, + "source_fragment" : "!hdr.mpls.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["inner_udp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["mpls", "$valid$"] + } + } } } }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "tbl_filtering129", + "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { - "name" : "node_29", + "name" : "node_30", "id" : 12, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" + "filename" : "fabric.p4", + "line" : 80, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_forwarding" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_forwarding18"] + } + } + } + } + }, + "true_next" : "node_31", + "false_next" : "node_37" + }, + { + "name" : "node_31", + "id" : 13, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 150, + "column" : 12, + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._fwd_type20"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_33" + }, + { + "name" : "node_33", + "id" : 14, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 151, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["ipv4", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type20"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" } } }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_35" }, { - "name" : "node_31", - "id" : 13, + "name" : "node_35", + "id" : 15, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["tcp", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type20"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" } } }, - "true_next" : "tbl_acl113", - "false_next" : "node_33" + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "node_37" }, { - "name" : "node_33", - "id" : 14, + "name" : "node_37", + "id" : 16, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" + "filename" : "fabric.p4", + "line" : 83, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_next" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_next19"] + } + } } } }, - "true_next" : "tbl_acl116", + "true_next" : "FabricIngress.pre_next.next_mpls", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_36", - "id" : 15, + "name" : "node_41", + "id" : 17, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -7122,7 +8246,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] } } } @@ -7132,8 +8256,8 @@ "false_next" : "FabricIngress.bng_ingress.t_line_map" }, { - "name" : "node_39", - "id" : 16, + "name" : "node_44", + "id" : 18, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -7155,11 +8279,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_41" + "false_next" : "node_46" }, { - "name" : "node_41", - "id" : 17, + "name" : "node_46", + "id" : 19, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -7184,8 +8308,8 @@ "false_next" : "FabricIngress.bng_ingress.t_line_map" }, { - "name" : "node_44", - "id" : 18, + "name" : "node_49", + "id" : 20, "source_info" : { "filename" : "include/bng.p4", "line" : 341, @@ -7207,8 +8331,8 @@ "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map" }, { - "name" : "node_48", - "id" : 19, + "name" : "node_53", + "id" : 21, "expression" : { "type" : "expression", "value" : { @@ -7227,12 +8351,12 @@ } } }, - "false_next" : null, - "true_next" : "node_49" + "true_next" : "node_54", + "false_next" : "tbl_slicing114" }, { - "name" : "node_49", - "id" : 20, + "name" : "node_54", + "id" : 22, "source_info" : { "filename" : "include/bng.p4", "line" : 128, @@ -7250,12 +8374,12 @@ } } }, - "false_next" : null, - "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4" + "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4", + "false_next" : "tbl_slicing114" }, { - "name" : "node_53", - "id" : 21, + "name" : "node_58", + "id" : 23, "source_info" : { "filename" : "include/bng.p4", "line" : 235, @@ -7273,8 +8397,8 @@ } } }, - "false_next" : null, - "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4" + "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4", + "false_next" : "tbl_slicing114" } ] }, @@ -7283,15 +8407,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_59", + "init_table" : "node_66", "tables" : [ { "name" : "tbl_packetio41", - "id" : 33, + "id" : 38, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -7305,14 +8429,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], + "action_ids" : [72], "actions" : ["packetio41"], - "base_default_next" : "node_61", + "base_default_next" : "node_68", "next_tables" : { - "packetio41" : "node_61" + "packetio41" : "node_68" }, "default_entry" : { - "action_id" : 62, + "action_id" : 72, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7320,7 +8444,7 @@ }, { "name" : "tbl_packetio44", - "id" : 34, + "id" : 39, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -7334,14 +8458,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63], + "action_ids" : [73], "actions" : ["packetio44"], - "base_default_next" : "node_63", + "base_default_next" : "node_70", "next_tables" : { - "packetio44" : "node_63" + "packetio44" : "node_70" }, "default_entry" : { - "action_id" : 63, + "action_id" : 73, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7349,7 +8473,7 @@ }, { "name" : "tbl_next283", - "id" : 35, + "id" : 40, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -7363,14 +8487,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [64], + "action_ids" : [74], "actions" : ["next283"], - "base_default_next" : "node_65", + "base_default_next" : "node_72", "next_tables" : { - "next283" : "node_65" + "next283" : "node_72" }, "default_entry" : { - "action_id" : 64, + "action_id" : 74, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7378,7 +8502,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 36, + "id" : 41, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -7392,14 +8516,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], + "action_ids" : [63], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], - "base_default_next" : "node_69", + "base_default_next" : "node_76", "next_tables" : { - "FabricEgress.egress_next.pop_mpls_if_present" : "node_69" + "FabricEgress.egress_next.pop_mpls_if_present" : "node_76" }, "default_entry" : { - "action_id" : 55, + "action_id" : 63, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7407,7 +8531,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 37, + "id" : 42, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -7421,14 +8545,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], + "action_ids" : [64], "actions" : ["FabricEgress.egress_next.set_mpls"], - "base_default_next" : "node_69", + "base_default_next" : "node_76", "next_tables" : { - "FabricEgress.egress_next.set_mpls" : "node_69" + "FabricEgress.egress_next.set_mpls" : "node_76" }, "default_entry" : { - "action_id" : 56, + "action_id" : 64, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7436,7 +8560,7 @@ }, { "name" : "tbl_egress_next_push_outer_vlan", - "id" : 38, + "id" : 43, "source_info" : { "filename" : "include/control/next.p4", "line" : 295, @@ -7450,14 +8574,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57], + "action_ids" : [65], "actions" : ["FabricEgress.egress_next.push_outer_vlan"], "base_default_next" : "tbl_egress_next_push_inner_vlan", "next_tables" : { "FabricEgress.egress_next.push_outer_vlan" : "tbl_egress_next_push_inner_vlan" }, "default_entry" : { - "action_id" : 57, + "action_id" : 65, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7465,7 +8589,7 @@ }, { "name" : "tbl_egress_next_push_inner_vlan", - "id" : 39, + "id" : 44, "source_info" : { "filename" : "include/control/next.p4", "line" : 296, @@ -7479,14 +8603,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58], + "action_ids" : [66], "actions" : ["FabricEgress.egress_next.push_inner_vlan"], - "base_default_next" : "node_74", + "base_default_next" : "node_81", "next_tables" : { - "FabricEgress.egress_next.push_inner_vlan" : "node_74" + "FabricEgress.egress_next.push_inner_vlan" : "node_81" }, "default_entry" : { - "action_id" : 58, + "action_id" : 66, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7494,7 +8618,7 @@ }, { "name" : "tbl_next299", - "id" : 40, + "id" : 45, "source_info" : { "filename" : "include/control/next.p4", "line" : 299, @@ -7508,14 +8632,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [65], + "action_ids" : [75], "actions" : ["next299"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "next299" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 65, + "action_id" : 75, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7523,7 +8647,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 41, + "id" : 46, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -7534,7 +8658,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -7550,16 +8674,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59, 60, 61], + "action_ids" : [67, 68, 69], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_74", + "base_default_next" : "node_81", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_74", - "FabricEgress.egress_next.pop_vlan" : "node_74", - "FabricEgress.egress_next.drop" : "node_74" + "FabricEgress.egress_next.push_vlan" : "node_81", + "FabricEgress.egress_next.pop_vlan" : "node_81", + "FabricEgress.egress_next.drop" : "node_81" }, "default_entry" : { - "action_id" : 61, + "action_id" : 69, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7567,7 +8691,7 @@ }, { "name" : "tbl_next309", - "id" : 42, + "id" : 47, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -7581,14 +8705,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [67], + "action_ids" : [77], "actions" : ["next309"], - "base_default_next" : "node_76", + "base_default_next" : "node_83", "next_tables" : { - "next309" : "node_76" + "next309" : "node_83" }, "default_entry" : { - "action_id" : 67, + "action_id" : 77, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7596,7 +8720,7 @@ }, { "name" : "tbl_next310", - "id" : 43, + "id" : 48, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -7610,14 +8734,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [66], + "action_ids" : [76], "actions" : ["next310"], - "base_default_next" : "node_82", + "base_default_next" : "node_89", "next_tables" : { - "next310" : "node_82" + "next310" : "node_89" }, "default_entry" : { - "action_id" : 66, + "action_id" : 76, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7625,7 +8749,7 @@ }, { "name" : "tbl_next313", - "id" : 44, + "id" : 49, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -7639,14 +8763,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [69], + "action_ids" : [79], "actions" : ["next313"], - "base_default_next" : "node_80", + "base_default_next" : "node_87", "next_tables" : { - "next313" : "node_80" + "next313" : "node_87" }, "default_entry" : { - "action_id" : 69, + "action_id" : 79, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7654,7 +8778,7 @@ }, { "name" : "tbl_next314", - "id" : 45, + "id" : 50, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -7668,14 +8792,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68], + "action_ids" : [78], "actions" : ["next314"], - "base_default_next" : "node_82", + "base_default_next" : "node_89", "next_tables" : { - "next314" : "node_82" + "next314" : "node_89" }, "default_entry" : { - "action_id" : 68, + "action_id" : 78, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7683,7 +8807,7 @@ }, { "name" : "tbl_bng_egress_downstream_encap_v4", - "id" : 46, + "id" : 51, "source_info" : { "filename" : "include/bng.p4", "line" : 297, @@ -7697,14 +8821,109 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], + "action_ids" : [62], "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], + "base_default_next" : "tbl_slicing126", + "next_tables" : { + "FabricEgress.bng_egress.downstream.encap_v4" : "tbl_slicing126" + }, + "default_entry" : { + "action_id" : 62, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing126", + "id" : 52, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [81], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 81, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 53, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 138, + "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" : [70, 71, 61], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], "base_default_next" : null, "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v4" : null + "__MISS__" : null, + "__HIT__" : "node_94" }, "default_entry" : { - "action_id" : 54, + "action_id" : 61, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing159", + "id" : 54, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [80], + "actions" : ["slicing159"], + "base_default_next" : null, + "next_tables" : { + "slicing159" : null + }, + "default_entry" : { + "action_id" : 80, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -7714,11 +8933,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_59", - "id" : 22, + "name" : "node_66", + "id" : 24, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 118, "column" : 33, "source_fragment" : "fabric_metadata" }, @@ -7729,16 +8948,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out15"] + "value" : ["scalars", "userMetadata._is_controller_packet_out23"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_61" + "false_next" : "node_68" }, { - "name" : "node_61", - "id" : 23, + "name" : "node_68", + "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -7760,11 +8979,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_63" + "false_next" : "node_70" }, { - "name" : "node_63", - "id" : 24, + "name" : "node_70", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -7782,7 +9001,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast14"] + "value" : ["scalars", "userMetadata._is_multicast22"] } } }, @@ -7803,11 +9022,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_65" + "false_next" : "node_72" }, { - "name" : "node_65", - "id" : 25, + "name" : "node_72", + "id" : 27, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -7820,7 +9039,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, "right" : { "type" : "hexstr", @@ -7828,12 +9047,12 @@ } } }, - "true_next" : "node_66", + "true_next" : "node_73", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_66", - "id" : 26, + "name" : "node_73", + "id" : 28, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -7852,14 +9071,14 @@ } }, "true_next" : "tbl_egress_next_pop_mpls_if_present", - "false_next" : "node_69" + "false_next" : "node_76" }, { - "name" : "node_69", - "id" : 27, + "name" : "node_76", + "id" : 29, "source_info" : { "filename" : "fabric.p4", - "line" : 109, + "line" : 119, "column" : 31, "source_fragment" : "fabric_metadata" }, @@ -7870,7 +9089,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._push_double_vlan4"] + "value" : ["scalars", "userMetadata._push_double_vlan12"] } } }, @@ -7878,8 +9097,8 @@ "false_next" : "tbl_next299" }, { - "name" : "node_74", - "id" : 28, + "name" : "node_81", + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -7898,11 +9117,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_78" + "false_next" : "node_85" }, { - "name" : "node_76", - "id" : 29, + "name" : "node_83", + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -7924,11 +9143,11 @@ } }, "true_next" : "tbl_next310", - "false_next" : "node_82" + "false_next" : "node_89" }, { - "name" : "node_78", - "id" : 30, + "name" : "node_85", + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -7956,7 +9175,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -7967,11 +9186,11 @@ } }, "true_next" : "tbl_next313", - "false_next" : "node_82" + "false_next" : "node_89" }, { - "name" : "node_80", - "id" : 31, + "name" : "node_87", + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -7993,11 +9212,11 @@ } }, "true_next" : "tbl_next314", - "false_next" : "node_82" + "false_next" : "node_89" }, { - "name" : "node_82", - "id" : 32, + "name" : "node_89", + "id" : 34, "source_info" : { "filename" : "include/bng.p4", "line" : 358, @@ -8010,7 +9229,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type21"] + "value" : ["scalars", "userMetadata._bng_type33"] }, "right" : { "type" : "hexstr", @@ -8018,12 +9237,12 @@ } } }, - "false_next" : null, - "true_next" : "node_83" + "true_next" : "node_90", + "false_next" : "tbl_slicing126" }, { - "name" : "node_83", - "id" : 33, + "name" : "node_90", + "id" : 35, "source_info" : { "filename" : "include/bng.p4", "line" : 296, @@ -8041,8 +9260,31 @@ } } }, + "true_next" : "tbl_bng_egress_downstream_encap_v4", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_94", + "id" : 36, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, "false_next" : null, - "true_next" : "tbl_bng_egress_downstream_encap_v4" + "true_next" : "tbl_slicing159" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt index 29aa49f0dd1..b9097066b39 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt @@ -519,6 +519,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 49262446 @@ -552,6 +638,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -848,6 +960,49 @@ actions { bitwidth: 16 } } +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: 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: 20781696 @@ -876,6 +1031,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -1063,6 +1232,28 @@ direct_counters { } 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: 318892680 @@ -1096,6 +1287,17 @@ meters { } size: 8192 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index b767fbf1fc8..cb1372ca2a1 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -9,6 +9,7 @@ ["tmp_4", 8, false], ["tmp_8", 32, false], ["last_ipv4_dscp_0", 6, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -16,65 +17,77 @@ ["tmp_7", 64, false], ["tmp_9", 32, false], ["tmp_10", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], + ["tmp_11", 32, false], ["bng_ingress_upstream_hasReturned", 1, false], ["key_0", 64, false], + ["dscp_rewriter_tmp_dscp", 6, false], ["process_int_main_process_int_transit_hasReturned", 1, false], - ["userMetadata._ip_eth_type0", 16, false], - ["userMetadata._vlan_id1", 12, false], - ["userMetadata._vlan_pri2", 3, false], - ["userMetadata._vlan_cfi3", 1, false], - ["userMetadata._push_double_vlan4", 1, false], - ["userMetadata._inner_vlan_id5", 12, false], - ["userMetadata._inner_vlan_pri6", 3, false], - ["userMetadata._inner_vlan_cfi7", 1, false], - ["userMetadata._mpls_label8", 20, false], - ["userMetadata._mpls_ttl9", 8, false], - ["userMetadata._skip_forwarding10", 1, false], - ["userMetadata._skip_next11", 1, false], - ["userMetadata._fwd_type12", 3, false], - ["userMetadata._next_id13", 32, false], - ["userMetadata._is_multicast14", 1, false], - ["userMetadata._is_controller_packet_out15", 1, false], - ["userMetadata._ip_proto16", 8, false], - ["userMetadata._l4_sport17", 16, false], - ["userMetadata._l4_dport18", 16, false], - ["userMetadata._ipv4_src_addr19", 32, false], - ["userMetadata._ipv4_dst_addr20", 32, false], - ["userMetadata._inner_l4_sport21", 16, false], - ["userMetadata._inner_l4_dport22", 16, false], - ["userMetadata._spgw_ipv4_len23", 16, false], - ["userMetadata._spgw_teid24", 32, false], - ["userMetadata._spgw_tunnel_src_port25", 16, false], - ["userMetadata._spgw_tunnel_src_addr26", 32, false], - ["userMetadata._spgw_tunnel_dst_addr27", 32, false], - ["userMetadata._spgw_ctr_id28", 32, false], - ["userMetadata._spgw_far_id29", 32, false], - ["userMetadata._spgw_src_iface30", 8, false], - ["userMetadata._spgw_skip_spgw31", 1, false], - ["userMetadata._spgw_notify_spgwc32", 1, false], - ["userMetadata._spgw_needs_gtpu_encap33", 1, false], - ["userMetadata._spgw_needs_gtpu_decap34", 1, false], - ["userMetadata._spgw_skip_egress_pdr_ctr35", 1, false], - ["userMetadata._bng_type36", 2, false], - ["userMetadata._bng_line_id37", 32, false], - ["userMetadata._bng_pppoe_session_id38", 16, false], - ["userMetadata._bng_ds_meter_result39", 32, false], - ["userMetadata._bng_s_tag40", 12, false], - ["userMetadata._bng_c_tag41", 12, false], - ["userMetadata._int_meta_source42", 1, false], - ["userMetadata._int_meta_transit43", 1, false], - ["userMetadata._int_meta_sink44", 1, false], - ["userMetadata._int_meta_switch_id45", 32, false], - ["userMetadata._int_meta_new_words46", 8, false], - ["userMetadata._int_meta_new_bytes47", 16, false], - ["userMetadata._int_meta_ig_tstamp48", 32, false], - ["userMetadata._int_meta_eg_tstamp49", 32, false], - ["userMetadata._port_type50", 2, false] + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._push_double_vlan12", 1, false], + ["userMetadata._inner_vlan_id13", 12, false], + ["userMetadata._inner_vlan_pri14", 3, false], + ["userMetadata._inner_vlan_cfi15", 1, false], + ["userMetadata._mpls_label16", 20, false], + ["userMetadata._mpls_ttl17", 8, false], + ["userMetadata._skip_forwarding18", 1, false], + ["userMetadata._skip_next19", 1, false], + ["userMetadata._fwd_type20", 3, false], + ["userMetadata._next_id21", 32, false], + ["userMetadata._is_multicast22", 1, false], + ["userMetadata._is_controller_packet_out23", 1, false], + ["userMetadata._ip_proto24", 8, false], + ["userMetadata._l4_sport25", 16, false], + ["userMetadata._l4_dport26", 16, false], + ["userMetadata._ipv4_src_addr27", 32, false], + ["userMetadata._ipv4_dst_addr28", 32, false], + ["userMetadata._slice_id29", 4, false], + ["userMetadata._packet_color30", 2, false], + ["userMetadata._tc31", 2, false], + ["userMetadata._dscp32", 6, false], + ["userMetadata._inner_l4_sport33", 16, false], + ["userMetadata._inner_l4_dport34", 16, false], + ["userMetadata._spgw_ipv4_len35", 16, false], + ["userMetadata._spgw_teid36", 32, false], + ["userMetadata._spgw_tunnel_src_port37", 16, false], + ["userMetadata._spgw_tunnel_src_addr38", 32, false], + ["userMetadata._spgw_tunnel_dst_addr39", 32, false], + ["userMetadata._spgw_ctr_id40", 32, false], + ["userMetadata._spgw_far_id41", 32, false], + ["userMetadata._spgw_src_iface42", 8, false], + ["userMetadata._spgw_qfi43", 6, false], + ["userMetadata._spgw_skip_spgw44", 1, false], + ["userMetadata._spgw_notify_spgwc45", 1, false], + ["userMetadata._spgw_needs_gtpu_encap46", 1, false], + ["userMetadata._spgw_needs_gtpu_decap47", 1, false], + ["userMetadata._spgw_skip_egress_pdr_ctr48", 1, false], + ["userMetadata._spgw_needs_qfi_push49", 1, false], + ["userMetadata._bng_type50", 2, false], + ["userMetadata._bng_line_id51", 32, false], + ["userMetadata._bng_pppoe_session_id52", 16, false], + ["userMetadata._bng_ds_meter_result53", 32, false], + ["userMetadata._bng_s_tag54", 12, false], + ["userMetadata._bng_c_tag55", 12, false], + ["userMetadata._int_meta_source56", 1, false], + ["userMetadata._int_meta_transit57", 1, false], + ["userMetadata._int_meta_sink58", 1, false], + ["userMetadata._int_meta_switch_id59", 32, false], + ["userMetadata._int_meta_new_words60", 8, false], + ["userMetadata._int_meta_new_bytes61", 16, false], + ["userMetadata._int_meta_ig_tstamp62", 32, false], + ["userMetadata._int_meta_eg_tstamp63", 32, false], + ["userMetadata._port_type64", 2, false], + ["_padding_0", 4, false] ] }, { @@ -201,8 +214,30 @@ ] }, { - "name" : "tcp_t", + "name" : "gtpu_options_t", "id" : 11, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 12, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "tcp_t", + "id" : 13, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -219,7 +254,7 @@ }, { "name" : "icmp_t", - "id" : 12, + "id" : 14, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -231,7 +266,7 @@ }, { "name" : "ipv6_t", - "id" : 13, + "id" : 15, "fields" : [ ["version", 4, false], ["traffic_class", 8, false], @@ -245,7 +280,7 @@ }, { "name" : "packet_in_header_t", - "id" : 14, + "id" : 16, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -253,7 +288,7 @@ }, { "name" : "report_fixed_header_t", - "id" : 15, + "id" : 17, "fields" : [ ["ver", 4, false], ["nproto", 4, false], @@ -268,7 +303,7 @@ }, { "name" : "intl4_shim_t", - "id" : 16, + "id" : 18, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], @@ -278,7 +313,7 @@ }, { "name" : "int_header_t", - "id" : 17, + "id" : 19, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -297,14 +332,14 @@ }, { "name" : "int_switch_id_t", - "id" : 18, + "id" : 20, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 19, + "id" : 21, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -312,14 +347,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 20, + "id" : 22, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 21, + "id" : 23, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -327,21 +362,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 22, + "id" : 24, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 23, + "id" : 25, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 24, + "id" : 26, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -349,14 +384,14 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 25, + "id" : 27, "fields" : [ ["egress_port_tx_util", 32, false] ] }, { "name" : "int_data_t", - "id" : 26, + "id" : 28, "fields" : [ ["data", "*"] ], @@ -364,7 +399,7 @@ }, { "name" : "intl4_tail_t", - "id" : 27, + "id" : 29, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], @@ -466,204 +501,232 @@ "pi_omit" : true }, { - "name" : "gtpu", + "name" : "outer_gtpu_options", "id" : 13, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "outer_gtpu_ext_psc", + "id" : 14, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu", + "id" : 15, "header_type" : "gtpu_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "gtpu_options", + "id" : 16, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 17, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "inner_ipv4", - "id" : 14, + "id" : 18, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 15, + "id" : 19, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 16, + "id" : 20, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 17, + "id" : 21, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 18, + "id" : 22, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv6", - "id" : 19, + "id" : 23, "header_type" : "ipv6_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 20, + "id" : 24, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 21, + "id" : 25, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 22, + "id" : 26, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 23, + "id" : 27, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 24, + "id" : 28, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "report_ethernet", - "id" : 25, + "id" : 29, "header_type" : "ethernet_t", "metadata" : false, "pi_omit" : true }, { "name" : "report_eth_type", - "id" : 26, + "id" : 30, "header_type" : "eth_type_t", "metadata" : false, "pi_omit" : true }, { "name" : "report_ipv4", - "id" : 27, + "id" : 31, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "report_udp", - "id" : 28, + "id" : 32, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "report_fixed_header", - "id" : 29, + "id" : 33, "header_type" : "report_fixed_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_shim", - "id" : 30, + "id" : 34, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 31, + "id" : 35, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_switch_id", - "id" : 32, + "id" : 36, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 33, + "id" : 37, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 34, + "id" : 38, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 35, + "id" : 39, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 36, + "id" : 40, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 37, + "id" : 41, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 38, + "id" : 42, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 39, + "id" : 43, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_data", - "id" : 40, + "id" : 44, "header_type" : "int_data_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_tail", - "id" : 41, + "id" : 45, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true @@ -679,7 +742,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -1044,7 +1107,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -1117,7 +1180,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_s_tag40"] + "value" : ["scalars", "userMetadata._bng_s_tag54"] }, { "type" : "field", @@ -1178,7 +1241,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_c_tag41"] + "value" : ["scalars", "userMetadata._bng_c_tag55"] }, { "type" : "field", @@ -1321,7 +1384,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "field", @@ -1334,7 +1397,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "value" : ["scalars", "userMetadata._mpls_ttl17"] }, { "type" : "field", @@ -1401,7 +1464,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -1414,7 +1477,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -1427,7 +1490,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -1440,7 +1503,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -1513,7 +1576,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -1526,7 +1589,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -1586,7 +1649,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", @@ -1599,7 +1662,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", @@ -1636,7 +1699,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", @@ -1649,7 +1712,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", @@ -2237,7 +2300,141 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 17, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi43"] + }, + { + "type" : "field", + "value" : ["gtpu_ext_psc", "qfi"] + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 18, + "parser_ops" : [ { "parameters" : [ { @@ -2296,7 +2493,7 @@ }, { "name" : "parse_inner_udp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -2311,7 +2508,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] }, { "type" : "field", @@ -2324,7 +2521,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] }, { "type" : "field", @@ -2346,7 +2543,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 17, + "id" : 20, "parser_ops" : [ { "parameters" : [ @@ -2361,7 +2558,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] }, { "type" : "field", @@ -2374,7 +2571,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] }, { "type" : "field", @@ -2396,7 +2593,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 18, + "id" : 21, "parser_ops" : [ { "parameters" : [ @@ -2420,7 +2617,7 @@ }, { "name" : "parse_int", - "id" : 19, + "id" : 22, "parser_ops" : [], "transitions" : [ { @@ -2445,7 +2642,7 @@ }, { "name" : "parse_intl4_shim", - "id" : 20, + "id" : 23, "parser_ops" : [ { "parameters" : [ @@ -2489,7 +2686,7 @@ }, { "name" : "parse_int_data", - "id" : 21, + "id" : 24, "parser_ops" : [ { "parameters" : [ @@ -2586,7 +2783,7 @@ }, { "name" : "parse_intl4_tail", - "id" : 22, + "id" : 25, "parser_ops" : [ { "parameters" : [ @@ -2618,11 +2815,11 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "report_ethernet", "report_eth_type", "report_ipv4", "report_udp", "report_fixed_header", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "pppoe", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "ipv4", "ipv6", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "int_data", "intl4_tail"], + "order" : ["packet_in", "report_ethernet", "report_eth_type", "report_ipv4", "report_udp", "report_fixed_header", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "pppoe", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "outer_gtpu_options", "outer_gtpu_ext_psc", "ipv4", "ipv6", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "int_data", "intl4_tail"], "primitives" : [] } ], @@ -2654,13 +2851,27 @@ "size" : 8192, "rate_count" : 2, "type" : "bytes" - } - ], - "counter_arrays" : [ + }, { - "name" : "FabricIngress.process_set_source_sink.counter_set_source", - "id" : 0, - "is_direct" : true, + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 2, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" + } + ], + "counter_arrays" : [ + { + "name" : "FabricIngress.process_set_source_sink.counter_set_source", + "id" : 0, + "is_direct" : true, "binding" : "FabricIngress.process_set_source_sink.tb_set_source", "source_info" : { "filename" : "include/int/int_main.p4", @@ -2820,7 +3031,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -2874,8 +3085,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 18, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 19, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 20, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -2887,7 +3122,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 19, + "id" : 21, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -2899,10 +3134,10 @@ }, { "name" : "FabricIngress.spgw.pdr_counter", - "id" : 20, + "id" : 22, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 108, + "line" : 110, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2911,7 +3146,7 @@ }, { "name" : "FabricEgress.bng_egress.downstream.c_line_tx", - "id" : 21, + "id" : 23, "source_info" : { "filename" : "include/bng.p4", "line" : 267, @@ -2923,7 +3158,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", - "id" : 22, + "id" : 24, "is_direct" : true, "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "source_info" : { @@ -2935,7 +3170,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 23, + "id" : 25, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2947,10 +3182,10 @@ }, { "name" : "FabricEgress.spgw.pdr_counter", - "id" : 24, + "id" : 26, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 295, + "line" : 307, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -3026,7 +3261,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -3252,7 +3487,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source42"] + "value" : ["scalars", "userMetadata._int_meta_source56"] }, { "type" : "expression", @@ -3288,7 +3523,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_sink44"] + "value" : ["scalars", "userMetadata._int_meta_sink58"] }, { "type" : "expression", @@ -3366,7 +3601,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { @@ -3388,7 +3623,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._bng_type50"] }, { "type" : "hexstr", @@ -3397,7 +3632,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 184, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -3429,7 +3664,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._bng_type50"] }, { "type" : "hexstr", @@ -3438,7 +3673,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 163, + "line" : 184, "column" : 36, "source_fragment" : "2w0x0; ..." } @@ -3479,7 +3714,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3508,7 +3743,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { @@ -3539,7 +3774,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 133, + "line" : 150, "column" : 31, "source_fragment" : "0x86dd; ..." } @@ -3568,7 +3803,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { @@ -3595,7 +3830,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._bng_type50"] }, { "type" : "hexstr", @@ -3604,7 +3839,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 186, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -3614,7 +3849,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_pppoe_session_id38"] + "value" : ["scalars", "userMetadata._bng_pppoe_session_id52"] }, { "type" : "runtime_data", @@ -3637,7 +3872,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { @@ -3659,7 +3894,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._bng_type50"] }, { "type" : "hexstr", @@ -3668,7 +3903,7 @@ ], "source_info" : { "filename" : "include/control/../header.p4", - "line" : 165, + "line" : 186, "column" : 39, "source_fragment" : "2w0x2;; ..." } @@ -3682,7 +3917,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { @@ -3748,7 +3983,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] }, { "type" : "runtime_data", @@ -3774,7 +4009,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] }, { "type" : "expression", @@ -3803,7 +4038,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -3832,7 +4067,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type50"] + "value" : ["scalars", "userMetadata._port_type64"] }, { "type" : "hexstr", @@ -3841,7 +4076,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -3863,7 +4098,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type50"] + "value" : ["scalars", "userMetadata._port_type64"] }, { "type" : "runtime_data", @@ -3898,7 +4133,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -3917,7 +4152,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type50"] + "value" : ["scalars", "userMetadata._port_type64"] }, { "type" : "runtime_data", @@ -3948,7 +4183,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, { "type" : "runtime_data", @@ -3979,7 +4214,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4010,7 +4245,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "hexstr", @@ -4029,7 +4264,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4060,7 +4295,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4097,7 +4332,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4128,7 +4363,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, { "type" : "runtime_data", @@ -4159,7 +4394,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -4194,7 +4429,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -4213,7 +4448,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._push_double_vlan4"] + "value" : ["scalars", "userMetadata._push_double_vlan12"] }, { "type" : "expression", @@ -4242,7 +4477,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "value" : ["scalars", "userMetadata._inner_vlan_id13"] }, { "type" : "runtime_data", @@ -4261,7 +4496,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_s_tag40"] + "value" : ["scalars", "userMetadata._bng_s_tag54"] }, { "type" : "runtime_data", @@ -4280,7 +4515,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_c_tag41"] + "value" : ["scalars", "userMetadata._bng_c_tag55"] }, { "type" : "runtime_data", @@ -4311,7 +4546,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4320,8 +4555,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 32, + "line" : 32, + "column" : 26, "source_fragment" : "= next_id; ..." } } @@ -4346,7 +4581,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -4356,7 +4591,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -4375,8 +4610,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 34, + "line" : 39, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -4406,7 +4641,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -4428,7 +4663,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -4438,7 +4673,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -4457,8 +4692,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 34, + "line" : 51, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -4516,7 +4751,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id13"] + "value" : ["scalars", "userMetadata._next_id21"] }, { "type" : "runtime_data", @@ -4782,7 +5017,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast14"] + "value" : ["scalars", "userMetadata._is_multicast22"] }, { "type" : "expression", @@ -4809,8 +5044,186 @@ ] }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 54, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id29"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x0f" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 56, + "runtime_data" : [ + { + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -4818,7 +5231,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4827,7 +5240,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4837,7 +5250,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -4856,7 +5269,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -4875,7 +5288,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -4894,11 +5307,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -4913,11 +5326,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -4976,6 +5389,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4986,7 +5429,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -5005,7 +5448,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -5020,7 +5463,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -5029,7 +5472,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", - "id" : 55, + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -5037,7 +5480,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -5046,7 +5489,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5056,7 +5499,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -5075,7 +5518,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -5094,7 +5537,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -5113,11 +5556,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -5132,11 +5575,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -5195,6 +5638,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -5209,7 +5682,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -5224,7 +5697,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -5233,7 +5706,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", - "id" : 56, + "id" : 60, "runtime_data" : [], "primitives" : [ { @@ -5241,7 +5714,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -5250,7 +5723,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5260,7 +5733,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -5279,7 +5752,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -5298,7 +5771,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -5317,11 +5790,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -5336,11 +5809,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -5399,6 +5872,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -5409,7 +5912,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 67, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -5428,7 +5931,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 68, "column" : 8, "source_fragment" : "hdr.icmp = hdr.inner_icmp" } @@ -5443,7 +5946,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 67, + "line" : 69, "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } @@ -5452,7 +5955,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", - "id" : 57, + "id" : 61, "runtime_data" : [], "primitives" : [ { @@ -5460,7 +5963,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -5469,7 +5972,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5479,7 +5982,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -5498,7 +6001,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -5517,7 +6020,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -5536,11 +6039,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -5555,11 +6058,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -5618,6 +6121,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -5628,7 +6161,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 74, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -5637,7 +6170,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", - "id" : 58, + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -5645,7 +6178,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -5654,7 +6187,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5664,7 +6197,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -5683,7 +6216,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -5702,7 +6235,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -5721,11 +6254,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -5740,11 +6273,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -5803,6 +6336,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -5813,7 +6376,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -5832,7 +6395,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -5847,7 +6410,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -5856,7 +6419,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", - "id" : 59, + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -5864,7 +6427,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -5873,7 +6436,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5883,7 +6446,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -5902,7 +6465,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -5921,7 +6484,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -5940,11 +6503,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -5959,11 +6522,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -6022,6 +6585,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -6036,7 +6629,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -6051,7 +6644,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -6060,7 +6653,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", - "id" : 60, + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -6068,7 +6661,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -6077,7 +6670,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -6087,7 +6680,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -6106,7 +6699,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -6125,7 +6718,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -6144,11 +6737,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -6163,11 +6756,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -6226,6 +6819,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -6236,7 +6859,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 67, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -6255,7 +6878,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 68, "column" : 8, "source_fragment" : "hdr.icmp = hdr.inner_icmp" } @@ -6270,7 +6893,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 67, + "line" : 69, "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } @@ -6279,7 +6902,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", - "id" : 61, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -6287,7 +6910,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -6296,7 +6919,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -6306,7 +6929,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", @@ -6325,7 +6948,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", @@ -6344,7 +6967,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", @@ -6363,11 +6986,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport21"] + "value" : ["scalars", "userMetadata._inner_l4_sport33"] } ], "source_info" : { @@ -6382,11 +7005,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport22"] + "value" : ["scalars", "userMetadata._inner_l4_dport34"] } ], "source_info" : { @@ -6445,6 +7068,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -6455,7 +7108,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 74, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -6464,11 +7117,15 @@ }, { "name" : "FabricIngress.spgw.load_iface", - "id" : 62, + "id" : 66, "runtime_data" : [ { "name" : "src_iface", "bitwidth" : 8 + }, + { + "name" : "slice_id", + "bitwidth" : 4 } ], "primitives" : [ @@ -6477,7 +7134,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface30"] + "value" : ["scalars", "userMetadata._spgw_src_iface42"] }, { "type" : "runtime_data", @@ -6486,7 +7143,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 120, + "line" : 122, "column" : 33, "source_fragment" : "= src_iface; ..." } @@ -6496,7 +7153,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw31"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw44"] }, { "type" : "expression", @@ -6515,35 +7172,54 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 121, + "line" : 123, "column" : 33, "source_fragment" : "= false; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw.iface_miss", - "id" : 63, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface30"] + "value" : ["scalars", "userMetadata._slice_id29"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 110, - "column" : 44, - "source_fragment" : "8w0; ..." + "filename" : "include/control/spgw.p4", + "line" : 124, + "column" : 27, + "source_fragment" : "= slice_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.iface_miss", + "id" : 67, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_src_iface42"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 127, + "column" : 44, + "source_fragment" : "8w0; ..." } }, { @@ -6551,7 +7227,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw31"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw44"] }, { "type" : "expression", @@ -6570,7 +7246,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 125, + "line" : 128, "column" : 33, "source_fragment" : "= true; ..." } @@ -6579,7 +7255,7 @@ }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 64, + "id" : 68, "runtime_data" : [ { "name" : "ctr_id", @@ -6592,6 +7268,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -6600,7 +7280,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] }, { "type" : "runtime_data", @@ -6609,7 +7289,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -6619,7 +7299,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id29"] + "value" : ["scalars", "userMetadata._spgw_far_id41"] }, { "type" : "runtime_data", @@ -6628,7 +7308,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -6638,7 +7318,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap34"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap47"] }, { "type" : "expression", @@ -6667,16 +7347,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 65, + "id" : 69, "runtime_data" : [ { "name" : "ctr_id", @@ -6689,6 +7388,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -6697,7 +7400,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] }, { "type" : "runtime_data", @@ -6706,7 +7409,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -6716,7 +7419,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id29"] + "value" : ["scalars", "userMetadata._spgw_far_id41"] }, { "type" : "runtime_data", @@ -6725,7 +7428,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -6735,7 +7438,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap34"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap47"] }, { "type" : "expression", @@ -6764,16 +7467,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 66, + "id" : 70, "runtime_data" : [ { "name" : "ctr_id", @@ -6788,8 +7510,16 @@ "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -6798,7 +7528,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] }, { "type" : "runtime_data", @@ -6807,7 +7537,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -6817,7 +7547,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id29"] + "value" : ["scalars", "userMetadata._spgw_far_id41"] }, { "type" : "runtime_data", @@ -6826,7 +7556,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -6836,7 +7566,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap34"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap47"] }, { "type" : "expression", @@ -6865,16 +7595,93 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi43"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push49"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 67, + "id" : 71, "runtime_data" : [ { "name" : "ctr_id", @@ -6889,8 +7696,16 @@ "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -6899,7 +7714,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] }, { "type" : "runtime_data", @@ -6908,7 +7723,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -6918,7 +7733,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id29"] + "value" : ["scalars", "userMetadata._spgw_far_id41"] }, { "type" : "runtime_data", @@ -6927,7 +7742,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -6937,7 +7752,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap34"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap47"] }, { "type" : "expression", @@ -6966,16 +7781,93 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi43"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push49"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_normal_far", - "id" : 68, + "id" : 72, "runtime_data" : [ { "name" : "drop", @@ -6992,7 +7884,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] }, { "type" : "expression", @@ -7021,7 +7913,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 207, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -7031,7 +7923,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -7060,7 +7952,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 196, + "line" : 208, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -7070,7 +7962,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc32"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc45"] }, { "type" : "expression", @@ -7099,7 +7991,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 197, + "line" : 209, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -7108,7 +8000,7 @@ }, { "name" : "FabricIngress.spgw.load_tunnel_far", - "id" : 69, + "id" : 73, "runtime_data" : [ { "name" : "drop", @@ -7141,7 +8033,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] }, { "type" : "expression", @@ -7170,7 +8062,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -7180,7 +8072,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -7209,7 +8101,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -7219,7 +8111,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc32"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc45"] }, { "type" : "expression", @@ -7248,7 +8140,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -7258,7 +8150,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap33"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap46"] }, { "type" : "expression", @@ -7277,7 +8169,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -7287,7 +8179,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid24"] + "value" : ["scalars", "userMetadata._spgw_teid36"] }, { "type" : "runtime_data", @@ -7296,7 +8188,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -7306,7 +8198,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port25"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port37"] }, { "type" : "runtime_data", @@ -7315,7 +8207,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -7325,7 +8217,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr26"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr38"] }, { "type" : "runtime_data", @@ -7334,7 +8226,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -7344,7 +8236,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr27"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr39"] }, { "type" : "runtime_data", @@ -7353,7 +8245,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -7363,7 +8255,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "runtime_data", @@ -7372,7 +8264,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -7382,7 +8274,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "runtime_data", @@ -7391,7 +8283,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -7401,7 +8293,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "runtime_data", @@ -7410,7 +8302,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -7420,7 +8312,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "hexstr", @@ -7429,7 +8321,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -7438,7 +8330,7 @@ }, { "name" : "FabricIngress.spgw.load_dbuf_far", - "id" : 70, + "id" : 74, "runtime_data" : [ { "name" : "drop", @@ -7471,7 +8363,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] }, { "type" : "expression", @@ -7500,7 +8392,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -7510,7 +8402,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] }, { "type" : "expression", @@ -7539,7 +8431,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -7549,7 +8441,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc32"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc45"] }, { "type" : "expression", @@ -7578,7 +8470,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -7588,7 +8480,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap33"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap46"] }, { "type" : "expression", @@ -7607,7 +8499,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -7617,7 +8509,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid24"] + "value" : ["scalars", "userMetadata._spgw_teid36"] }, { "type" : "runtime_data", @@ -7626,7 +8518,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -7636,7 +8528,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port25"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port37"] }, { "type" : "runtime_data", @@ -7645,7 +8537,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -7655,7 +8547,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr26"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr38"] }, { "type" : "runtime_data", @@ -7664,7 +8556,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -7674,7 +8566,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr27"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr39"] }, { "type" : "runtime_data", @@ -7683,7 +8575,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -7693,7 +8585,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "runtime_data", @@ -7702,7 +8594,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -7712,7 +8604,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "runtime_data", @@ -7721,7 +8613,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -7731,7 +8623,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "runtime_data", @@ -7740,7 +8632,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -7750,7 +8642,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] }, { "type" : "hexstr", @@ -7759,7 +8651,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -7769,7 +8661,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr35"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr48"] }, { "type" : "expression", @@ -7788,7 +8680,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 230, + "line" : 242, "column" : 43, "source_fragment" : "= true; ..." } @@ -7796,8 +8688,8 @@ ] }, { - "name" : "packetio25", - "id" : 71, + "name" : "lookup_md_init37", + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -7805,33 +8697,18 @@ "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["packet_out", "egress_port"] - } - ], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "packet_out" + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } }, { @@ -7839,97 +8716,70 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out15"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 53, - "source_fragment" : "= true; ..." - } - }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } } ] }, { - "name" : "spgw265", - "id" : 72, + "name" : "lookup_md_init40", + "id" : 76, "runtime_data" : [], "primitives" : [ { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.spgw.pdr_counter" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } - } - ] - }, - { - "name" : "spgw282", - "id" : 73, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len23"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["inner_udp", "dport"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "= hdr.ipv4.total_len; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "filtering113", - "id" : 74, + "name" : "lookup_md_init43", + "id" : 77, "runtime_data" : [], "primitives" : [ { @@ -7937,37 +8787,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] - }, - { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] - } - ], - "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 36, - "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.pri; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } }, { @@ -7975,25 +8806,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "filtering119", - "id" : 75, + "name" : "lookup_md_init32", + "id" : 78, "runtime_data" : [], "primitives" : [ { @@ -8001,18 +8832,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 119, - "column" : 42, - "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -8020,18 +8861,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_pri6"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["inner_vlan_tag", "pri"] + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 120, - "column" : 43, - "source_fragment" : "= hdr.inner_vlan_tag.pri; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -8039,51 +8880,44 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_cfi7"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 121, - "column" : 43, - "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 76, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 37, - "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl102", - "id" : 77, + "name" : "lookup_md_init52", + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -8091,18 +8925,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -8110,25 +8944,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." } } ] }, { - "name" : "acl105", - "id" : 78, + "name" : "lookup_md_init55", + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -8136,18 +8970,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_udp", "sport"] + "value" : ["udp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -8155,25 +8989,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_udp", "dport"] + "value" : ["udp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl98", - "id" : 79, + "name" : "lookup_md_init58", + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -8181,18 +9015,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_ipv4", "src_addr"] + "value" : ["icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." } }, { @@ -8200,44 +9034,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "value" : ["icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "acl_ip_proto"] - }, - { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." } } ] }, { - "name" : "acl113", - "id" : 80, + "name" : "lookup_md_init47", + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -8245,18 +9060,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["tcp", "sport"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -8264,44 +9089,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["tcp", "dport"] + "value" : ["ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "acl116", - "id" : 81, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["udp", "sport"] + "value" : ["ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -8309,25 +9127,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", - "value" : ["udp", "dport"] + "value" : ["ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "acl109", - "id" : 82, + "name" : "lookup_md_init23", + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -8335,18 +9153,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["ipv4", "src_addr"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." } }, { @@ -8354,18 +9182,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { - "type" : "field", - "value" : ["ipv4", "dst_addr"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -8373,44 +9201,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } - } - ] - }, - { - "name" : "acl27", - "id" : 83, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -8418,18 +9239,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 27, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -8437,18 +9258,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 28, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -8456,18 +9277,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 29, + "column" : 25, + "source_fragment" : "= 0; ..." } }, { @@ -8475,24 +9296,24 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 30, + "column" : 25, + "source_fragment" : "= 0; ..." } } ] }, { - "name" : "port_counter31", + "name" : "packetio25", "id" : 84, "runtime_data" : [], "primitives" : [ @@ -8501,177 +9322,143 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_9"] + "value" : ["standard_metadata", "egress_spec"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_spec"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "field", + "value" : ["packet_out", "egress_port"] } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 38, - "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" } }, { - "op" : "count", + "op" : "remove_header", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.egress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_9"] + "type" : "header", + "value" : "packet_out" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, + "filename" : "include/control/packetio.p4", + "line" : 26, "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + "source_fragment" : "hdr.packet_out.setInvalid()" } - } - ] - }, - { - "name" : "port_counter34", - "id" : 85, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_10"] + "value" : ["scalars", "userMetadata._is_controller_packet_out23"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xffffffff" + "type" : "bool", + "value" : true } } } } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 39, - "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." } }, { - "op" : "count", - "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.ingress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_10"] - } - ], + "op" : "exit", + "parameters" : [], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, + "filename" : "include/control/packetio.p4", + "line" : 29, "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + "source_fragment" : "exit" } } ] }, { - "name" : "int_main89", - "id" : 86, + "name" : "filtering113", + "id" : 85, "runtime_data" : [], "primitives" : [ { - "op" : "clone_ingress_pkt_to_egress", + "op" : "assign", "parameters" : [ { - "type" : "hexstr", - "value" : "0x000001f4" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] }, { - "type" : "hexstr", - "value" : "0x2" + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/int/int_main.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "clone3(CloneType.I2E, REPORT_MIRROR_SESSION_ID, {standard_metadata.ingress_port})" + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." } - } - ] - }, - { - "name" : "bng126", - "id" : 87, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "bng_ingress_upstream_hasReturned"] + "value" : ["scalars", "userMetadata._vlan_pri10"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["vlan_tag", "pri"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 126, - "column" : 12, - "source_fragment" : "return" + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." } } ] }, { - "name" : "bng342", - "id" : 88, + "name" : "filtering119", + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -8679,18 +9466,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._inner_vlan_id13"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["inner_vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/control/../header.p4", - "line" : 164, - "column" : 37, - "source_fragment" : "2w0x1; ..." + "filename" : "include/control/filtering.p4", + "line" : 119, + "column" : 42, + "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..." } }, { @@ -8698,29 +9485,70 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "bng_ingress_upstream_hasReturned"] + "value" : ["scalars", "userMetadata._inner_vlan_pri14"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } + "type" : "field", + "value" : ["inner_vlan_tag", "pri"] } - ] + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 120, + "column" : 43, + "source_fragment" : "= hdr.inner_vlan_tag.pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._inner_vlan_cfi15"] + }, + { + "type" : "field", + "value" : ["inner_vlan_tag", "cfi"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 121, + "column" : 43, + "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..." + } } ] }, { - "name" : "bng131", - "id" : 89, + "name" : "filtering129", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl17"] + }, + { + "type" : "hexstr", + "value" : "0x41" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + } + } + ] + }, + { + "name" : "spgw277", + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -8728,51 +9556,51 @@ "parameters" : [ { "type" : "counter_array", - "value" : "FabricIngress.bng_ingress.upstream.c_dropped" + "value" : "FabricIngress.spgw.pdr_counter" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 131, - "column" : 20, - "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } } ] }, { - "name" : "bng139", - "id" : 90, + "name" : "spgw294", + "id" : 89, "runtime_data" : [], "primitives" : [ { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.bng_ingress.upstream.c_dropped" + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["ipv4", "total_len"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 139, - "column" : 19, - "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "= hdr.ipv4.total_len; ..." } } ] }, { - "name" : "bng112", - "id" : 91, + "name" : "port_counter31", + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -8780,7 +9608,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "key_0"] + "value" : ["scalars", "tmp_9"] }, { "type" : "expression", @@ -8789,199 +9617,132 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : ">>", - "left" : { - "type" : "field", - "value" : ["ipv6", "src_addr"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x40" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffffffffffffffffffffffffffff" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] }, "right" : { "type" : "hexstr", - "value" : "0xffffffffffffffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 112, - "column" : 12, - "source_fragment" : " hdr.ipv6.src_addr[127:64] : exact @name(\\\"ipv6_src_net_id\\\");" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" } - } - ] - }, - { - "name" : "bng238", - "id" : 92, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "execute_meter", + "op" : "count", "parameters" : [ { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_prio" - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.egress_port_counter" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result39"] + "value" : ["scalars", "tmp_9"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 238, - "column" : 24, - "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" } } ] }, { - "name" : "bng241", - "id" : 93, + "name" : "port_counter34", + "id" : 91, "runtime_data" : [], "primitives" : [ { - "op" : "execute_meter", + "op" : "assign", "parameters" : [ - { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_besteff" - }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "tmp_10"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result39"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 241, - "column" : 24, - "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" } - } - ] - }, - { - "name" : "bng250", - "id" : 94, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "execute_meter", + "op" : "count", "parameters" : [ { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_prio" - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result39"] + "value" : ["scalars", "tmp_10"] } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 250, - "column" : 24, - "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" } } ] }, { - "name" : "bng253", - "id" : 95, + "name" : "int_main89", + "id" : 92, "runtime_data" : [], "primitives" : [ { - "op" : "execute_meter", + "op" : "clone_ingress_pkt_to_egress", "parameters" : [ { - "type" : "meter_array", - "value" : "FabricIngress.bng_ingress.downstream.m_besteff" - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "type" : "hexstr", + "value" : "0x000001f4" }, { - "type" : "field", - "value" : ["scalars", "userMetadata._bng_ds_meter_result39"] + "type" : "hexstr", + "value" : "0x2" } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 253, - "column" : 24, - "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" + "filename" : "include/int/int_main.p4", + "line" : 89, + "column" : 12, + "source_fragment" : "clone3(CloneType.I2E, REPORT_MIRROR_SESSION_ID, {standard_metadata.ingress_port})" } } ] }, { - "name" : "nop", - "id" : 96, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "nop", - "id" : 97, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "nop", - "id" : 98, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 99, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 100, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.bng_egress.downstream.encap_v4", - "id" : 101, + "name" : "bng126", + "id" : 93, "runtime_data" : [], "primitives" : [ { @@ -8989,60 +9750,43 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] - }, - { - "type" : "hexstr", - "value" : "0x8864" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 136, - "column" : 33, - "source_fragment" : "0x8864; ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "pppoe" - } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 273, - "column" : 8, - "source_fragment" : "hdr.pppoe.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["pppoe", "version"] + "value" : ["scalars", "bng_ingress_upstream_hasReturned"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 274, - "column" : 8, - "source_fragment" : "hdr.pppoe.version = 4w1" + "line" : 126, + "column" : 12, + "source_fragment" : "return" } - }, + } + ] + }, + { + "name" : "bng342", + "id" : 94, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "type_id"] + "value" : ["scalars", "userMetadata._bng_type50"] }, { "type" : "hexstr", @@ -9050,10 +9794,10 @@ } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 275, - "column" : 8, - "source_fragment" : "hdr.pppoe.type_id = 4w1" + "filename" : "include/control/../header.p4", + "line" : 185, + "column" : 37, + "source_fragment" : "2w0x1; ..." } }, { @@ -9061,64 +9805,89 @@ "parameters" : [ { "type" : "field", - "value" : ["pppoe", "code"] + "value" : ["scalars", "bng_ingress_upstream_hasReturned"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 276, - "column" : 8, - "source_fragment" : "hdr.pppoe.code = 8w0" - } - }, + ] + } + ] + }, + { + "name" : "bng131", + "id" : 95, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["pppoe", "session_id"] + "type" : "counter_array", + "value" : "FabricIngress.bng_ingress.upstream.c_dropped" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_pppoe_session_id38"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 277, - "column" : 8, - "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." + "line" : 131, + "column" : 20, + "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" } - }, + } + ] + }, + { + "name" : "bng139", + "id" : 96, + "runtime_data" : [], + "primitives" : [ { "op" : "count", "parameters" : [ { "type" : "counter_array", - "value" : "FabricEgress.bng_egress.downstream.c_line_tx" + "value" : "FabricIngress.bng_ingress.upstream.c_dropped" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 278, - "column" : 8, - "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" + "line" : 139, + "column" : 19, + "source_fragment" : "c_dropped.count(fmeta.bng.line_id)" } - }, + } + ] + }, + { + "name" : "bng112", + "id" : 97, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "length"] + "value" : ["scalars", "key_0"] }, { "type" : "expression", @@ -9129,20 +9898,30 @@ "left" : { "type" : "expression", "value" : { - "op" : "+", + "op" : "&", "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv6", "src_addr"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x40" + } + } }, "right" : { "type" : "hexstr", - "value" : "0x0002" + "value" : "0xffffffffffffffffffffffffffffffff" } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffffffffffff" } } } @@ -9150,172 +9929,144 @@ ], "source_info" : { "filename" : "include/bng.p4", - "line" : 283, - "column" : 8, - "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2" + "line" : 112, + "column" : 12, + "source_fragment" : " hdr.ipv6.src_addr[127:64] : exact @name(\\\"ipv6_src_net_id\\\");" } - }, + } + ] + }, + { + "name" : "bng238", + "id" : 98, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_prio" + }, { "type" : "field", - "value" : ["pppoe", "protocol"] + "value" : ["scalars", "userMetadata._bng_line_id51"] }, { - "type" : "hexstr", - "value" : "0x0021" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_ds_meter_result53"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 138, - "column" : 35, - "source_fragment" : "0x0021; ..." + "filename" : "include/bng.p4", + "line" : 238, + "column" : 24, + "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } } ] }, { - "name" : "FabricEgress.bng_egress.downstream.encap_v6", - "id" : 102, + "name" : "bng241", + "id" : 99, "runtime_data" : [], "primitives" : [ { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ { - "type" : "field", - "value" : ["eth_type", "value"] + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_besteff" }, - { - "type" : "hexstr", - "value" : "0x8864" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 136, - "column" : 33, - "source_fragment" : "0x8864; ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "pppoe" - } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 273, - "column" : 8, - "source_fragment" : "hdr.pppoe.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["pppoe", "version"] + "value" : ["scalars", "userMetadata._bng_line_id51"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_ds_meter_result53"] } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 274, - "column" : 8, - "source_fragment" : "hdr.pppoe.version = 4w1" + "line" : 241, + "column" : 24, + "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } - }, + } + ] + }, + { + "name" : "bng250", + "id" : 100, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ { - "type" : "field", - "value" : ["pppoe", "type_id"] + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_prio" }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 275, - "column" : 8, - "source_fragment" : "hdr.pppoe.type_id = 4w1" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["pppoe", "code"] + "value" : ["scalars", "userMetadata._bng_line_id51"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_ds_meter_result53"] } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 276, - "column" : 8, - "source_fragment" : "hdr.pppoe.code = 8w0" + "line" : 250, + "column" : 24, + "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } - }, + } + ] + }, + { + "name" : "bng253", + "id" : 101, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ { - "type" : "field", - "value" : ["pppoe", "session_id"] + "type" : "meter_array", + "value" : "FabricIngress.bng_ingress.downstream.m_besteff" }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_pppoe_session_id38"] - } - ], - "source_info" : { - "filename" : "include/bng.p4", - "line" : 277, - "column" : 8, - "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." - } - }, - { - "op" : "count", - "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricEgress.bng_egress.downstream.c_line_tx" + "value" : ["scalars", "userMetadata._bng_line_id51"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._bng_line_id37"] + "value" : ["scalars", "userMetadata._bng_ds_meter_result53"] } ], "source_info" : { "filename" : "include/bng.p4", - "line" : 278, - "column" : 8, - "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" + "line" : 253, + "column" : 24, + "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)" } - }, + } + ] + }, + { + "name" : "slicing114", + "id" : 102, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["pppoe", "length"] + "value" : ["scalars", "tmp_11"] }, { "type" : "expression", @@ -9326,88 +10077,103 @@ "left" : { "type" : "expression", "value" : { - "op" : "+", + "op" : "|", "left" : { - "type" : "field", - "value" : ["ipv6", "payload_len"] + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id29"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x002a" + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._tc31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/bng.p4", - "line" : 290, - "column" : 8, - "source_fragment" : "hdr.pppoe.length = hdr.ipv6.payload_len + 16w42" + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" } }, { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, { "type" : "field", - "value" : ["pppoe", "protocol"] + "value" : ["scalars", "tmp_11"] }, { - "type" : "hexstr", - "value" : "0x0057" + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color30"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 139, - "column" : 35, - "source_fragment" : "0x0057; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 103, - "runtime_data" : [ - { - "name" : "max_hop", - "bitwidth" : 8 - }, - { - "name" : "ins_cnt", - "bitwidth" : 5 - }, - { - "name" : "ins_mask0003", - "bitwidth" : 4 - }, - { - "name" : "ins_mask0407", - "bitwidth" : 4 - } - ], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_shim" - } - ], - "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 32, + "filename" : "include/control/slicing.p4", + "line" : 114, "column" : 8, - "source_fragment" : "hdr.intl4_shim.setValid()" + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" } }, { @@ -9415,37 +10181,143 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "int_type"] + "value" : ["scalars", "userMetadata._dscp32"] }, { - "type" : "hexstr", - "value" : "0x01" + "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._slice_id29"] + }, + "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._tc31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + } } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.int_type = 1" + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." } - }, + } + ] + }, + { + "name" : "nop", + "id" : 103, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 104, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 105, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 106, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 107, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 108, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.bng_egress.downstream.encap_v4", + "id" : 109, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len_words"] + "value" : ["eth_type", "value"] }, { "type" : "hexstr", - "value" : "0x04" + "value" : "0x8864" } ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 169, - "column" : 36, - "source_fragment" : "4; ..." + "line" : 153, + "column" : 33, + "source_fragment" : "0x8864; ..." } }, { @@ -9453,14 +10325,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_header" + "value" : "pppoe" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 37, + "filename" : "include/bng.p4", + "line" : 273, "column" : 8, - "source_fragment" : "hdr.int_header.setValid()" + "source_fragment" : "hdr.pppoe.setValid()" } }, { @@ -9468,18 +10340,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "ver"] + "value" : ["pppoe", "version"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 38, + "filename" : "include/bng.p4", + "line" : 274, "column" : 8, - "source_fragment" : "hdr.int_header.ver = 0" + "source_fragment" : "hdr.pppoe.version = 4w1" } }, { @@ -9487,18 +10359,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "rep"] + "value" : ["pppoe", "type_id"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 39, + "filename" : "include/bng.p4", + "line" : 275, "column" : 8, - "source_fragment" : "hdr.int_header.rep = 0" + "source_fragment" : "hdr.pppoe.type_id = 4w1" } }, { @@ -9506,7 +10378,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "c"] + "value" : ["pppoe", "code"] }, { "type" : "hexstr", @@ -9514,10 +10386,10 @@ } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 40, + "filename" : "include/bng.p4", + "line" : 276, "column" : 8, - "source_fragment" : "hdr.int_header.c = 0" + "source_fragment" : "hdr.pppoe.code = 8w0" } }, { @@ -9525,37 +10397,37 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "e"] + "value" : ["pppoe", "session_id"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_pppoe_session_id52"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 41, + "filename" : "include/bng.p4", + "line" : 277, "column" : 8, - "source_fragment" : "hdr.int_header.e = 0" + "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "rsvd1"] + "type" : "counter_array", + "value" : "FabricEgress.bng_egress.downstream.c_line_tx" }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 42, + "filename" : "include/bng.p4", + "line" : 278, "column" : 8, - "source_fragment" : "hdr.int_header.rsvd1 = 0" + "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" } }, { @@ -9563,37 +10435,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "ins_cnt"] + "value" : ["pppoe", "length"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0002" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 43, - "column" : 8, - "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_header", "max_hop_cnt"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 44, + "filename" : "include/bng.p4", + "line" : 283, "column" : 8, - "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." + "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2" } }, { @@ -9601,56 +10477,59 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["pppoe", "protocol"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x0021" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = 0" + "filename" : "include/control/../define.p4", + "line" : 155, + "column" : 35, + "source_fragment" : "0x0021; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.bng_egress.downstream.encap_v6", + "id" : 110, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_0003"] + "value" : ["eth_type", "value"] }, { - "type" : "runtime_data", - "value" : 2 + "type" : "hexstr", + "value" : "0x8864" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 46, - "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." + "filename" : "include/control/../define.p4", + "line" : 153, + "column" : 33, + "source_fragment" : "0x8864; ..." } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "instruction_mask_0407"] - }, - { - "type" : "runtime_data", - "value" : 3 + "type" : "header", + "value" : "pppoe" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 47, + "filename" : "include/bng.p4", + "line" : 273, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." + "source_fragment" : "hdr.pppoe.setValid()" } }, { @@ -9658,18 +10537,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_0811"] + "value" : ["pppoe", "version"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 48, + "filename" : "include/bng.p4", + "line" : 274, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" + "source_fragment" : "hdr.pppoe.version = 4w1" } }, { @@ -9677,33 +10556,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_1215"] + "value" : ["pppoe", "type_id"] }, { "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_tail" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 51, + "filename" : "include/bng.p4", + "line" : 275, "column" : 8, - "source_fragment" : "hdr.intl4_tail.setValid()" + "source_fragment" : "hdr.pppoe.type_id = 4w1" } }, { @@ -9711,18 +10575,18 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_tail", "next_proto"] + "value" : ["pppoe", "code"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 52, + "filename" : "include/bng.p4", + "line" : 276, "column" : 8, - "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" + "source_fragment" : "hdr.pppoe.code = 8w0" } }, { @@ -9730,79 +10594,37 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_tail", "dest_port"] + "value" : ["pppoe", "session_id"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._bng_pppoe_session_id52"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 53, + "filename" : "include/bng.p4", + "line" : 277, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..." + "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..." } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["intl4_tail", "dscp"] + "type" : "counter_array", + "value" : "FabricEgress.bng_egress.downstream.c_line_tx" }, { "type" : "field", - "value" : ["ipv4", "dscp"] - } - ], - "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "value" : ["scalars", "userMetadata._bng_line_id51"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 56, + "filename" : "include/bng.p4", + "line" : 278, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" + "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)" } }, { @@ -9810,7 +10632,7 @@ "parameters" : [ { "type" : "field", - "value" : ["udp", "len"] + "value" : ["pppoe", "length"] }, { "type" : "expression", @@ -9824,11 +10646,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["udp", "len"] + "value" : ["ipv6", "payload_len"] }, "right" : { "type" : "hexstr", - "value" : "0x0010" + "value" : "0x002a" } } }, @@ -9841,10 +10663,10 @@ } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 57, + "filename" : "include/bng.p4", + "line" : 290, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" + "source_fragment" : "hdr.pppoe.length = hdr.ipv6.payload_len + 16w42" } }, { @@ -9852,59 +10674,57 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "dscp"] + "value" : ["pppoe", "protocol"] }, { "type" : "hexstr", - "value" : "0x01" + "value" : "0x0057" } ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 165, - "column" : 24, - "source_fragment" : "0x1; ..." + "line" : 156, + "column" : 35, + "source_fragment" : "0x0057; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 104, + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", + "id" : 111, "runtime_data" : [ { - "name" : "switch_id", - "bitwidth" : 32 + "name" : "max_hop", + "bitwidth" : 8 + }, + { + "name" : "ins_cnt", + "bitwidth" : 5 + }, + { + "name" : "ins_mask0003", + "bitwidth" : 4 + }, + { + "name" : "ins_mask0407", + "bitwidth" : 4 } ], "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit43"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "header", + "value" : "intl4_shim" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 26, - "column" : 31, - "source_fragment" : "= true; ..." + "filename" : "include/int/int_source.p4", + "line" : 32, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.setValid()" } }, { @@ -9912,46 +10732,52 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["intl4_shim", "int_type"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "hexstr", + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 31, - "column" : 33, - "source_fragment" : "= switch_id; ..." + "filename" : "include/int/int_source.p4", + "line" : 34, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.int_type = 1" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 105, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 106, - "runtime_data" : [], - "primitives" : [ + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 186, + "column" : 36, + "source_fragment" : "4; ..." + } + }, { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_q_occupancy" + "value" : "int_header" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 60, + "filename" : "include/int/int_source.p4", + "line" : 37, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_header.setValid()" } }, { @@ -9959,7 +10785,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] + "value" : ["int_header", "ver"] }, { "type" : "hexstr", @@ -9967,10 +10793,10 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 62, + "filename" : "include/int/int_source.p4", + "line" : 38, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + "source_fragment" : "hdr.int_header.ver = 0" } }, { @@ -9978,31 +10804,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] + "value" : ["int_header", "rep"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 63, + "filename" : "include/int/int_source.p4", + "line" : 39, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + "source_fragment" : "hdr.int_header.rep = 0" } }, { @@ -10010,41 +10823,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_header", "c"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "filename" : "include/int/int_source.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_header.c = 0" } }, { @@ -10052,63 +10842,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["int_header", "e"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "filename" : "include/int/int_source.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_header.e = 0" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 107, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_hop_latency" + "type" : "field", + "value" : ["int_header", "rsvd1"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" + "source_fragment" : "hdr.int_header.rsvd1 = 0" } }, { @@ -10116,18 +10880,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] + "value" : ["int_header", "ins_cnt"] }, { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 43, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } }, { @@ -10135,41 +10899,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_header", "max_hop_cnt"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "filename" : "include/int/int_source.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } }, { @@ -10177,63 +10918,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["int_header", "total_hop_cnt"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 108, - "runtime_data" : [], - "primitives" : [ + "filename" : "include/int/int_source.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = 0" + } + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_q_occupancy" + "type" : "field", + "value" : ["int_header", "instruction_mask_0003"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 60, + "filename" : "include/int/int_source.p4", + "line" : 46, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } }, { @@ -10241,7 +10956,26 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] + "value" : ["int_header", "instruction_mask_0407"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0811"] }, { "type" : "hexstr", @@ -10249,10 +10983,10 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 62, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } }, { @@ -10260,31 +10994,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] + "value" : ["int_header", "instruction_mask_1215"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 63, + "filename" : "include/int/int_source.p4", + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" } }, { @@ -10292,14 +11013,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_hop_latency" + "value" : "intl4_tail" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 51, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" + "source_fragment" : "hdr.intl4_tail.setValid()" } }, { @@ -10307,18 +11028,56 @@ "parameters" : [ { "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] + "value" : ["intl4_tail", "next_proto"] }, { "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] + "value" : ["ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 52, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dest_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._l4_dport26"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -10326,7 +11085,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["ipv4", "total_len"] }, { "type" : "expression", @@ -10340,27 +11099,27 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["ipv4", "total_len"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x0010" } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 103, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "filename" : "include/int/int_source.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -10368,7 +11127,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["udp", "len"] }, { "type" : "expression", @@ -10382,11 +11141,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["udp", "len"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0010" } } }, @@ -10399,32 +11158,10 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 104, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 109, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 47, + "filename" : "include/int/int_source.p4", + "line" : 57, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -10432,53 +11169,49 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["ipv4", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "filename" : "include/control/../define.p4", + "line" : 182, + "column" : 24, + "source_fragment" : "0x1; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 112, + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_transit57"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xffff" + "type" : "bool", + "value" : true } } } @@ -10486,9 +11219,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "line" : 26, + "column" : 31, + "source_fragment" : "= true; ..." } }, { @@ -10496,90 +11229,31 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 31, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= switch_id; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 110, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 113, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 114, "runtime_data" : [], "primitives" : [ { @@ -10648,91 +11322,12 @@ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -10746,11 +11341,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -10764,9 +11359,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -10774,7 +11369,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -10788,11 +11383,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -10806,16 +11401,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 111, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 115, "runtime_data" : [], "primitives" : [ { @@ -10852,91 +11447,12 @@ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -10950,11 +11466,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -10968,9 +11484,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -10978,7 +11494,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -10992,11 +11508,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -11010,16 +11526,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 112, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 116, "runtime_data" : [], "primitives" : [ { @@ -11123,90 +11639,11 @@ } }, { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" - } - }, - { - "op" : "assign", + "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -11220,11 +11657,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -11238,9 +11675,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -11248,7 +11685,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -11262,11 +11699,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -11280,16 +11717,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 113, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 117, "runtime_data" : [], "primitives" : [ { @@ -11297,14 +11734,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -11312,18 +11749,63 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_port_ids", "ingress_port_id"] }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -11331,7 +11813,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -11345,7 +11827,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -11373,7 +11855,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -11387,7 +11869,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -11413,8 +11895,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 114, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 118, "runtime_data" : [], "primitives" : [ { @@ -11488,14 +11970,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -11503,18 +11985,63 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_port_ids", "ingress_port_id"] }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -11522,7 +12049,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -11536,7 +12063,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -11564,7 +12091,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -11578,7 +12105,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -11604,8 +12131,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 115, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 119, "runtime_data" : [], "primitives" : [ { @@ -11647,14 +12174,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -11662,18 +12189,31 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_port_ids", "ingress_port_id"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 48, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -11681,7 +12221,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -11690,16 +12230,48 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x02" + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" } } }, @@ -11723,7 +12295,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -11737,7 +12309,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -11763,8 +12335,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 116, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 120, "runtime_data" : [], "primitives" : [ { @@ -11872,33 +12444,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -11906,7 +12459,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -11915,22 +12468,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x03" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } @@ -11938,9 +12481,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -11948,7 +12491,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -11957,18 +12500,8 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x000c" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", @@ -11980,31 +12513,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 117, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -12012,7 +12523,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12021,12 +12532,22 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xff" } } } @@ -12034,9 +12555,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -12044,7 +12565,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -12053,8 +12574,18 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } }, "right" : { "type" : "hexstr", @@ -12066,11 +12597,18 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 121, + "runtime_data" : [], + "primitives" : [ { "op" : "add_header", "parameters" : [ @@ -12095,7 +12633,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { @@ -12110,7 +12648,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12124,11 +12662,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -12142,9 +12680,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -12152,7 +12690,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -12166,11 +12704,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -12184,16 +12722,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 118, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 122, "runtime_data" : [], "primitives" : [ { @@ -12267,14 +12805,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_port_ids" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -12282,31 +12820,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_switch_id", "switch_id"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -12314,7 +12839,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12323,12 +12848,22 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xff" } } } @@ -12336,22 +12871,105 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "line" : 103, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 41, + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 123, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_switch_id.setValid()" } @@ -12365,7 +12983,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { @@ -12380,7 +12998,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12394,11 +13012,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -12412,9 +13030,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -12422,7 +13040,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -12436,11 +13054,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -12454,16 +13072,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 119, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 124, "runtime_data" : [], "primitives" : [ { @@ -12471,14 +13089,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_hop_latency" + "value" : "int_q_occupancy" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 54, + "line" : 60, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -12486,33 +13104,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] + "value" : ["int_q_occupancy", "q_id"] }, { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 62, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" } }, { @@ -12520,7 +13123,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_q_occupancy", "q_occupancy"] }, { "type" : "expression", @@ -12530,11 +13133,11 @@ "op" : "&", "left" : { "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "value" : ["standard_metadata", "deq_qdepth"] }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffff" } } } @@ -12542,9 +13145,24 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, + "line" : 63, "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -12552,31 +13170,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -12603,7 +13208,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { @@ -12618,7 +13223,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12632,7 +13237,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -12660,7 +13265,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -12674,7 +13279,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -12700,8 +13305,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 120, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 125, "runtime_data" : [], "primitives" : [ { @@ -12709,14 +13314,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_q_occupancy" + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 60, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -12724,18 +13329,31 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] + "value" : ["int_port_ids", "ingress_port_id"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 62, + "line" : 48, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -12743,7 +13361,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -12753,11 +13371,11 @@ "op" : "&", "left" : { "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xffffff" + "value" : "0xffff" } } } @@ -12765,9 +13383,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 63, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -12775,14 +13393,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_hop_latency" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 54, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -12790,33 +13408,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] + "value" : ["int_switch_id", "switch_id"] }, { "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -12824,7 +13427,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -12833,12 +13436,22 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xff" } } } @@ -12846,9 +13459,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "line" : 103, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -12856,7 +13469,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -12865,8 +13478,18 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } }, "right" : { "type" : "hexstr", @@ -12878,24 +13501,31 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "line" : 104, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 126, + "runtime_data" : [], + "primitives" : [ { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_q_occupancy" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 60, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -12903,18 +13533,65 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_q_occupancy", "q_id"] }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 62, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id45"] + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 63, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -12922,7 +13599,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -12931,22 +13608,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x04" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } @@ -12954,9 +13621,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 115, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -12964,7 +13631,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -12973,18 +13640,8 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", @@ -12996,37 +13653,24 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 116, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 121, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 122, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_egress_tx_util" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 88, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -13034,18 +13678,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] + "value" : ["int_switch_id", "switch_id"] }, { - "type" : "hexstr", - "value" : "0x00000000" + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 90, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -13053,7 +13697,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -13067,11 +13711,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x01" + "value" : "0x03" } } }, @@ -13085,9 +13729,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -13095,7 +13739,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -13109,11 +13753,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0004" + "value" : "0x000c" } } }, @@ -13127,16 +13771,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 110, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 123, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 127, "runtime_data" : [], "primitives" : [ { @@ -13144,14 +13788,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 80, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -13159,37 +13803,33 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 82, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" + "type" : "header", + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 83, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -13197,7 +13837,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -13206,22 +13846,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } @@ -13229,9 +13859,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -13239,7 +13869,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -13248,18 +13878,8 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", @@ -13271,50 +13891,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 124, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 90, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -13322,14 +13901,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 80, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -13337,37 +13916,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_id"] + "value" : ["int_switch_id", "switch_id"] }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 83, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -13375,7 +13935,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -13389,11 +13949,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x03" } } }, @@ -13407,9 +13967,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -13417,7 +13977,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -13431,11 +13991,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x000c" } } }, @@ -13449,16 +14009,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 110, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 125, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 128, "runtime_data" : [], "primitives" : [ { @@ -13466,14 +14026,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tstamp" + "value" : "int_q_occupancy" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, + "line" : 60, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -13481,41 +14041,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["int_q_occupancy", "q_id"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 75, + "line" : 62, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" } }, { @@ -13523,7 +14060,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_q_occupancy", "q_occupancy"] }, { "type" : "expression", @@ -13532,22 +14069,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffffff" } } } @@ -13555,73 +14082,24 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 126, - "runtime_data" : [], - "primitives" : [ { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_egress_tx_util" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 88, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -13629,18 +14107,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "hexstr", - "value" : "0x00000000" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 90, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -13648,14 +14126,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tstamp" + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -13663,7 +14141,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -13672,22 +14150,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xffffffff" + "value" : "0xffff" } } } @@ -13695,9 +14163,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 75, + "line" : 48, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -13705,7 +14173,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -13714,16 +14182,82 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_switch_id59"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x04" } } }, @@ -13737,9 +14271,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 115, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." } }, { @@ -13747,7 +14281,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -13761,11 +14295,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0010" } } }, @@ -13779,16 +14313,22 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 116, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 127, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 129, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 130, "runtime_data" : [], "primitives" : [ { @@ -13796,14 +14336,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_egress_tx_util" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 80, + "line" : 88, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" + "source_fragment" : "hdr.int_egress_tx_util.setValid()" } }, { @@ -13811,18 +14351,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_id"] + "value" : ["int_egress_tx_util", "egress_port_tx_util"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x00000000" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 82, + "line" : 90, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } }, { @@ -13830,33 +14370,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 83, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "line" : 97, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -13864,7 +14412,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -13878,17 +14426,17 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] + "type" : "hexstr", + "value" : "0x0004" } } }, "right" : { "type" : "hexstr", - "value" : "0xffffffff" + "value" : "0xffff" } } } @@ -13896,9 +14444,69 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 75, + "line" : 98, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 131, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 83, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, { @@ -13906,7 +14514,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -13920,11 +14528,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -13938,9 +14546,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -13948,7 +14556,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -13962,11 +14570,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -13980,16 +14588,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 128, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 132, "runtime_data" : [], "primitives" : [ { @@ -14079,27 +14687,12 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14113,53 +14706,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -14173,9 +14724,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -14183,7 +14734,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -14197,11 +14748,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -14215,16 +14766,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 129, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 133, "runtime_data" : [], "primitives" : [ { @@ -14232,14 +14783,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -14247,18 +14798,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -14266,7 +14840,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14280,7 +14854,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -14308,7 +14882,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -14322,7 +14896,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -14348,8 +14922,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 130, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 134, "runtime_data" : [], "primitives" : [ { @@ -14391,14 +14965,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -14406,18 +14980,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -14425,7 +15022,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14439,7 +15036,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -14467,7 +15064,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -14481,7 +15078,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -14507,8 +15104,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 131, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 135, "runtime_data" : [], "primitives" : [ { @@ -14569,14 +15166,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -14584,18 +15181,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -14603,7 +15223,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14617,7 +15237,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -14645,7 +15265,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -14659,7 +15279,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -14685,8 +15305,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 132, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 136, "runtime_data" : [], "primitives" : [ { @@ -14781,14 +15401,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -14796,18 +15416,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -14815,7 +15458,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14829,7 +15472,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", @@ -14857,7 +15500,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -14871,7 +15514,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", @@ -14897,8 +15540,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 133, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 137, "runtime_data" : [], "primitives" : [ { @@ -14906,14 +15549,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tstamp" + "value" : "int_ingress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, + "line" : 68, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -14921,7 +15564,26 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -14935,87 +15597,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 68, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 69, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -15029,9 +15615,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -15039,7 +15625,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -15053,11 +15639,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -15071,16 +15657,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 134, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 138, "runtime_data" : [], "primitives" : [ { @@ -15117,63 +15703,6 @@ "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -15213,7 +15742,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -15227,11 +15756,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -15245,9 +15774,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -15255,7 +15784,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -15269,11 +15798,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -15287,16 +15816,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 135, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 139, "runtime_data" : [], "primitives" : [ { @@ -15352,63 +15881,6 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -15448,7 +15920,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -15462,11 +15934,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -15480,9 +15952,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -15490,7 +15962,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -15504,11 +15976,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -15522,16 +15994,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 136, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 140, "runtime_data" : [], "primitives" : [ { @@ -15626,14 +16098,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tstamp" + "value" : "int_ingress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, + "line" : 68, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -15641,22 +16113,147 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 141, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, "right" : { "type" : "field", "value" : ["standard_metadata", "deq_timedelta"] @@ -15717,7 +16314,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { "type" : "expression", @@ -15731,11 +16328,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, "right" : { "type" : "hexstr", - "value" : "0x04" + "value" : "0x02" } } }, @@ -15749,9 +16346,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 115, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -15759,7 +16356,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { "type" : "expression", @@ -15773,11 +16370,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, "right" : { "type" : "hexstr", - "value" : "0x0010" + "value" : "0x0008" } } }, @@ -15791,52 +16388,31 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 116, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", - "id" : 137, - "runtime_data" : [ - { - "name" : "src_mac", - "bitwidth" : 48 - }, - { - "name" : "mon_mac", - "bitwidth" : 48 - }, - { - "name" : "src_ip", - "bitwidth" : 32 - }, - { - "name" : "mon_ip", - "bitwidth" : 32 - }, - { - "name" : "mon_port", - "bitwidth" : 16 - } - ], + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 142, + "runtime_data" : [], "primitives" : [ { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "report_ethernet" + "value" : "int_egress_tx_util" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 50, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.report_ethernet.setValid()" + "source_fragment" : "hdr.int_egress_tx_util.setValid()" } }, { @@ -15844,18 +16420,33 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ethernet", "dst_addr"] + "value" : ["int_egress_tx_util", "egress_port_tx_util"] }, { - "type" : "runtime_data", - "value" : 1 + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 51, + "filename" : "include/int/int_transit.p4", + "line" : 90, "column" : 8, - "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -15863,18 +16454,41 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ethernet", "src_addr"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "runtime_data", - "value" : 0 + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 52, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -15882,14 +16496,14 @@ "parameters" : [ { "type" : "header", - "value" : "report_eth_type" + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 53, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.report_eth_type.setValid()" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -15897,33 +16511,60 @@ "parameters" : [ { "type" : "field", - "value" : ["report_eth_type", "value"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "hexstr", - "value" : "0x0800" - } + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 132, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" } }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "report_ipv4" + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.setValid()" + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -15931,18 +16572,63 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "version"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { - "type" : "hexstr", - "value" : "0x04" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 58, + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 143, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.report_ipv4.version = 4w4" + "source_fragment" : "hdr.int_q_congestion.setValid()" } }, { @@ -15950,18 +16636,18 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "ihl"] + "value" : ["int_q_congestion", "q_id"] }, { "type" : "hexstr", - "value" : "0x05" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 59, + "filename" : "include/int/int_transit.p4", + "line" : 82, "column" : 8, - "source_fragment" : "hdr.report_ipv4.ihl = 4w5" + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" } }, { @@ -15969,37 +16655,33 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "dscp"] + "value" : ["int_q_congestion", "q_congestion"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x000000" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 60, + "filename" : "include/int/int_transit.p4", + "line" : 83, "column" : 8, - "source_fragment" : "hdr.report_ipv4.dscp = 6w0" + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_ipv4", "ecn"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "type" : "header", + "value" : "int_egress_tstamp" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 61, + "filename" : "include/int/int_transit.p4", + "line" : 74, "column" : 8, - "source_fragment" : "hdr.report_ipv4.ecn = 2w0" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -16007,7 +16689,7 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "total_len"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { "type" : "expression", @@ -16020,47 +16702,43 @@ "value" : { "op" : "+", "left" : { - "type" : "hexstr", - "value" : "0x0036" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] }, "right" : { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["standard_metadata", "deq_timedelta"] } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 63, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_ipv4", "identification"] - }, - { - "type" : "hexstr", - "value" : "0x0000" + "type" : "header", + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 66, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.report_ipv4.identification = 0" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -16068,18 +16746,18 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "flags"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 67, + "filename" : "include/int/int_transit.p4", + "line" : 69, "column" : 8, - "source_fragment" : "hdr.report_ipv4.flags = 0" + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" } }, { @@ -16087,18 +16765,41 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "frag_offset"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { - "type" : "hexstr", - "value" : "0x0000" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 68, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.frag_offset = 0" + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -16106,37 +16807,63 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "ttl"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { - "type" : "hexstr", - "value" : "0xff" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 69, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 144, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_ipv4", "protocol"] - }, - { - "type" : "hexstr", - "value" : "0x11" + "type" : "header", + "value" : "int_egress_tx_util" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 144, - "column" : 25, - "source_fragment" : "17; ..." + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" } }, { @@ -16144,52 +16871,52 @@ "parameters" : [ { "type" : "field", - "value" : ["report_ipv4", "src_addr"] + "value" : ["int_egress_tx_util", "egress_port_tx_util"] }, { - "type" : "runtime_data", - "value" : 2 + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 71, + "filename" : "include/int/int_transit.p4", + "line" : 90, "column" : 8, - "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_ipv4", "dst_addr"] - }, - { - "type" : "runtime_data", - "value" : 3 + "type" : "header", + "value" : "int_q_congestion" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 72, + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" + "source_fragment" : "hdr.int_q_congestion.setValid()" } }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "report_udp" + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 75, + "filename" : "include/int/int_transit.p4", + "line" : 82, "column" : 8, - "source_fragment" : "hdr.report_udp.setValid()" + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" } }, { @@ -16197,37 +16924,33 @@ "parameters" : [ { "type" : "field", - "value" : ["report_udp", "sport"] + "value" : ["int_q_congestion", "q_congestion"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x000000" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 76, + "filename" : "include/int/int_transit.p4", + "line" : 83, "column" : 8, - "source_fragment" : "hdr.report_udp.sport = 0" + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_udp", "dport"] - }, - { - "type" : "runtime_data", - "value" : 4 + "type" : "header", + "value" : "int_egress_tstamp" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 77, + "filename" : "include/int/int_transit.p4", + "line" : 74, "column" : 8, - "source_fragment" : "hdr.report_udp.dport = mon_port" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -16235,7 +16958,7 @@ "parameters" : [ { "type" : "field", - "value" : ["report_udp", "len"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { "type" : "expression", @@ -16248,28 +16971,28 @@ "value" : { "op" : "+", "left" : { - "type" : "hexstr", - "value" : "0x0022" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] }, "right" : { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["standard_metadata", "deq_timedelta"] } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 78, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -16277,14 +17000,14 @@ "parameters" : [ { "type" : "header", - "value" : "report_fixed_header" + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 31, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.setValid()" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -16292,18 +17015,18 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "ver"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 32, + "filename" : "include/int/int_transit.p4", + "line" : 69, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ver = 0" + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" } }, { @@ -16311,18 +17034,41 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "nproto"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words60"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 175, - "column" : 31, - "source_fragment" : "0; ..." + "filename" : "include/int/int_transit.p4", + "line" : 115, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." } }, { @@ -16330,37 +17076,84 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "d"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.d = 0" + "filename" : "include/int/int_transit.p4", + "line" : 116, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", + "id" : 145, + "runtime_data" : [ + { + "name" : "src_mac", + "bitwidth" : 48 }, { - "op" : "assign", + "name" : "mon_mac", + "bitwidth" : 48 + }, + { + "name" : "src_ip", + "bitwidth" : 32 + }, + { + "name" : "mon_ip", + "bitwidth" : 32 + }, + { + "name" : "mon_port", + "bitwidth" : 16 + } + ], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_fixed_header", "q"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "type" : "header", + "value" : "report_ethernet" } ], "source_info" : { "filename" : "include/int/int_report.p4", - "line" : 36, + "line" : 50, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.q = 0" + "source_fragment" : "hdr.report_ethernet.setValid()" } }, { @@ -16368,18 +17161,18 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "f"] + "value" : ["report_ethernet", "dst_addr"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { "filename" : "include/int/int_report.p4", - "line" : 37, + "line" : 51, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.f = 1" + "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" } }, { @@ -16387,18 +17180,33 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "rsvd"] + "value" : ["report_ethernet", "src_addr"] }, { - "type" : "hexstr", - "value" : "0x0000" + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { "filename" : "include/int/int_report.p4", - "line" : 38, + "line" : 52, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.rsvd = 0" + "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "report_eth_type" + } + ], + "source_info" : { + "filename" : "include/int/int_report.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.report_eth_type.setValid()" } }, { @@ -16406,37 +17214,33 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "hw_id"] + "value" : ["report_eth_type", "value"] }, { "type" : "hexstr", - "value" : "0x01" + "value" : "0x0800" } ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 179, - "column" : 21, - "source_fragment" : "1; ..." + "line" : 149, + "column" : 31, + "source_fragment" : "0x0800; ..." } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["report_fixed_header", "seq_no"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" + "type" : "header", + "value" : "report_ipv4" } ], "source_info" : { "filename" : "include/int/int_report.p4", - "line" : 42, + "line" : 57, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.seq_no = 0" + "source_fragment" : "hdr.report_ipv4.setValid()" } }, { @@ -16444,44 +17248,37 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "ingress_tstamp"] + "value" : ["report_ipv4", "version"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "hexstr", + "value" : "0x04" } ], "source_info" : { "filename" : "include/int/int_report.p4", - "line" : 44, + "line" : 58, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp" + "source_fragment" : "hdr.report_ipv4.version = 4w4" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", - "id" : 138, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["udp", "dport"] + "value" : ["report_ipv4", "ihl"] }, { - "type" : "field", - "value" : ["intl4_tail", "dest_port"] + "type" : "hexstr", + "value" : "0x05" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 27, + "filename" : "include/int/int_report.p4", + "line" : 59, "column" : 8, - "source_fragment" : "hdr.udp.dport = hdr.intl4_tail.dest_port" + "source_fragment" : "hdr.report_ipv4.ihl = 4w5" } }, { @@ -16489,97 +17286,37 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "dscp"] + "value" : ["report_ipv4", "dscp"] }, { - "type" : "field", - "value" : ["intl4_tail", "dscp"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 28, + "filename" : "include/int/int_report.p4", + "line" : 60, "column" : 8, - "source_fragment" : "hdr.ipv4.dscp = hdr.intl4_tail.dscp" + "source_fragment" : "hdr.report_ipv4.dscp = 6w0" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", - "id" : 139, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["report_ipv4", "ecn"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "-", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len_words"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x02" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 35, + "filename" : "include/int/int_report.p4", + "line" : 61, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes" + "source_fragment" : "hdr.report_ipv4.ecn = 2w0" } }, { @@ -16587,7 +17324,7 @@ "parameters" : [ { "type" : "field", - "value" : ["udp", "len"] + "value" : ["report_ipv4", "total_len"] }, { "type" : "expression", @@ -16598,44 +17335,14 @@ "left" : { "type" : "expression", "value" : { - "op" : "-", + "op" : "+", "left" : { - "type" : "field", - "value" : ["udp", "len"] + "type" : "hexstr", + "value" : "0x0036" }, "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len_words"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x02" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } + "type" : "field", + "value" : ["ipv4", "total_len"] } } }, @@ -16648,212 +17355,253 @@ } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 36, + "filename" : "include/int/int_report.p4", + "line" : 63, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len - len_bytes" + "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_header" + "type" : "field", + "value" : ["report_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 38, + "filename" : "include/int/int_report.p4", + "line" : 66, "column" : 8, - "source_fragment" : "hdr.int_header.setInvalid()" + "source_fragment" : "hdr.report_ipv4.identification = 0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_data" + "type" : "field", + "value" : ["report_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 39, + "filename" : "include/int/int_report.p4", + "line" : 67, "column" : 8, - "source_fragment" : "hdr.int_data.setInvalid()" + "source_fragment" : "hdr.report_ipv4.flags = 0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "intl4_shim" + "type" : "field", + "value" : ["report_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 40, + "filename" : "include/int/int_report.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.intl4_shim.setInvalid()" + "source_fragment" : "hdr.report_ipv4.frag_offset = 0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "intl4_tail" - } - ], - "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.intl4_tail.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ + "type" : "field", + "value" : ["report_ipv4", "ttl"] + }, { - "type" : "header", - "value" : "int_switch_id" + "type" : "hexstr", + "value" : "0xff" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 42, + "filename" : "include/int/int_report.p4", + "line" : 69, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setInvalid()" + "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_port_ids" + "type" : "field", + "value" : ["report_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 43, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setInvalid()" + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_hop_latency" + "type" : "field", + "value" : ["report_ipv4", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 44, + "filename" : "include/int/int_report.p4", + "line" : 71, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setInvalid()" + "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_q_occupancy" + "type" : "field", + "value" : ["report_ipv4", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 45, + "filename" : "include/int/int_report.p4", + "line" : 72, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setInvalid()" + "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" } }, { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "report_udp" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 46, + "filename" : "include/int/int_report.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" + "source_fragment" : "hdr.report_udp.setValid()" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_egress_tstamp" + "type" : "field", + "value" : ["report_udp", "sport"] + }, + { + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 47, + "filename" : "include/int/int_report.p4", + "line" : 76, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" + "source_fragment" : "hdr.report_udp.sport = 0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_q_congestion" + "type" : "field", + "value" : ["report_udp", "dport"] + }, + { + "type" : "runtime_data", + "value" : 4 } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 48, + "filename" : "include/int/int_report.p4", + "line" : 77, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setInvalid()" + "source_fragment" : "hdr.report_udp.dport = mon_port" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_egress_tx_util" + "type" : "field", + "value" : ["report_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0022" + }, + "right" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 49, + "filename" : "include/int/int_report.p4", + "line" : 78, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" + "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." } - } - ] - }, - { - "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 140, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "mpls" + "value" : "report_fixed_header" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 204, + "filename" : "include/int/int_report.p4", + "line" : 31, "column" : 8, - "source_fragment" : "hdr.mpls.setInvalid()" + "source_fragment" : "hdr.report_fixed_header.setValid()" } }, { @@ -16861,40 +17609,37 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["report_fixed_header", "ver"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 206, + "filename" : "include/int/int_report.p4", + "line" : 32, "column" : 8, - "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." + "source_fragment" : "hdr.report_fixed_header.ver = 0" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.set_mpls", - "id" : 141, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "mpls" + "type" : "field", + "value" : ["report_fixed_header", "nproto"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.mpls.setValid()" + "filename" : "include/control/../define.p4", + "line" : 192, + "column" : 31, + "source_fragment" : "0; ..." } }, { @@ -16902,18 +17647,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "label"] + "value" : ["report_fixed_header", "d"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 212, + "filename" : "include/int/int_report.p4", + "line" : 35, "column" : 8, - "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." + "source_fragment" : "hdr.report_fixed_header.d = 0" } }, { @@ -16921,7 +17666,7 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "tc"] + "value" : ["report_fixed_header", "q"] }, { "type" : "hexstr", @@ -16929,10 +17674,10 @@ } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 213, + "filename" : "include/int/int_report.p4", + "line" : 36, "column" : 8, - "source_fragment" : "hdr.mpls.tc = 3w0" + "source_fragment" : "hdr.report_fixed_header.q = 0" } }, { @@ -16940,7 +17685,7 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "bos"] + "value" : ["report_fixed_header", "f"] }, { "type" : "hexstr", @@ -16948,10 +17693,10 @@ } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 214, + "filename" : "include/int/int_report.p4", + "line" : 37, "column" : 8, - "source_fragment" : "hdr.mpls.bos = 1w1" + "source_fragment" : "hdr.report_fixed_header.f = 1" } }, { @@ -16959,18 +17704,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["report_fixed_header", "rsvd"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl9"] + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 215, + "filename" : "include/int/int_report.p4", + "line" : 38, "column" : 8, - "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." + "source_fragment" : "hdr.report_fixed_header.rsvd = 0" } }, { @@ -16978,40 +17723,18 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["report_fixed_header", "hw_id"] }, { "type" : "hexstr", - "value" : "0x8847" + "value" : "0x01" } ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 130, - "column" : 31, - "source_fragment" : "0x8847; ..." - } - } - ] - }, - { - "name" : "FabricEgress.egress_next.push_outer_vlan", - "id" : 142, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "vlan_tag" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "line" : 196, + "column" : 21, + "source_fragment" : "1; ..." } }, { @@ -17019,18 +17742,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["report_fixed_header", "seq_no"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, + "filename" : "include/int/int_report.p4", + "line" : 42, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.report_fixed_header.seq_no = 0" } }, { @@ -17038,37 +17761,44 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["report_fixed_header", "ingress_tstamp"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["standard_metadata", "enq_timestamp"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, + "filename" : "include/int/int_report.p4", + "line" : 44, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp" } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", + "id" : 146, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["udp", "dport"] }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["intl4_tail", "dest_port"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/int/int_sink.p4", + "line" : 27, + "column" : 8, + "source_fragment" : "hdr.udp.dport = hdr.intl4_tail.dest_port" } }, { @@ -17076,40 +17806,97 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["ipv4", "dscp"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["intl4_tail", "dscp"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, + "filename" : "include/int/int_sink.p4", + "line" : 28, "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "source_fragment" : "hdr.ipv4.dscp = hdr.intl4_tail.dscp" } } ] }, { - "name" : "FabricEgress.egress_next.push_inner_vlan", - "id" : 143, + "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", + "id" : 147, "runtime_data" : [], "primitives" : [ { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_vlan_tag" + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "-", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 234, + "filename" : "include/int/int_sink.p4", + "line" : 35, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.setValid()" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes" } }, { @@ -17117,199 +17904,258 @@ "parameters" : [ { "type" : "field", - "value" : ["inner_vlan_tag", "cfi"] + "value" : ["udp", "len"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_cfi7"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "-", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 235, + "filename" : "include/int/int_sink.p4", + "line" : 36, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." + "source_fragment" : "hdr.udp.len = hdr.udp.len - len_bytes" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["inner_vlan_tag", "pri"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_pri6"] + "type" : "header", + "value" : "int_header" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 236, + "filename" : "include/int/int_sink.p4", + "line" : 38, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." + "source_fragment" : "hdr.int_header.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["inner_vlan_tag", "vlan_id"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._inner_vlan_id5"] + "type" : "header", + "value" : "int_data" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 237, + "filename" : "include/int/int_sink.p4", + "line" : 39, "column" : 8, - "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." + "source_fragment" : "hdr.int_data.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["inner_vlan_tag", "eth_type"] - }, - { - "type" : "hexstr", - "value" : "0x8100" - } + "type" : "header", + "value" : "intl4_shim" + } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/int/int_sink.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "eth_type"] - }, - { - "type" : "hexstr", - "value" : "0x8100" + "type" : "header", + "value" : "intl4_tail" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/int/int_sink.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.setInvalid()" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 144, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "remove_header", "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "int_switch_id" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, + "filename" : "include/int/int_sink.p4", + "line" : 42, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "source_fragment" : "hdr.int_switch_id.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "cfi"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "type" : "header", + "value" : "int_port_ids" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, + "filename" : "include/int/int_sink.p4", + "line" : 43, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.int_port_ids.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "pri"] - }, + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_sink.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "type" : "header", + "value" : "int_q_occupancy" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, + "filename" : "include/int/int_sink.p4", + "line" : 45, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.int_q_occupancy.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "eth_type"] - }, + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_sink.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ { - "type" : "hexstr", - "value" : "0x8100" + "type" : "header", + "value" : "int_egress_tstamp" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/int/int_sink.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" } }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] - }, + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_sink.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "type" : "header", + "value" : "int_egress_tx_util" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, + "filename" : "include/int/int_sink.p4", + "line" : 49, "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" } } ] }, { - "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 145, + "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "id" : 148, "runtime_data" : [], "primitives" : [ { @@ -17317,43 +18163,40 @@ "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "mpls" } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 256, + "line" : 204, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setInvalid()" + "source_fragment" : "hdr.mpls.setInvalid()" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.drop", - "id" : 146, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["eth_type", "value"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_eth_type8"] } ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 261, + "line" : 206, "column" : 8, - "source_fragment" : "mark_to_drop(standard_metadata)" + "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." } } ] }, { - "name" : "FabricEgress.spgw.gtpu_encap", - "id" : 147, + "name" : "FabricEgress.egress_next.set_mpls", + "id" : 149, "runtime_data" : [], "primitives" : [ { @@ -17361,14 +18204,14 @@ "parameters" : [ { "type" : "header", - "value" : "gtpu_ipv4" + "value" : "mpls" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 300, + "filename" : "include/control/next.p4", + "line" : 211, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.setValid()" + "source_fragment" : "hdr.mpls.setValid()" } }, { @@ -17376,18 +18219,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "version"] + "value" : ["mpls", "label"] }, { - "type" : "hexstr", - "value" : "0x04" + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_label16"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 301, + "filename" : "include/control/next.p4", + "line" : 212, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.version = 4" + "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." } }, { @@ -17395,18 +18238,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "ihl"] + "value" : ["mpls", "tc"] }, { "type" : "hexstr", - "value" : "0x05" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 147, - "column" : 28, - "source_fragment" : "5; ..." + "filename" : "include/control/next.p4", + "line" : 213, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = 3w0" } }, { @@ -17414,18 +18257,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "dscp"] + "value" : ["mpls", "bos"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 303, + "filename" : "include/control/next.p4", + "line" : 214, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" + "source_fragment" : "hdr.mpls.bos = 1w1" } }, { @@ -17433,18 +18276,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "ecn"] + "value" : ["mpls", "ttl"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl17"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 304, + "filename" : "include/control/next.p4", + "line" : 215, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" + "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." } }, { @@ -17452,60 +18295,40 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "total_len"] + "value" : ["eth_type", "value"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0024" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x8847" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 305, - "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + "filename" : "include/control/../define.p4", + "line" : 147, + "column" : 31, + "source_fragment" : "0x8847; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_outer_vlan", + "id" : 150, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "identification"] - }, - { - "type" : "hexstr", - "value" : "0x1513" + "type" : "header", + "value" : "vlan_tag" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 307, + "filename" : "include/control/next.p4", + "line" : 223, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" + "source_fragment" : "hdr.vlan_tag.setValid()" } }, { @@ -17513,18 +18336,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "flags"] + "value" : ["vlan_tag", "cfi"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 308, + "filename" : "include/control/next.p4", + "line" : 224, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.flags = 0" + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } }, { @@ -17532,18 +18355,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "frag_offset"] + "value" : ["vlan_tag", "pri"] }, { - "type" : "hexstr", - "value" : "0x0000" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 309, + "filename" : "include/control/next.p4", + "line" : 225, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." } }, { @@ -17551,18 +18374,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "ttl"] + "value" : ["vlan_tag", "eth_type"] }, { "type" : "hexstr", - "value" : "0x40" + "value" : "0x8100" } ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 160, - "column" : 32, - "source_fragment" : "64; ..." + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } }, { @@ -17570,37 +18393,40 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "protocol"] + "value" : ["vlan_tag", "vlan_id"] }, { - "type" : "hexstr", - "value" : "0x11" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 144, - "column" : 25, - "source_fragment" : "17; ..." + "filename" : "include/control/next.p4", + "line" : 227, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_inner_vlan", + "id" : 151, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "src_addr"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr26"] + "type" : "header", + "value" : "inner_vlan_tag" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 312, + "filename" : "include/control/next.p4", + "line" : 234, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." + "source_fragment" : "hdr.inner_vlan_tag.setValid()" } }, { @@ -17608,18 +18434,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "dst_addr"] + "value" : ["inner_vlan_tag", "cfi"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr27"] + "value" : ["scalars", "userMetadata._inner_vlan_cfi15"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 313, + "filename" : "include/control/next.p4", + "line" : 235, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..." } }, { @@ -17627,33 +18453,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "hdr_checksum"] + "value" : ["inner_vlan_tag", "pri"] }, { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 314, - "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "gtpu_udp" + "type" : "field", + "value" : ["scalars", "userMetadata._inner_vlan_pri14"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 316, + "filename" : "include/control/next.p4", + "line" : 236, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.setValid()" + "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..." } }, { @@ -17661,18 +18472,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "sport"] + "value" : ["inner_vlan_tag", "vlan_id"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port25"] + "value" : ["scalars", "userMetadata._inner_vlan_id13"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 317, + "filename" : "include/control/next.p4", + "line" : 237, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..." } }, { @@ -17680,18 +18491,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "dport"] + "value" : ["inner_vlan_tag", "eth_type"] }, { "type" : "hexstr", - "value" : "0x0868" + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 318, - "column" : 8, - "source_fragment" : "hdr.gtpu_udp.dport = 2152" + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } }, { @@ -17699,75 +18510,59 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "len"] + "value" : ["vlan_tag", "eth_type"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len23"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 319, - "column" : 8, - "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 152, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_udp", "checksum"] - }, - { - "type" : "hexstr", - "value" : "0x0000" + "type" : "header", + "value" : "vlan_tag" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 321, + "filename" : "include/control/next.p4", + "line" : 223, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.checksum = 0" + "source_fragment" : "hdr.vlan_tag.setValid()" } }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "outer_gtpu" + "type" : "field", + "value" : ["vlan_tag", "cfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 324, + "filename" : "include/control/next.p4", + "line" : 224, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.setValid()" + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } }, { @@ -17775,18 +18570,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "version"] + "value" : ["vlan_tag", "pri"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 325, + "filename" : "include/control/next.p4", + "line" : 225, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.version = 0x01" + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." } }, { @@ -17794,18 +18589,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "pt"] + "value" : ["vlan_tag", "eth_type"] }, { "type" : "hexstr", - "value" : "0x01" + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 326, - "column" : 8, - "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } }, { @@ -17813,18 +18608,116 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "spare"] + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 227, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 153, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 256, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 154, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 261, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 155, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 156, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] }, { "type" : "hexstr", "value" : "0x00" } ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 135, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, + { + "name" : "FabricEgress.spgw.gtpu_encap", + "id" : 157, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 327, + "line" : 311, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.spare = 0" + "source_fragment" : "hdr.gtpu_ipv4.setValid()" } }, { @@ -17832,18 +18725,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "ex_flag"] + "value" : ["gtpu_ipv4", "version"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x04" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 328, + "line" : 312, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + "source_fragment" : "hdr.gtpu_ipv4.version = 4" } }, { @@ -17851,18 +18744,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "seq_flag"] + "value" : ["gtpu_ipv4", "ihl"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x05" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 329, - "column" : 8, - "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + "filename" : "include/control/../define.p4", + "line" : 164, + "column" : 28, + "source_fragment" : "5; ..." } }, { @@ -17870,7 +18763,7 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "npdu_flag"] + "value" : ["gtpu_ipv4", "dscp"] }, { "type" : "hexstr", @@ -17879,9 +18772,9 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 330, + "line" : 314, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } }, { @@ -17889,18 +18782,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "msgtype"] + "value" : ["gtpu_ipv4", "ecn"] }, { "type" : "hexstr", - "value" : "0xff" + "value" : "0x00" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 331, + "line" : 315, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } }, { @@ -17908,18 +18801,41 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "msglen"] + "value" : ["gtpu_ipv4", "total_len"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len23"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0024" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 316, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } }, { @@ -17927,57 +18843,37 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "teid"] + "value" : ["gtpu_ipv4", "identification"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid24"] + "type" : "hexstr", + "value" : "0x1513" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 318, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." - } - } - ] - }, - { - "name" : "packetio41", - "id" : 148, - "runtime_data" : [], - "primitives" : [ - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 41, - "column" : 12, - "source_fragment" : "exit" + "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } - } - ] - }, - { - "name" : "packetio44", - "id" : 149, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_in" + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 44, - "column" : 12, - "source_fragment" : "hdr.packet_in.setValid()" + "filename" : "include/control/spgw.p4", + "line" : 319, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } }, { @@ -17985,251 +18881,174 @@ "parameters" : [ { "type" : "field", - "value" : ["packet_in", "ingress_port"] + "value" : ["gtpu_ipv4", "frag_offset"] }, { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 45, - "column" : 12, - "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + "filename" : "include/control/spgw.p4", + "line" : 320, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } }, { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 47, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "next283", - "id" : 150, - "runtime_data" : [], - "primitives" : [ - { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 283, - "column" : 12, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/../define.p4", + "line" : 177, + "column" : 32, + "source_fragment" : "64; ..." } - } - ] - }, - { - "name" : "next299", - "id" : 151, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "inner_vlan_tag" + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 299, - "column" : 12, - "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." } - } - ] - }, - { - "name" : "next310", - "id" : 152, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr38"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 310, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 323, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } - } - ] - }, - { - "name" : "next309", - "id" : 153, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["gtpu_ipv4", "dst_addr"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["mpls", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr39"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 309, - "column" : 12, - "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 324, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." } - } - ] - }, - { - "name" : "next314", - "id" : 154, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 325, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "standard_metadata" + "value" : "gtpu_udp" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 314, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.setValid()" } - } - ] - }, - { - "name" : "next313", - "id" : 155, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "ttl"] + "value" : ["gtpu_udp", "sport"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port37"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 313, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 328, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." } - } - ] - }, - { - "name" : "next319", - "id" : 156, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_udp", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 319, - "column" : 45, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.dport = 2152" } - } - ] - }, - { - "name" : "next318", - "id" : 157, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv6", "hop_limit"] + "value" : ["gtpu_udp", "len"] }, { "type" : "expression", @@ -18243,51 +19062,1443 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["ipv6", "hop_limit"] + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0x0010" } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 318, - "column" : 16, - "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1" + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } - } - ] - }, - { - "name" : "spgw342", - "id" : 158, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricEgress.spgw.pdr_counter" + "type" : "field", + "value" : ["gtpu_udp", "checksum"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id28"] + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, + "line" : 332, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 335, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 336, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 337, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 338, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 339, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 340, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 341, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 342, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_teid36"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 343, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." + } + } + ] + }, + { + "name" : "FabricEgress.spgw.gtpu_encap_qfi", + "id" : 158, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 311, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 312, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.version = 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 164, + "column" : 28, + "source_fragment" : "5; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 314, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 315, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0024" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 316, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 318, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 319, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 320, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 177, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr38"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 323, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr39"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 324, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 325, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "sport"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port37"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 328, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.dport = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 332, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 335, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 336, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 337, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 338, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 339, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 340, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 341, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 342, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_teid36"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 343, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x002c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 349, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0018" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 352, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len35"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 355, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 357, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 1" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 358, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_options", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 359, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.next_ext = 0x85" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 360, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 88, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 362, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.len = 8w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "qfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi43"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 363, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.qfi = fabric_md.spgw.qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 364, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.next_ext = 0x0" + } + } + ] + }, + { + "name" : "packetio41", + "id" : 159, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio44", + "id" : 160, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 45, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 47, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "next283", + "id" : 161, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 283, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next299", + "id" : 162, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 299, + "column" : 12, + "source_fragment" : "hdr.inner_vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "next310", + "id" : 163, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 310, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next309", + "id" : 164, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 309, + "column" : 12, + "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + } + } + ] + }, + { + "name" : "next314", + "id" : 165, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 314, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next313", + "id" : 166, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 313, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "next319", + "id" : 167, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 319, + "column" : 45, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next318", + "id" : 168, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv6", "hop_limit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv6", "hop_limit"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 318, + "column" : 16, + "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1" + } + } + ] + }, + { + "name" : "spgw377", + "id" : 169, + "runtime_data" : [], + "primitives" : [ + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricEgress.spgw.pdr_counter" + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ctr_id40"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 377, "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } @@ -18296,7 +20507,7 @@ }, { "name" : "act", - "id" : 159, + "id" : 170, "runtime_data" : [], "primitives" : [ { @@ -18326,7 +20537,7 @@ }, { "name" : "int_transit420", - "id" : 160, + "id" : 171, "runtime_data" : [], "primitives" : [ { @@ -18362,7 +20573,7 @@ }, { "name" : "int_transit428", - "id" : 161, + "id" : 172, "runtime_data" : [], "primitives" : [ { @@ -18388,7 +20599,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] } } }, @@ -18411,7 +20622,7 @@ }, { "name" : "int_transit425", - "id" : 162, + "id" : 173, "runtime_data" : [], "primitives" : [ { @@ -18460,7 +20671,7 @@ }, { "name" : "int_transit431", - "id" : 163, + "id" : 174, "runtime_data" : [], "primitives" : [ { @@ -18486,7 +20697,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes47"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes61"] } } }, @@ -18509,7 +20720,7 @@ }, { "name" : "int_transit434", - "id" : 164, + "id" : 175, "runtime_data" : [], "primitives" : [ { @@ -18535,7 +20746,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words46"] + "value" : ["scalars", "userMetadata._int_meta_new_words60"] } } }, @@ -18555,6 +20766,84 @@ } } ] + }, + { + "name" : "slicing155", + "id" : 176, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 16, + "source_fragment" : "hdr.ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing159", + "id" : 177, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 178, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp32"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] } ], "pipelines" : [ @@ -18563,20 +20852,20 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 47, + "line" : 49, "column" : 8, "source_fragment" : "FabricIngress" }, - "init_table" : "node_2", + "init_table" : "tbl_lookup_md_init23", "tables" : [ { - "name" : "tbl_packetio25", + "name" : "tbl_lookup_md_init23", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 42, - "source_fragment" : "= hdr.packet_out.egress_port; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." }, "key" : [], "match_type" : "exact", @@ -18585,286 +20874,201 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [71], - "actions" : ["packetio25"], - "base_default_next" : "FabricIngress.spgw.interfaces", + "action_ids" : [83], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", "next_tables" : { - "packetio25" : "FabricIngress.spgw.interfaces" + "lookup_md_init23" : "node_3" }, "default_entry" : { - "action_id" : 71, + "action_id" : 83, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.interfaces", + "name" : "tbl_lookup_md_init32", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 129, - "column" : 10, - "source_fragment" : "interfaces" + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." }, - "key" : [ - { - "match_type" : "lpm", - "name" : "ipv4_dst_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "gtpu_is_valid", - "target" : ["gtpu", "$valid$"], - "mask" : null - } - ], - "match_type" : "lpm", + "key" : [], + "match_type" : "exact", "type" : "simple", - "max_size" : 128, + "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62, 63], - "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], - "base_default_next" : null, + "action_ids" : [78], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", "next_tables" : { - "__HIT__" : "node_5", - "__MISS__" : "node_16" + "lookup_md_init32" : "node_5" }, "default_entry" : { - "action_id" : 63, + "action_id" : 78, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "name" : "tbl_lookup_md_init37", "id" : 2, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54, 55, 56, 57], - "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], - "base_default_next" : "node_7", + "action_ids" : [75], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_7" + "lookup_md_init37" : "node_19" }, "default_entry" : { - "action_id" : 57, + "action_id" : 75, "action_const" : true, "action_data" : [], "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init40", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 54, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 55, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 56, - "action_data" : [] - }, - "priority" : 3 - } - ] + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [76], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init40" : "node_19" + }, + "default_entry" : { + "action_id" : 76, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init43", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "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" : [77], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init43" : "node_19" + }, + "default_entry" : { + "action_id" : 77, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } }, { - "name" : "FabricIngress.spgw.uplink_pdrs", - "id" : 3, + "name" : "tbl_lookup_md_init47", + "id" : 5, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 176, - "column" : 10, - "source_fragment" : "uplink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "tunnel_ipv4_dst", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "teid", - "target" : ["gtpu", "teid"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [65, 67, 15], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [82], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init47" : "node_13" }, "default_entry" : { - "action_id" : 15, - "action_const" : false, + "action_id" : 82, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.downlink_pdrs", - "id" : 4, + "name" : "tbl_lookup_md_init52", + "id" : 6, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 164, - "column" : 10, - "source_fragment" : "downlink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "ue_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [64, 66, 14], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [79], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init52" : "node_19" }, "default_entry" : { - "action_id" : 14, - "action_const" : false, + "action_id" : 79, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "tbl_spgw265", - "id" : 5, + "name" : "tbl_lookup_md_init55", + "id" : 7, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." }, "key" : [], "match_type" : "exact", @@ -18873,223 +21077,147 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [72], - "actions" : ["spgw265"], - "base_default_next" : "node_12", + "action_ids" : [80], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", "next_tables" : { - "spgw265" : "node_12" + "lookup_md_init55" : "node_19" }, "default_entry" : { - "action_id" : 72, + "action_id" : 80, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", - "id" : 6, + "name" : "tbl_lookup_md_init58", + "id" : 8, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58, 59, 60, 61], - "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw.fars", + "action_ids" : [81], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" + "lookup_md_init58" : "node_19" }, "default_entry" : { - "action_id" : 61, + "action_id" : 81, "action_const" : true, "action_data" : [], "action_entry_const" : true - }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 58, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 59, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 60, - "action_data" : [] - }, - "priority" : 3 - } - ] + } }, { - "name" : "FabricIngress.spgw.fars", - "id" : 7, + "name" : "tbl_packetio25", + "id" : 9, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 233, - "column" : 10, - "source_fragment" : "fars" + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 42, + "source_fragment" : "= hdr.packet_out.egress_port; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "far_id", - "target" : ["scalars", "userMetadata._spgw_far_id29"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2048, + "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68, 69, 70], - "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], - "base_default_next" : "tbl_spgw282", + "action_ids" : [84], + "actions" : ["packetio25"], + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", "next_tables" : { - "FabricIngress.spgw.load_normal_far" : "tbl_spgw282", - "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw282", - "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw282" + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" }, "default_entry" : { - "action_id" : 68, + "action_id" : 84, "action_const" : true, - "action_data" : ["0x1", "0x0"], + "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw282", - "id" : 8, + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "=" + "filename" : "include/control/slicing.p4", + "line" : 49, + "column" : 10, + "source_fragment" : "classifier" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 512, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [73], - "actions" : ["spgw282"], - "base_default_next" : "node_16", + "action_ids" : [54, 55], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", "next_tables" : { - "spgw282" : "node_16" + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" }, "default_entry" : { - "action_id" : 73, + "action_id" : 54, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_filtering113", - "id" : 9, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -19103,14 +21231,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [74], + "action_ids" : [85], "actions" : ["filtering113"], - "base_default_next" : "node_18", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_18" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 74, + "action_id" : 85, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19118,7 +21246,7 @@ }, { "name" : "tbl_filtering119", - "id" : 10, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 119, @@ -19132,14 +21260,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [75], + "action_ids" : [86], "actions" : ["filtering119"], - "base_default_next" : "node_20", + "base_default_next" : "node_26", "next_tables" : { - "filtering119" : "node_20" + "filtering119" : "node_26" }, "default_entry" : { - "action_id" : 75, + "action_id" : 86, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19147,7 +21275,7 @@ }, { "name" : "tbl_filtering129", - "id" : 11, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -19161,14 +21289,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [76], + "action_ids" : [87], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 76, + "action_id" : 87, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19176,7 +21304,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -19232,7 +21360,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 13, + "id" : 15, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -19261,7 +21389,7 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata._ip_eth_type0"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], "mask" : null } ], @@ -19273,9 +21401,9 @@ "direct_meters" : null, "action_ids" : [33], "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_24", + "base_default_next" : "node_30", "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_24" + "FabricIngress.filtering.set_forwarding_type" : "node_30" }, "default_entry" : { "action_id" : 33, @@ -19285,243 +21413,485 @@ } }, { - "name" : "FabricIngress.forwarding.bridging", - "id" : 14, + "name" : "FabricIngress.spgw.interfaces", + "id" : 16, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 46, + "filename" : "include/control/spgw.p4", + "line" : 132, "column" : 10, - "source_fragment" : "bridging" + "source_fragment" : "interfaces" }, "key" : [ { - "match_type" : "exact", - "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["ipv4", "dst_addr"], "mask" : null }, { - "match_type" : "ternary", - "name" : "eth_dst", - "target" : ["ethernet", "dst_addr"], + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["gtpu", "$valid$"], "mask" : null } ], - "match_type" : "ternary", + "match_type" : "lpm", "type" : "simple", - "max_size" : 1024, - "with_counters" : true, + "max_size" : 128, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [34, 4], - "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_33", + "action_ids" : [66, 67], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_33", - "nop" : "node_33" + "__HIT__" : "node_32", + "__MISS__" : "node_43" }, "default_entry" : { - "action_id" : 4, + "action_id" : 67, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.forwarding.mpls", - "id" : 15, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "id" : 17, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 71, + "filename" : "include/control/spgw.p4", + "line" : 77, "column" : 10, - "source_fragment" : "mpls" + "source_fragment" : "decap_gtpu" }, "key" : [ { "match_type" : "exact", - "name" : "mpls_label", - "target" : ["scalars", "userMetadata._mpls_label8"], + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [35, 5], - "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_33", + "action_ids" : [58, 59, 60, 61], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_34", "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_33", - "nop" : "node_33" + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_34", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_34", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_34", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_34" }, "default_entry" : { - "action_id" : 5, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true - } + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 58, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 59, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 60, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "FabricIngress.forwarding.routing_v4", - "id" : 16, + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 18, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 108, + "filename" : "include/control/spgw.p4", + "line" : 184, "column" : 10, - "source_fragment" : "routing_v4" + "source_fragment" : "uplink_pdrs" }, "key" : [ { - "match_type" : "lpm", - "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata._ipv4_dst_addr20"], + "match_type" : "exact", + "name" : "tunnel_ipv4_dst", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "teid", + "target" : ["gtpu", "teid"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "has_qfi", + "target" : ["gtpu_ext_psc", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "qfi", + "target" : ["scalars", "userMetadata._spgw_qfi43"], "mask" : null } ], - "match_type" : "lpm", + "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36, 37, 6], - "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_33", + "action_ids" : [69, 71, 15], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_37", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_33", - "FabricIngress.forwarding.nop_routing_v4" : "node_33", - "nop" : "node_33" + "FabricIngress.spgw.load_pdr" : "node_37", + "FabricIngress.spgw.load_pdr_qos" : "node_37", + "NoAction" : "node_37" }, "default_entry" : { - "action_id" : 6, + "action_id" : 15, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricIngress.forwarding.routing_v6", - "id" : 17, + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 19, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 135, + "filename" : "include/control/spgw.p4", + "line" : 172, "column" : 10, - "source_fragment" : "routing_v6" + "source_fragment" : "downlink_pdrs" }, "key" : [ { - "match_type" : "lpm", - "name" : "ipv6_dst", - "target" : ["ipv6", "dst_addr"], + "match_type" : "exact", + "name" : "ue_addr", + "target" : ["ipv4", "dst_addr"], "mask" : null } ], - "match_type" : "lpm", + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [68, 70, 14], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_37", + "next_tables" : { + "FabricIngress.spgw.load_pdr" : "node_37", + "FabricIngress.spgw.load_pdr_qos" : "node_37", + "NoAction" : "node_37" + }, + "default_entry" : { + "action_id" : 14, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_spgw277", + "id" : 20, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + }, + "key" : [], + "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38, 7], - "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "nop"], - "base_default_next" : "node_33", + "action_ids" : [88], + "actions" : ["spgw277"], + "base_default_next" : "node_39", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v6" : "node_33", - "nop" : "node_33" + "spgw277" : "node_39" }, "default_entry" : { - "action_id" : 7, + "action_id" : 88, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.pre_next.next_mpls", - "id" : 18, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 21, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 36, + "filename" : "include/control/spgw.p4", + "line" : 77, "column" : 10, - "source_fragment" : "next_mpls" + "source_fragment" : "decap_gtpu" }, "key" : [ { "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39, 8], - "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], - "base_default_next" : "FabricIngress.pre_next.next_vlan", + "action_ids" : [62, 63, 64, 65], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", - "nop" : "FabricIngress.pre_next.next_vlan" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 8, + "action_id" : 65, "action_const" : true, "action_data" : [], "action_entry_const" : true - } + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 62, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 63, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 64, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "FabricIngress.pre_next.next_vlan", - "id" : 19, + "name" : "FabricIngress.spgw.fars", + "id" : 22, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 73, + "filename" : "include/control/spgw.p4", + "line" : 245, "column" : 10, - "source_fragment" : "next_vlan" + "source_fragment" : "fars" }, "key" : [ { "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "name" : "far_id", + "target" : ["scalars", "userMetadata._spgw_far_id41"], "mask" : null } ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, - "with_counters" : true, + "max_size" : 2048, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40, 41, 9], - "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"], - "base_default_next" : "tbl_acl27", + "action_ids" : [72, 73, 74], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_spgw294", "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "FabricIngress.pre_next.set_double_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" + "FabricIngress.spgw.load_normal_far" : "tbl_spgw294", + "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw294", + "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw294" }, "default_entry" : { - "action_id" : 9, + "action_id" : 72, "action_const" : true, - "action_data" : [], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { - "name" : "tbl_acl27", - "id" : 20, + "name" : "tbl_spgw294", + "id" : 23, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -19530,188 +21900,244 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [83], - "actions" : ["acl27"], - "base_default_next" : "node_37", + "action_ids" : [89], + "actions" : ["spgw294"], + "base_default_next" : "node_43", "next_tables" : { - "acl27" : "node_37" + "spgw294" : "node_43" }, "default_entry" : { - "action_id" : 83, + "action_id" : 89, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl98", - "id" : 21, + "name" : "FabricIngress.forwarding.bridging", + "id" : 24, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "filename" : "include/control/forwarding.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "bridging" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "exact", + "name" : "vlan_id", + "target" : ["scalars", "userMetadata._vlan_id9"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "eth_dst", + "target" : ["ethernet", "dst_addr"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [79], - "actions" : ["acl98"], - "base_default_next" : "node_39", + "action_ids" : [34, 4], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], + "base_default_next" : "node_52", "next_tables" : { - "acl98" : "node_39" + "FabricIngress.forwarding.set_next_id_bridging" : "node_52", + "nop" : "node_52" }, "default_entry" : { - "action_id" : 79, + "action_id" : 4, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl102", - "id" : 22, + "name" : "FabricIngress.forwarding.mpls", + "id" : 25, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "source_fragment" : "= hdr.inner_tcp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 71, + "column" : 10, + "source_fragment" : "mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "mpls_label", + "target" : ["scalars", "userMetadata._mpls_label16"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [77], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [35, 5], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], + "base_default_next" : "node_52", "next_tables" : { - "acl102" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_52", + "nop" : "node_52" }, "default_entry" : { - "action_id" : 77, + "action_id" : 5, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl105", - "id" : 23, + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 26, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "source_fragment" : "= hdr.inner_udp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 108, + "column" : 10, + "source_fragment" : "routing_v4" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._ipv4_dst_addr28"], + "mask" : null + } + ], + "match_type" : "lpm", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [78], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [36, 37, 6], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], + "base_default_next" : "node_52", "next_tables" : { - "acl105" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_52", + "FabricIngress.forwarding.nop_routing_v4" : "node_52", + "nop" : "node_52" }, "default_entry" : { - "action_id" : 78, - "action_const" : true, + "action_id" : 6, + "action_const" : false, "action_data" : [], - "action_entry_const" : true + "action_entry_const" : false } }, { - "name" : "tbl_acl109", - "id" : 24, + "name" : "FabricIngress.forwarding.routing_v6", + "id" : 27, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." + "filename" : "include/control/forwarding.p4", + "line" : 135, + "column" : 10, + "source_fragment" : "routing_v6" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv6_dst", + "target" : ["ipv6", "dst_addr"], + "mask" : null + } + ], + "match_type" : "lpm", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [82], - "actions" : ["acl109"], - "base_default_next" : "node_45", + "action_ids" : [38, 7], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "nop"], + "base_default_next" : "node_52", "next_tables" : { - "acl109" : "node_45" + "FabricIngress.forwarding.set_next_id_routing_v6" : "node_52", + "nop" : "node_52" }, "default_entry" : { - "action_id" : 82, + "action_id" : 7, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl113", - "id" : 25, + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 28, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "source_fragment" : "= hdr.tcp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 36, + "column" : 10, + "source_fragment" : "next_mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id21"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [80], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [39, 8], + "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], + "base_default_next" : "FabricIngress.pre_next.next_vlan", "next_tables" : { - "acl113" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", + "nop" : "FabricIngress.pre_next.next_vlan" }, "default_entry" : { - "action_id" : 80, + "action_id" : 8, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl116", - "id" : 26, + "name" : "FabricIngress.pre_next.next_vlan", + "id" : 29, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "source_fragment" : "= hdr.udp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 73, + "column" : 10, + "source_fragment" : "next_vlan" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id21"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [81], - "actions" : ["acl116"], + "action_ids" : [40, 41, 9], + "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "FabricIngress.pre_next.set_double_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 81, + "action_id" : 9, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -19719,10 +22145,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 27, + "id" : 30, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -19760,19 +22186,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -19790,19 +22216,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata._port_type50"], + "target" : ["scalars", "userMetadata._port_type64"], "mask" : null } ], @@ -19814,13 +22240,13 @@ "direct_meters" : null, "action_ids" : [42, 43, 44, 45, 46], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_50", + "base_default_next" : "node_56", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_50", - "FabricIngress.acl.punt_to_cpu" : "node_50", - "FabricIngress.acl.set_clone_session_id" : "node_50", - "FabricIngress.acl.drop" : "node_50", - "FabricIngress.acl.nop_acl" : "node_50" + "FabricIngress.acl.set_next_id_acl" : "node_56", + "FabricIngress.acl.punt_to_cpu" : "node_56", + "FabricIngress.acl.set_clone_session_id" : "node_56", + "FabricIngress.acl.drop" : "node_56", + "FabricIngress.acl.nop_acl" : "node_56" }, "default_entry" : { "action_id" : 46, @@ -19831,7 +22257,7 @@ }, { "name" : "FabricIngress.next.xconnect", - "id" : 28, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 68, @@ -19848,7 +22274,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -19875,7 +22301,7 @@ }, { "name" : "FabricIngress.next.simple", - "id" : 29, + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 101, @@ -19886,7 +22312,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -19913,7 +22339,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 30, + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -19924,7 +22350,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -19946,7 +22372,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 31, + "id" : 34, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -19957,7 +22383,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id13"], + "target" : ["scalars", "userMetadata._next_id21"], "mask" : null } ], @@ -19969,10 +22395,10 @@ "direct_meters" : null, "action_ids" : [53, 13], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_55", + "base_default_next" : "node_61", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_55", - "nop" : "node_55" + "FabricIngress.next.set_mcast_group_id" : "node_61", + "nop" : "node_61" }, "default_entry" : { "action_id" : 13, @@ -19983,7 +22409,7 @@ }, { "name" : "tbl_port_counter31", - "id" : 32, + "id" : 35, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 31, @@ -19997,14 +22423,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [84], + "action_ids" : [90], "actions" : ["port_counter31"], - "base_default_next" : "node_57", + "base_default_next" : "node_63", "next_tables" : { - "port_counter31" : "node_57" + "port_counter31" : "node_63" }, "default_entry" : { - "action_id" : 84, + "action_id" : 90, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20012,7 +22438,7 @@ }, { "name" : "tbl_port_counter34", - "id" : 33, + "id" : 36, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 34, @@ -20026,14 +22452,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [85], + "action_ids" : [91], "actions" : ["port_counter34"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 85, + "action_id" : 91, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20041,7 +22467,7 @@ }, { "name" : "FabricIngress.process_set_source_sink.tb_set_source", - "id" : 34, + "id" : 37, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 46, @@ -20078,7 +22504,7 @@ }, { "name" : "FabricIngress.process_set_source_sink.tb_set_sink", - "id" : 35, + "id" : 38, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 67, @@ -20101,10 +22527,10 @@ "direct_meters" : null, "action_ids" : [17, 1], "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "nop"], - "base_default_next" : "node_61", + "base_default_next" : "node_67", "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_sink" : "node_61", - "nop" : "node_61" + "FabricIngress.process_set_source_sink.int_set_sink" : "node_67", + "nop" : "node_67" }, "default_entry" : { "action_id" : 1, @@ -20115,7 +22541,7 @@ }, { "name" : "tbl_int_main89", - "id" : 36, + "id" : 39, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 89, @@ -20129,14 +22555,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86], + "action_ids" : [92], "actions" : ["int_main89"], "base_default_next" : "FabricIngress.bng_ingress.t_line_map", "next_tables" : { "int_main89" : "FabricIngress.bng_ingress.t_line_map" }, "default_entry" : { - "action_id" : 86, + "action_id" : 92, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20144,7 +22570,7 @@ }, { "name" : "FabricIngress.bng_ingress.t_line_map", - "id" : 37, + "id" : 40, "source_info" : { "filename" : "include/bng.p4", "line" : 323, @@ -20155,13 +22581,13 @@ { "match_type" : "exact", "name" : "s_tag", - "target" : ["scalars", "userMetadata._bng_s_tag40"], + "target" : ["scalars", "userMetadata._bng_s_tag54"], "mask" : null }, { "match_type" : "exact", "name" : "c_tag", - "target" : ["scalars", "userMetadata._bng_c_tag41"], + "target" : ["scalars", "userMetadata._bng_c_tag55"], "mask" : null } ], @@ -20173,9 +22599,9 @@ "direct_meters" : null, "action_ids" : [29], "actions" : ["FabricIngress.bng_ingress.set_line"], - "base_default_next" : "node_64", + "base_default_next" : "node_70", "next_tables" : { - "FabricIngress.bng_ingress.set_line" : "node_64" + "FabricIngress.bng_ingress.set_line" : "node_70" }, "default_entry" : { "action_id" : 29, @@ -20186,7 +22612,7 @@ }, { "name" : "tbl_bng342", - "id" : 38, + "id" : 41, "source_info" : { "filename" : "include/bng.p4", "line" : 342, @@ -20200,14 +22626,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [88], + "action_ids" : [94], "actions" : ["bng342"], "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp", "next_tables" : { "bng342" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp" }, "default_entry" : { - "action_id" : 88, + "action_id" : 94, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20215,7 +22641,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp", - "id" : 39, + "id" : 42, "source_info" : { "filename" : "include/bng.p4", "line" : 51, @@ -20247,7 +22673,7 @@ "base_default_next" : null, "next_tables" : { "__HIT__" : "tbl_bng126", - "__MISS__" : "node_68" + "__MISS__" : "node_74" }, "default_entry" : { "action_id" : 2, @@ -20258,7 +22684,7 @@ }, { "name" : "tbl_bng126", - "id" : 40, + "id" : 43, "source_info" : { "filename" : "include/bng.p4", "line" : 126, @@ -20272,14 +22698,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87], + "action_ids" : [93], "actions" : ["bng126"], - "base_default_next" : "node_68", + "base_default_next" : "node_74", "next_tables" : { - "bng126" : "node_68" + "bng126" : "node_74" }, "default_entry" : { - "action_id" : 87, + "action_id" : 93, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20287,7 +22713,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4", - "id" : 41, + "id" : 44, "source_info" : { "filename" : "include/bng.p4", "line" : 87, @@ -20298,7 +22724,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id37"], + "target" : ["scalars", "userMetadata._bng_line_id51"], "mask" : null }, { @@ -20322,10 +22748,10 @@ "direct_meters" : null, "action_ids" : [21, 19], "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_bng131", - "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null + "FabricIngress.bng_ingress.upstream.term_enabled_v4" : "tbl_slicing114" }, "default_entry" : { "action_id" : 19, @@ -20336,7 +22762,7 @@ }, { "name" : "tbl_bng131", - "id" : 42, + "id" : 45, "source_info" : { "filename" : "include/bng.p4", "line" : 131, @@ -20350,14 +22776,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [89], + "action_ids" : [95], "actions" : ["bng131"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng131" : null + "bng131" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 89, + "action_id" : 95, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20365,7 +22791,7 @@ }, { "name" : "tbl_bng112", - "id" : 43, + "id" : 46, "source_info" : { "filename" : "include/bng.p4", "line" : 112, @@ -20379,14 +22805,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [91], + "action_ids" : [97], "actions" : ["bng112"], "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6", "next_tables" : { "bng112" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6" }, "default_entry" : { - "action_id" : 91, + "action_id" : 97, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20394,7 +22820,7 @@ }, { "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6", - "id" : 44, + "id" : 47, "source_info" : { "filename" : "include/bng.p4", "line" : 109, @@ -20405,7 +22831,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id37"], + "target" : ["scalars", "userMetadata._bng_line_id51"], "mask" : null }, { @@ -20429,10 +22855,10 @@ "direct_meters" : null, "action_ids" : [22, 20], "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v6", "FabricIngress.bng_ingress.upstream.term_disabled"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_bng139", - "FabricIngress.bng_ingress.upstream.term_enabled_v6" : null + "FabricIngress.bng_ingress.upstream.term_enabled_v6" : "tbl_slicing114" }, "default_entry" : { "action_id" : 20, @@ -20443,7 +22869,7 @@ }, { "name" : "tbl_bng139", - "id" : 45, + "id" : 48, "source_info" : { "filename" : "include/bng.p4", "line" : 139, @@ -20457,14 +22883,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [90], + "action_ids" : [96], "actions" : ["bng139"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng139" : null + "bng139" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 90, + "action_id" : 96, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20472,7 +22898,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map", - "id" : 46, + "id" : 49, "source_info" : { "filename" : "include/bng.p4", "line" : 169, @@ -20483,7 +22909,7 @@ { "match_type" : "exact", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id37"], + "target" : ["scalars", "userMetadata._bng_line_id51"], "mask" : null } ], @@ -20497,8 +22923,8 @@ "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"], "base_default_next" : null, "next_tables" : { - "__MISS__" : null, - "__HIT__" : "node_77" + "__HIT__" : "node_83", + "__MISS__" : "tbl_slicing114" }, "default_entry" : { "action_id" : 3, @@ -20509,7 +22935,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4", - "id" : 47, + "id" : 50, "source_info" : { "filename" : "include/bng.p4", "line" : 194, @@ -20520,7 +22946,7 @@ { "match_type" : "ternary", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id37"], + "target" : ["scalars", "userMetadata._bng_line_id51"], "mask" : null }, { @@ -20550,7 +22976,7 @@ "direct_meters" : null, "action_ids" : [25, 27], "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_bng238", "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng241" @@ -20564,7 +22990,7 @@ }, { "name" : "tbl_bng238", - "id" : 48, + "id" : 51, "source_info" : { "filename" : "include/bng.p4", "line" : 238, @@ -20578,14 +23004,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [92], + "action_ids" : [98], "actions" : ["bng238"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng238" : null + "bng238" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 92, + "action_id" : 98, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20593,7 +23019,7 @@ }, { "name" : "tbl_bng241", - "id" : 49, + "id" : 52, "source_info" : { "filename" : "include/bng.p4", "line" : 241, @@ -20607,14 +23033,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [93], + "action_ids" : [99], "actions" : ["bng241"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng241" : null + "bng241" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 93, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20622,7 +23048,7 @@ }, { "name" : "FabricIngress.bng_ingress.downstream.t_qos_v6", - "id" : 50, + "id" : 53, "source_info" : { "filename" : "include/bng.p4", "line" : 210, @@ -20633,7 +23059,7 @@ { "match_type" : "ternary", "name" : "line_id", - "target" : ["scalars", "userMetadata._bng_line_id37"], + "target" : ["scalars", "userMetadata._bng_line_id51"], "mask" : null }, { @@ -20657,7 +23083,7 @@ "direct_meters" : null, "action_ids" : [26, 28], "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_bng250", "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng253" @@ -20671,7 +23097,7 @@ }, { "name" : "tbl_bng250", - "id" : 51, + "id" : 54, "source_info" : { "filename" : "include/bng.p4", "line" : 250, @@ -20685,14 +23111,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [94], + "action_ids" : [100], "actions" : ["bng250"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "bng250" : null + "bng250" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 94, + "action_id" : 100, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -20700,7 +23126,7 @@ }, { "name" : "tbl_bng253", - "id" : 52, + "id" : 55, "source_info" : { "filename" : "include/bng.p4", "line" : 253, @@ -20714,16 +23140,94 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95], - "actions" : ["bng253"], + "action_ids" : [101], + "actions" : ["bng253"], + "base_default_next" : "tbl_slicing114", + "next_tables" : { + "bng253" : "tbl_slicing114" + }, + "default_entry" : { + "action_id" : 101, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing114", + "id" : 56, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [102], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing114" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 102, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 57, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 93, + "column" : 10, + "source_fragment" : "queues" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id29"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc31"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color30"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [56, 57], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], "base_default_next" : null, "next_tables" : { - "bng253" : null + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null }, "default_entry" : { - "action_id" : 95, + "action_id" : 56, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0"], "action_entry_const" : true } } @@ -20744,23 +23248,23 @@ "input" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr19"] + "value" : ["scalars", "userMetadata._ipv4_src_addr27"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr20"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr28"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto16"] + "value" : ["scalars", "userMetadata._ip_proto24"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport17"] + "value" : ["scalars", "userMetadata._l4_sport25"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport18"] + "value" : ["scalars", "userMetadata._l4_dport26"] } ] } @@ -20768,13 +23272,13 @@ ], "conditionals" : [ { - "name" : "node_2", + "name" : "node_3", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 24, + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, "column" : 12, - "source_fragment" : "hdr.packet_out.isValid()" + "source_fragment" : "hdr.inner_ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -20783,47 +23287,44 @@ "left" : null, "right" : { "type" : "field", - "value" : ["packet_out", "$valid$"] + "value" : ["inner_ipv4", "$valid$"] } } }, - "true_next" : "tbl_packetio25", - "false_next" : "FabricIngress.spgw.interfaces" + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" }, { "name" : "node_5", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 255, + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + "source_fragment" : "hdr.inner_tcp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface30"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["inner_tcp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "true_next" : "tbl_lookup_md_init37", "false_next" : "node_7" }, { "name" : "node_7", "id" : 2, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 259, - "column" : 16, - "source_fragment" : "hdr.gtpu.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" }, "expression" : { "type" : "expression", @@ -20832,47 +23333,44 @@ "left" : null, "right" : { "type" : "field", - "value" : ["gtpu", "$valid$"] + "value" : ["inner_udp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.uplink_pdrs", - "false_next" : "FabricIngress.spgw.downlink_pdrs" + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" }, { - "name" : "node_10", + "name" : "node_9", "id" : 3, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 264, - "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface30"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["inner_icmp", "$valid$"] } } }, - "true_next" : "tbl_spgw265", - "false_next" : "node_12" + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" }, { - "name" : "node_12", + "name" : "node_11", "id" : 4, "source_info" : { - "filename" : "fabric.p4", - "line" : 68, - "column" : 24, - "source_fragment" : "fabric_metadata" + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -20881,16 +23379,108 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap34"] + "value" : ["ipv4", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", - "false_next" : "FabricIngress.spgw.fars" + "true_next" : "tbl_lookup_md_init47", + "false_next" : "node_19" }, { - "name" : "node_16", + "name" : "node_13", "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init52", + "false_next" : "node_15" + }, + { + "name" : "node_15", + "id" : 6, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init55", + "false_next" : "node_17" + }, + { + "name" : "node_17", + "id" : 7, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["icmp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init58", + "false_next" : "node_19" + }, + { + "name" : "node_19", + "id" : 8, + "source_info" : { + "filename" : "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" : ["packet_out", "$valid$"] + } + } + }, + "true_next" : "tbl_packetio25", + "false_next" : "FabricIngress.slice_tc_classifier.classifier" + }, + { + "name" : "node_22", + "id" : 9, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 112, @@ -20909,11 +23499,11 @@ } }, "true_next" : "tbl_filtering113", - "false_next" : "node_18" + "false_next" : "node_24" }, { - "name" : "node_18", - "id" : 6, + "name" : "node_24", + "id" : 10, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 118, @@ -20927,49 +23517,177 @@ "left" : null, "right" : { "type" : "field", - "value" : ["inner_vlan_tag", "$valid$"] + "value" : ["inner_vlan_tag", "$valid$"] + } + } + }, + "true_next" : "tbl_filtering119", + "false_next" : "node_26" + }, + { + "name" : "node_26", + "id" : 11, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 124, + "column" : 12, + "source_fragment" : "!hdr.mpls.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["mpls", "$valid$"] + } + } + } + } + }, + "true_next" : "tbl_filtering129", + "false_next" : "FabricIngress.filtering.ingress_port_vlan" + }, + { + "name" : "node_30", + "id" : 12, + "source_info" : { + "filename" : "fabric.p4", + "line" : 76, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_forwarding" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_forwarding18"] + } + } + } + } + }, + "true_next" : "FabricIngress.spgw.interfaces", + "false_next" : "node_43" + }, + { + "name" : "node_32", + "id" : 13, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 267, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_src_iface42"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_34" + }, + { + "name" : "node_34", + "id" : 14, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 271, + "column" : 16, + "source_fragment" : "hdr.gtpu.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu", "$valid$"] + } + } + }, + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" + }, + { + "name" : "node_37", + "id" : 15, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 276, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_src_iface42"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" } } }, - "true_next" : "tbl_filtering119", - "false_next" : "node_20" + "true_next" : "tbl_spgw277", + "false_next" : "node_39" }, { - "name" : "node_20", - "id" : 7, + "name" : "node_39", + "id" : 16, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 124, - "column" : 12, - "source_fragment" : "!hdr.mpls.isValid()" + "filename" : "fabric.p4", + "line" : 77, + "column" : 28, + "source_fragment" : "fabric_metadata" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["mpls", "$valid$"] - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap47"] } } }, - "true_next" : "tbl_filtering129", - "false_next" : "FabricIngress.filtering.ingress_port_vlan" + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" }, { - "name" : "node_24", - "id" : 8, + "name" : "node_43", + "id" : 17, "source_info" : { "filename" : "fabric.p4", - "line" : 71, + "line" : 80, "column" : 12, "source_fragment" : "fabric_metadata.skip_forwarding" }, @@ -20985,18 +23703,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding10"] + "value" : ["scalars", "userMetadata._skip_forwarding18"] } } } } }, - "true_next" : "node_25", - "false_next" : "node_33" + "true_next" : "node_44", + "false_next" : "node_52" }, { - "name" : "node_25", - "id" : 9, + "name" : "node_44", + "id" : 18, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 150, @@ -21009,7 +23727,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -21018,11 +23736,11 @@ } }, "true_next" : "FabricIngress.forwarding.bridging", - "false_next" : "node_27" + "false_next" : "node_46" }, { - "name" : "node_27", - "id" : 10, + "name" : "node_46", + "id" : 19, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 151, @@ -21035,7 +23753,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -21044,11 +23762,11 @@ } }, "true_next" : "FabricIngress.forwarding.mpls", - "false_next" : "node_29" + "false_next" : "node_48" }, { - "name" : "node_29", - "id" : 11, + "name" : "node_48", + "id" : 20, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 152, @@ -21061,7 +23779,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -21070,11 +23788,11 @@ } }, "true_next" : "FabricIngress.forwarding.routing_v4", - "false_next" : "node_31" + "false_next" : "node_50" }, { - "name" : "node_31", - "id" : 12, + "name" : "node_50", + "id" : 21, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 154, @@ -21087,7 +23805,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -21096,14 +23814,14 @@ } }, "true_next" : "FabricIngress.forwarding.routing_v6", - "false_next" : "node_33" + "false_next" : "node_52" }, { - "name" : "node_33", - "id" : 13, + "name" : "node_52", + "id" : 22, "source_info" : { "filename" : "fabric.p4", - "line" : 74, + "line" : 83, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -21119,176 +23837,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] } } } } }, "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" - }, - { - "name" : "node_37", - "id" : 14, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, - "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_ipv4", "$valid$"] - } - } - } - } - }, - "true_next" : "tbl_acl98", - "false_next" : "node_43" - }, - { - "name" : "node_39", - "id" : 15, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl102", - "false_next" : "node_41" - }, - { - "name" : "node_41", - "id" : 16, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_udp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" - }, - { - "name" : "node_43", - "id" : 17, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" - }, - { - "name" : "node_45", - "id" : 18, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl113", - "false_next" : "node_47" - }, - { - "name" : "node_47", - "id" : 19, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl116", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_50", - "id" : 20, + "name" : "node_56", + "id" : 23, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -21304,7 +23867,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next11"] + "value" : ["scalars", "userMetadata._skip_next19"] } } } @@ -21314,8 +23877,8 @@ "false_next" : "FabricIngress.bng_ingress.t_line_map" }, { - "name" : "node_55", - "id" : 21, + "name" : "node_61", + "id" : 24, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -21337,11 +23900,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_57" + "false_next" : "node_63" }, { - "name" : "node_57", - "id" : 22, + "name" : "node_63", + "id" : 25, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -21366,11 +23929,11 @@ "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" }, { - "name" : "node_61", - "id" : 23, + "name" : "node_67", + "id" : 26, "source_info" : { "filename" : "fabric.p4", - "line" : 86, + "line" : 95, "column" : 47, "source_fragment" : "fabric_metadata" }, @@ -21381,7 +23944,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_sink44"] + "value" : ["scalars", "userMetadata._int_meta_sink58"] } } }, @@ -21389,8 +23952,8 @@ "false_next" : "FabricIngress.bng_ingress.t_line_map" }, { - "name" : "node_64", - "id" : 24, + "name" : "node_70", + "id" : 27, "source_info" : { "filename" : "include/bng.p4", "line" : 341, @@ -21412,8 +23975,8 @@ "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map" }, { - "name" : "node_68", - "id" : 25, + "name" : "node_74", + "id" : 28, "expression" : { "type" : "expression", "value" : { @@ -21432,12 +23995,12 @@ } } }, - "false_next" : null, - "true_next" : "node_69" + "true_next" : "node_75", + "false_next" : "tbl_slicing114" }, { - "name" : "node_69", - "id" : 26, + "name" : "node_75", + "id" : 29, "source_info" : { "filename" : "include/bng.p4", "line" : 128, @@ -21456,11 +24019,11 @@ } }, "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4", - "false_next" : "node_72" + "false_next" : "node_78" }, { - "name" : "node_72", - "id" : 27, + "name" : "node_78", + "id" : 30, "source_info" : { "filename" : "include/bng.p4", "line" : 136, @@ -21478,12 +24041,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_bng112" + "true_next" : "tbl_bng112", + "false_next" : "tbl_slicing114" }, { - "name" : "node_77", - "id" : 28, + "name" : "node_83", + "id" : 31, "source_info" : { "filename" : "include/bng.p4", "line" : 235, @@ -21502,11 +24065,11 @@ } }, "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4", - "false_next" : "node_81" + "false_next" : "node_87" }, { - "name" : "node_81", - "id" : 29, + "name" : "node_87", + "id" : 32, "source_info" : { "filename" : "include/bng.p4", "line" : 247, @@ -21524,8 +24087,8 @@ } } }, - "false_next" : null, - "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v6" + "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v6", + "false_next" : "tbl_slicing114" } ] }, @@ -21534,15 +24097,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_87", + "init_table" : "node_95", "tables" : [ { "name" : "tbl_packetio41", - "id" : 53, + "id" : 58, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -21556,14 +24119,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [148], + "action_ids" : [159], "actions" : ["packetio41"], - "base_default_next" : "node_89", + "base_default_next" : "node_97", "next_tables" : { - "packetio41" : "node_89" + "packetio41" : "node_97" }, "default_entry" : { - "action_id" : 148, + "action_id" : 159, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21571,7 +24134,7 @@ }, { "name" : "tbl_packetio44", - "id" : 54, + "id" : 59, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -21585,14 +24148,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [149], + "action_ids" : [160], "actions" : ["packetio44"], - "base_default_next" : "node_91", + "base_default_next" : "node_99", "next_tables" : { - "packetio44" : "node_91" + "packetio44" : "node_99" }, "default_entry" : { - "action_id" : 149, + "action_id" : 160, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21600,7 +24163,7 @@ }, { "name" : "tbl_next283", - "id" : 55, + "id" : 60, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -21614,14 +24177,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [150], + "action_ids" : [161], "actions" : ["next283"], - "base_default_next" : "node_93", + "base_default_next" : "node_101", "next_tables" : { - "next283" : "node_93" + "next283" : "node_101" }, "default_entry" : { - "action_id" : 150, + "action_id" : 161, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21629,7 +24192,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 56, + "id" : 61, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -21643,14 +24206,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [140], + "action_ids" : [148], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], - "base_default_next" : "node_97", + "base_default_next" : "node_105", "next_tables" : { - "FabricEgress.egress_next.pop_mpls_if_present" : "node_97" + "FabricEgress.egress_next.pop_mpls_if_present" : "node_105" }, "default_entry" : { - "action_id" : 140, + "action_id" : 148, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21658,7 +24221,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 57, + "id" : 62, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -21672,14 +24235,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [141], + "action_ids" : [149], "actions" : ["FabricEgress.egress_next.set_mpls"], - "base_default_next" : "node_97", + "base_default_next" : "node_105", "next_tables" : { - "FabricEgress.egress_next.set_mpls" : "node_97" + "FabricEgress.egress_next.set_mpls" : "node_105" }, "default_entry" : { - "action_id" : 141, + "action_id" : 149, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21687,7 +24250,7 @@ }, { "name" : "tbl_egress_next_push_outer_vlan", - "id" : 58, + "id" : 63, "source_info" : { "filename" : "include/control/next.p4", "line" : 295, @@ -21701,14 +24264,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [142], + "action_ids" : [150], "actions" : ["FabricEgress.egress_next.push_outer_vlan"], "base_default_next" : "tbl_egress_next_push_inner_vlan", "next_tables" : { "FabricEgress.egress_next.push_outer_vlan" : "tbl_egress_next_push_inner_vlan" }, "default_entry" : { - "action_id" : 142, + "action_id" : 150, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21716,7 +24279,7 @@ }, { "name" : "tbl_egress_next_push_inner_vlan", - "id" : 59, + "id" : 64, "source_info" : { "filename" : "include/control/next.p4", "line" : 296, @@ -21730,14 +24293,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [143], + "action_ids" : [151], "actions" : ["FabricEgress.egress_next.push_inner_vlan"], - "base_default_next" : "node_102", + "base_default_next" : "node_110", "next_tables" : { - "FabricEgress.egress_next.push_inner_vlan" : "node_102" + "FabricEgress.egress_next.push_inner_vlan" : "node_110" }, "default_entry" : { - "action_id" : 143, + "action_id" : 151, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21745,7 +24308,7 @@ }, { "name" : "tbl_next299", - "id" : 60, + "id" : 65, "source_info" : { "filename" : "include/control/next.p4", "line" : 299, @@ -21759,14 +24322,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [151], + "action_ids" : [162], "actions" : ["next299"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "next299" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 151, + "action_id" : 162, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21774,7 +24337,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 61, + "id" : 66, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -21785,7 +24348,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -21801,16 +24364,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [144, 145, 146], + "action_ids" : [152, 153, 154], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_102", + "base_default_next" : "node_110", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_102", - "FabricEgress.egress_next.pop_vlan" : "node_102", - "FabricEgress.egress_next.drop" : "node_102" + "FabricEgress.egress_next.push_vlan" : "node_110", + "FabricEgress.egress_next.pop_vlan" : "node_110", + "FabricEgress.egress_next.drop" : "node_110" }, "default_entry" : { - "action_id" : 146, + "action_id" : 154, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21818,7 +24381,7 @@ }, { "name" : "tbl_next309", - "id" : 62, + "id" : 67, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -21832,14 +24395,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [153], + "action_ids" : [164], "actions" : ["next309"], - "base_default_next" : "node_104", + "base_default_next" : "node_112", "next_tables" : { - "next309" : "node_104" + "next309" : "node_112" }, "default_entry" : { - "action_id" : 153, + "action_id" : 164, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21847,7 +24410,7 @@ }, { "name" : "tbl_next310", - "id" : 63, + "id" : 68, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -21861,14 +24424,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [152], + "action_ids" : [163], "actions" : ["next310"], - "base_default_next" : "node_114", + "base_default_next" : "node_122", "next_tables" : { - "next310" : "node_114" + "next310" : "node_122" }, "default_entry" : { - "action_id" : 152, + "action_id" : 163, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21876,7 +24439,7 @@ }, { "name" : "tbl_next313", - "id" : 64, + "id" : 69, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -21890,14 +24453,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [155], + "action_ids" : [166], "actions" : ["next313"], - "base_default_next" : "node_108", + "base_default_next" : "node_116", "next_tables" : { - "next313" : "node_108" + "next313" : "node_116" }, "default_entry" : { - "action_id" : 155, + "action_id" : 166, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21905,7 +24468,7 @@ }, { "name" : "tbl_next314", - "id" : 65, + "id" : 70, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -21919,14 +24482,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [154], + "action_ids" : [165], "actions" : ["next314"], - "base_default_next" : "node_114", + "base_default_next" : "node_122", "next_tables" : { - "next314" : "node_114" + "next314" : "node_122" }, "default_entry" : { - "action_id" : 154, + "action_id" : 165, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21934,7 +24497,7 @@ }, { "name" : "tbl_next318", - "id" : 66, + "id" : 71, "source_info" : { "filename" : "include/control/next.p4", "line" : 318, @@ -21948,14 +24511,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [157], + "action_ids" : [168], "actions" : ["next318"], - "base_default_next" : "node_112", + "base_default_next" : "node_120", "next_tables" : { - "next318" : "node_112" + "next318" : "node_120" }, "default_entry" : { - "action_id" : 157, + "action_id" : 168, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21963,7 +24526,7 @@ }, { "name" : "tbl_next319", - "id" : 67, + "id" : 72, "source_info" : { "filename" : "include/control/next.p4", "line" : 319, @@ -21977,14 +24540,43 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [156], + "action_ids" : [167], "actions" : ["next319"], - "base_default_next" : "node_114", + "base_default_next" : "node_122", + "next_tables" : { + "next319" : "node_122" + }, + "default_entry" : { + "action_id" : 167, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_spgw_gtpu_encap_qfi", + "id" : 73, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 371, + "column" : 20, + "source_fragment" : "gtpu_encap_qfi()" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [158], + "actions" : ["FabricEgress.spgw.gtpu_encap_qfi"], + "base_default_next" : "node_127", "next_tables" : { - "next319" : "node_114" + "FabricEgress.spgw.gtpu_encap_qfi" : "node_127" }, "default_entry" : { - "action_id" : 156, + "action_id" : 158, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -21992,11 +24584,11 @@ }, { "name" : "tbl_spgw_gtpu_encap", - "id" : 68, + "id" : 74, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, - "column" : 16, + "line" : 373, + "column" : 20, "source_fragment" : "gtpu_encap()" }, "key" : [], @@ -22006,25 +24598,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [147], + "action_ids" : [157], "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_117", + "base_default_next" : "node_127", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_117" + "FabricEgress.spgw.gtpu_encap" : "node_127" }, "default_entry" : { - "action_id" : 147, + "action_id" : 157, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw342", - "id" : 69, + "name" : "tbl_spgw377", + "id" : 75, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, + "line" : 377, "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, @@ -22035,14 +24627,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [158], - "actions" : ["spgw342"], - "base_default_next" : "node_119", + "action_ids" : [169], + "actions" : ["spgw377"], + "base_default_next" : "node_129", "next_tables" : { - "spgw342" : "node_119" + "spgw377" : "node_129" }, "default_entry" : { - "action_id" : 158, + "action_id" : 169, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22050,7 +24642,7 @@ }, { "name" : "tbl_bng_egress_downstream_encap_v4", - "id" : 70, + "id" : 76, "source_info" : { "filename" : "include/bng.p4", "line" : 297, @@ -22064,14 +24656,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [101], + "action_ids" : [109], "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"], - "base_default_next" : "node_124", + "base_default_next" : "node_134", "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v4" : "node_124" + "FabricEgress.bng_egress.downstream.encap_v4" : "node_134" }, "default_entry" : { - "action_id" : 101, + "action_id" : 109, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22079,7 +24671,7 @@ }, { "name" : "tbl_bng_egress_downstream_encap_v6", - "id" : 71, + "id" : 77, "source_info" : { "filename" : "include/bng.p4", "line" : 302, @@ -22093,14 +24685,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], + "action_ids" : [110], "actions" : ["FabricEgress.bng_egress.downstream.encap_v6"], - "base_default_next" : "node_124", + "base_default_next" : "node_134", "next_tables" : { - "FabricEgress.bng_egress.downstream.encap_v6" : "node_124" + "FabricEgress.bng_egress.downstream.encap_v6" : "node_134" }, "default_entry" : { - "action_id" : 102, + "action_id" : 110, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22108,7 +24700,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 72, + "id" : 78, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -22131,13 +24723,13 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "userMetadata._l4_sport17"], + "target" : ["scalars", "userMetadata._l4_sport25"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "userMetadata._l4_dport18"], + "target" : ["scalars", "userMetadata._l4_dport26"], "mask" : null } ], @@ -22147,15 +24739,15 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 96], + "action_ids" : [111, 103], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_127", + "base_default_next" : "node_137", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_127", - "nop" : "node_127" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_137", + "nop" : "node_137" }, "default_entry" : { - "action_id" : 96, + "action_id" : 103, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22163,7 +24755,7 @@ }, { "name" : "tbl_act", - "id" : 73, + "id" : 79, "key" : [], "match_type" : "exact", "type" : "simple", @@ -22171,14 +24763,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [159], + "action_ids" : [170], "actions" : ["act"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { "act" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 159, + "action_id" : 170, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22186,7 +24778,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 74, + "id" : 80, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -22207,15 +24799,15 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [104, 97], + "action_ids" : [112, 104], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_130", + "base_default_next" : "node_140", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_130", - "nop" : "node_130" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_140", + "nop" : "node_140" }, "default_entry" : { - "action_id" : 97, + "action_id" : 104, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22223,7 +24815,7 @@ }, { "name" : "tbl_int_transit420", - "id" : 75, + "id" : 81, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -22237,14 +24829,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [160], + "action_ids" : [171], "actions" : ["int_transit420"], - "base_default_next" : "node_132", + "base_default_next" : "node_142", "next_tables" : { - "int_transit420" : "node_132" + "int_transit420" : "node_142" }, "default_entry" : { - "action_id" : 160, + "action_id" : 171, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22252,7 +24844,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 76, + "id" : 82, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -22273,7 +24865,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 99], + "action_ids" : [113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 107], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -22296,7 +24888,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 99, + "action_id" : 107, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -22316,7 +24908,7 @@ } ], "action_entry" : { - "action_id" : 105, + "action_id" : 113, "action_data" : [] }, "priority" : 1 @@ -22335,7 +24927,7 @@ } ], "action_entry" : { - "action_id" : 106, + "action_id" : 114, "action_data" : [] }, "priority" : 2 @@ -22354,7 +24946,7 @@ } ], "action_entry" : { - "action_id" : 107, + "action_id" : 115, "action_data" : [] }, "priority" : 3 @@ -22373,7 +24965,7 @@ } ], "action_entry" : { - "action_id" : 108, + "action_id" : 116, "action_data" : [] }, "priority" : 4 @@ -22392,7 +24984,7 @@ } ], "action_entry" : { - "action_id" : 109, + "action_id" : 117, "action_data" : [] }, "priority" : 5 @@ -22411,7 +25003,7 @@ } ], "action_entry" : { - "action_id" : 110, + "action_id" : 118, "action_data" : [] }, "priority" : 6 @@ -22430,7 +25022,7 @@ } ], "action_entry" : { - "action_id" : 111, + "action_id" : 119, "action_data" : [] }, "priority" : 7 @@ -22449,7 +25041,7 @@ } ], "action_entry" : { - "action_id" : 112, + "action_id" : 120, "action_data" : [] }, "priority" : 8 @@ -22468,7 +25060,7 @@ } ], "action_entry" : { - "action_id" : 113, + "action_id" : 121, "action_data" : [] }, "priority" : 9 @@ -22487,7 +25079,7 @@ } ], "action_entry" : { - "action_id" : 114, + "action_id" : 122, "action_data" : [] }, "priority" : 10 @@ -22506,7 +25098,7 @@ } ], "action_entry" : { - "action_id" : 115, + "action_id" : 123, "action_data" : [] }, "priority" : 11 @@ -22525,7 +25117,7 @@ } ], "action_entry" : { - "action_id" : 116, + "action_id" : 124, "action_data" : [] }, "priority" : 12 @@ -22544,7 +25136,7 @@ } ], "action_entry" : { - "action_id" : 117, + "action_id" : 125, "action_data" : [] }, "priority" : 13 @@ -22563,7 +25155,7 @@ } ], "action_entry" : { - "action_id" : 118, + "action_id" : 126, "action_data" : [] }, "priority" : 14 @@ -22582,7 +25174,7 @@ } ], "action_entry" : { - "action_id" : 119, + "action_id" : 127, "action_data" : [] }, "priority" : 15 @@ -22601,7 +25193,7 @@ } ], "action_entry" : { - "action_id" : 120, + "action_id" : 128, "action_data" : [] }, "priority" : 16 @@ -22610,7 +25202,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 77, + "id" : 83, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -22631,7 +25223,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 100], + "action_ids" : [129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 108], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], "base_default_next" : "tbl_int_transit425", "next_tables" : { @@ -22654,7 +25246,7 @@ "NoAction" : "tbl_int_transit425" }, "default_entry" : { - "action_id" : 100, + "action_id" : 108, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -22674,7 +25266,7 @@ } ], "action_entry" : { - "action_id" : 121, + "action_id" : 129, "action_data" : [] }, "priority" : 1 @@ -22693,7 +25285,7 @@ } ], "action_entry" : { - "action_id" : 122, + "action_id" : 130, "action_data" : [] }, "priority" : 2 @@ -22712,7 +25304,7 @@ } ], "action_entry" : { - "action_id" : 123, + "action_id" : 131, "action_data" : [] }, "priority" : 3 @@ -22731,7 +25323,7 @@ } ], "action_entry" : { - "action_id" : 124, + "action_id" : 132, "action_data" : [] }, "priority" : 4 @@ -22750,7 +25342,7 @@ } ], "action_entry" : { - "action_id" : 125, + "action_id" : 133, "action_data" : [] }, "priority" : 5 @@ -22769,7 +25361,7 @@ } ], "action_entry" : { - "action_id" : 126, + "action_id" : 134, "action_data" : [] }, "priority" : 6 @@ -22788,7 +25380,7 @@ } ], "action_entry" : { - "action_id" : 127, + "action_id" : 135, "action_data" : [] }, "priority" : 7 @@ -22807,7 +25399,7 @@ } ], "action_entry" : { - "action_id" : 128, + "action_id" : 136, "action_data" : [] }, "priority" : 8 @@ -22826,7 +25418,7 @@ } ], "action_entry" : { - "action_id" : 129, + "action_id" : 137, "action_data" : [] }, "priority" : 9 @@ -22845,7 +25437,7 @@ } ], "action_entry" : { - "action_id" : 130, + "action_id" : 138, "action_data" : [] }, "priority" : 10 @@ -22864,7 +25456,7 @@ } ], "action_entry" : { - "action_id" : 131, + "action_id" : 139, "action_data" : [] }, "priority" : 11 @@ -22883,7 +25475,7 @@ } ], "action_entry" : { - "action_id" : 132, + "action_id" : 140, "action_data" : [] }, "priority" : 12 @@ -22902,7 +25494,7 @@ } ], "action_entry" : { - "action_id" : 133, + "action_id" : 141, "action_data" : [] }, "priority" : 13 @@ -22921,7 +25513,7 @@ } ], "action_entry" : { - "action_id" : 134, + "action_id" : 142, "action_data" : [] }, "priority" : 14 @@ -22940,7 +25532,7 @@ } ], "action_entry" : { - "action_id" : 135, + "action_id" : 143, "action_data" : [] }, "priority" : 15 @@ -22959,7 +25551,7 @@ } ], "action_entry" : { - "action_id" : 136, + "action_id" : 144, "action_data" : [] }, "priority" : 16 @@ -22968,7 +25560,7 @@ }, { "name" : "tbl_int_transit425", - "id" : 78, + "id" : 84, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -22982,14 +25574,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [162], + "action_ids" : [173], "actions" : ["int_transit425"], - "base_default_next" : "node_136", + "base_default_next" : "node_146", "next_tables" : { - "int_transit425" : "node_136" + "int_transit425" : "node_146" }, "default_entry" : { - "action_id" : 162, + "action_id" : 173, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -22997,12 +25589,129 @@ }, { "name" : "tbl_int_transit428", - "id" : 79, + "id" : 85, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 428, + "column" : 31, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [172], + "actions" : ["int_transit428"], + "base_default_next" : "node_148", + "next_tables" : { + "int_transit428" : "node_148" + }, + "default_entry" : { + "action_id" : 172, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_transit431", + "id" : 86, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 431, + "column" : 24, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [174], + "actions" : ["int_transit431"], + "base_default_next" : "node_150", + "next_tables" : { + "int_transit431" : "node_150" + }, + "default_entry" : { + "action_id" : 174, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_transit434", + "id" : 87, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 434, + "column" : 37, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [175], + "actions" : ["int_transit434"], + "base_default_next" : "node_152", + "next_tables" : { + "int_transit434" : "node_152" + }, + "default_entry" : { + "action_id" : 175, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", + "id" : 88, + "source_info" : { + "filename" : "include/int/int_report.p4", + "line" : 87, + "column" : 10, + "source_fragment" : "tb_generate_report" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [145, 105], + "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"], + "base_default_next" : "node_154", + "next_tables" : { + "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_154", + "nop" : "node_154" + }, + "default_entry" : { + "action_id" : 105, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_process_int_main_process_int_sink_restore_header", + "id" : 89, "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 428, - "column" : 31, - "source_fragment" : "=" + "filename" : "include/int/int_sink.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "restore_header()" }, "key" : [], "match_type" : "exact", @@ -23011,27 +25720,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [161], - "actions" : ["int_transit428"], - "base_default_next" : "node_138", + "action_ids" : [146], + "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"], + "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink", "next_tables" : { - "int_transit428" : "node_138" + "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" }, "default_entry" : { - "action_id" : 161, + "action_id" : 146, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_int_transit431", - "id" : 80, + "name" : "tbl_process_int_main_process_int_sink_int_sink", + "id" : 90, "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 431, - "column" : 24, - "source_fragment" : "=" + "filename" : "include/int/int_sink.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "int_sink()" }, "key" : [], "match_type" : "exact", @@ -23040,27 +25749,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [163], - "actions" : ["int_transit431"], - "base_default_next" : "node_140", + "action_ids" : [147], + "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], + "base_default_next" : "tbl_slicing126", "next_tables" : { - "int_transit431" : "node_140" + "FabricEgress.process_int_main.process_int_sink.int_sink" : "tbl_slicing126" }, "default_entry" : { - "action_id" : 163, + "action_id" : 147, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_int_transit434", - "id" : 81, + "name" : "tbl_slicing126", + "id" : 91, "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 434, - "column" : 37, - "source_fragment" : "=" + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" }, "key" : [], "match_type" : "exact", @@ -23069,57 +25778,64 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [164], - "actions" : ["int_transit434"], - "base_default_next" : "node_142", + "action_ids" : [178], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", "next_tables" : { - "int_transit434" : "node_142" + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" }, "default_entry" : { - "action_id" : 164, + "action_id" : 178, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "id" : 82, + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 92, "source_info" : { - "filename" : "include/int/int_report.p4", - "line" : 87, + "filename" : "include/control/slicing.p4", + "line" : 138, "column" : 10, - "source_fragment" : "tb_generate_report" + "source_fragment" : "rewriter" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "eg_port", + "target" : ["standard_metadata", "egress_port"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 512, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [137, 98], - "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"], - "base_default_next" : "node_144", + "action_ids" : [155, 156, 106], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], + "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_144", - "nop" : "node_144" + "__MISS__" : null, + "__HIT__" : "node_159" }, "default_entry" : { - "action_id" : 98, - "action_const" : false, + "action_id" : 106, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "tbl_process_int_main_process_int_sink_restore_header", - "id" : 83, + "name" : "tbl_slicing155", + "id" : 93, "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 53, - "column" : 8, - "source_fragment" : "restore_header()" + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 30, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -23128,27 +25844,27 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [138], - "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"], - "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink", + "action_ids" : [176], + "actions" : ["slicing155"], + "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" + "slicing155" : null }, "default_entry" : { - "action_id" : 138, + "action_id" : 176, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_main_process_int_sink_int_sink", - "id" : 84, + "name" : "tbl_slicing159", + "id" : 94, "source_info" : { - "filename" : "include/int/int_sink.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "int_sink()" + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -23157,14 +25873,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [139], - "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], + "action_ids" : [177], + "actions" : ["slicing159"], "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_main.process_int_sink.int_sink" : null + "slicing159" : null }, "default_entry" : { - "action_id" : 139, + "action_id" : 177, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -23174,11 +25890,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_87", - "id" : 30, + "name" : "node_95", + "id" : 33, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 118, "column" : 33, "source_fragment" : "fabric_metadata" }, @@ -23189,16 +25905,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out15"] + "value" : ["scalars", "userMetadata._is_controller_packet_out23"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_89" + "false_next" : "node_97" }, { - "name" : "node_89", - "id" : 31, + "name" : "node_97", + "id" : 34, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -23220,11 +25936,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_91" + "false_next" : "node_99" }, { - "name" : "node_91", - "id" : 32, + "name" : "node_99", + "id" : 35, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -23242,7 +25958,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast14"] + "value" : ["scalars", "userMetadata._is_multicast22"] } } }, @@ -23263,11 +25979,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_93" + "false_next" : "node_101" }, { - "name" : "node_93", - "id" : 33, + "name" : "node_101", + "id" : 36, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -23280,7 +25996,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label8"] + "value" : ["scalars", "userMetadata._mpls_label16"] }, "right" : { "type" : "hexstr", @@ -23288,12 +26004,12 @@ } } }, - "true_next" : "node_94", + "true_next" : "node_102", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_94", - "id" : 34, + "name" : "node_102", + "id" : 37, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -23312,14 +26028,14 @@ } }, "true_next" : "tbl_egress_next_pop_mpls_if_present", - "false_next" : "node_97" + "false_next" : "node_105" }, { - "name" : "node_97", - "id" : 35, + "name" : "node_105", + "id" : 38, "source_info" : { "filename" : "fabric.p4", - "line" : 109, + "line" : 119, "column" : 31, "source_fragment" : "fabric_metadata" }, @@ -23330,7 +26046,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._push_double_vlan4"] + "value" : ["scalars", "userMetadata._push_double_vlan12"] } } }, @@ -23338,8 +26054,8 @@ "false_next" : "tbl_next299" }, { - "name" : "node_102", - "id" : 36, + "name" : "node_110", + "id" : 39, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -23358,11 +26074,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_106" + "false_next" : "node_114" }, { - "name" : "node_104", - "id" : 37, + "name" : "node_112", + "id" : 40, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -23384,11 +26100,11 @@ } }, "true_next" : "tbl_next310", - "false_next" : "node_114" + "false_next" : "node_122" }, { - "name" : "node_106", - "id" : 38, + "name" : "node_114", + "id" : 41, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -23416,7 +26132,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -23427,11 +26143,11 @@ } }, "true_next" : "tbl_next313", - "false_next" : "node_110" + "false_next" : "node_118" }, { - "name" : "node_108", - "id" : 39, + "name" : "node_116", + "id" : 42, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -23453,11 +26169,11 @@ } }, "true_next" : "tbl_next314", - "false_next" : "node_114" + "false_next" : "node_122" }, { - "name" : "node_110", - "id" : 40, + "name" : "node_118", + "id" : 43, "source_info" : { "filename" : "include/control/next.p4", "line" : 317, @@ -23485,7 +26201,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type12"] + "value" : ["scalars", "userMetadata._fwd_type20"] }, "right" : { "type" : "hexstr", @@ -23496,11 +26212,11 @@ } }, "true_next" : "tbl_next318", - "false_next" : "node_114" + "false_next" : "node_122" }, { - "name" : "node_112", - "id" : 41, + "name" : "node_120", + "id" : 44, "source_info" : { "filename" : "include/control/next.p4", "line" : 319, @@ -23522,14 +26238,14 @@ } }, "true_next" : "tbl_next319", - "false_next" : "node_114" + "false_next" : "node_122" }, { - "name" : "node_114", - "id" : 42, + "name" : "node_122", + "id" : 45, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 368, "column" : 12, "source_fragment" : "fabric_md.spgw.skip_spgw" }, @@ -23545,21 +26261,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw31"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw44"] } } } } }, - "true_next" : "node_115", - "false_next" : "node_119" + "true_next" : "node_123", + "false_next" : "node_129" }, { - "name" : "node_115", - "id" : 43, + "name" : "node_123", + "id" : 46, "source_info" : { "filename" : "fabric.p4", - "line" : 111, + "line" : 121, "column" : 24, "source_fragment" : "fabric_metadata" }, @@ -23570,19 +26286,42 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap33"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap46"] } } }, - "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_117" + "true_next" : "node_124", + "false_next" : "node_127" }, { - "name" : "node_117", - "id" : 44, + "name" : "node_124", + "id" : 47, + "source_info" : { + "filename" : "fabric.p4", + "line" : 121, + "column" : 24, + "source_fragment" : "fabric_metadata" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push49"] + } + } + }, + "true_next" : "tbl_spgw_gtpu_encap_qfi", + "false_next" : "tbl_spgw_gtpu_encap" + }, + { + "name" : "node_127", + "id" : 48, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 341, + "line" : 376, "column" : 16, "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr" }, @@ -23598,18 +26337,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr35"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr48"] } } } } }, - "true_next" : "tbl_spgw342", - "false_next" : "node_119" + "true_next" : "tbl_spgw377", + "false_next" : "node_129" }, { - "name" : "node_119", - "id" : 45, + "name" : "node_129", + "id" : 49, "source_info" : { "filename" : "include/bng.p4", "line" : 358, @@ -23622,7 +26361,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._bng_type36"] + "value" : ["scalars", "userMetadata._bng_type50"] }, "right" : { "type" : "hexstr", @@ -23630,12 +26369,12 @@ } } }, - "true_next" : "node_120", - "false_next" : "node_124" + "true_next" : "node_130", + "false_next" : "node_134" }, { - "name" : "node_120", - "id" : 46, + "name" : "node_130", + "id" : 50, "source_info" : { "filename" : "include/bng.p4", "line" : 296, @@ -23654,11 +26393,11 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v4", - "false_next" : "node_122" + "false_next" : "node_132" }, { - "name" : "node_122", - "id" : 47, + "name" : "node_132", + "id" : 51, "source_info" : { "filename" : "include/bng.p4", "line" : 301, @@ -23677,11 +26416,11 @@ } }, "true_next" : "tbl_bng_egress_downstream_encap_v6", - "false_next" : "node_124" + "false_next" : "node_134" }, { - "name" : "node_124", - "id" : 48, + "name" : "node_134", + "id" : 52, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -23756,15 +26495,15 @@ } } }, - "false_next" : null, - "true_next" : "node_125" + "true_next" : "node_135", + "false_next" : "tbl_slicing126" }, { - "name" : "node_125", - "id" : 49, + "name" : "node_135", + "id" : 53, "source_info" : { "filename" : "fabric.p4", - "line" : 117, + "line" : 127, "column" : 36, "source_fragment" : "fabric_metadata" }, @@ -23775,16 +26514,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source42"] + "value" : ["scalars", "userMetadata._int_meta_source56"] } } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_127" + "false_next" : "node_137" }, { - "name" : "node_127", - "id" : 50, + "name" : "node_137", + "id" : 54, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -23802,12 +26541,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_act" + "true_next" : "tbl_act", + "false_next" : "tbl_slicing126" }, { - "name" : "node_130", - "id" : 51, + "name" : "node_140", + "id" : 55, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -23826,18 +26565,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit43"] + "value" : ["scalars", "userMetadata._int_meta_transit57"] } } } } }, "true_next" : "tbl_int_transit420", - "false_next" : "node_132" + "false_next" : "node_142" }, { - "name" : "node_132", - "id" : 52, + "name" : "node_142", + "id" : 56, "expression" : { "type" : "expression", "value" : { @@ -23857,11 +26596,11 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "false_next" : "node_142" + "false_next" : "node_152" }, { - "name" : "node_136", - "id" : 53, + "name" : "node_146", + "id" : 57, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -23880,11 +26619,11 @@ } }, "true_next" : "tbl_int_transit428", - "false_next" : "node_138" + "false_next" : "node_148" }, { - "name" : "node_138", - "id" : 54, + "name" : "node_148", + "id" : 58, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -23903,11 +26642,11 @@ } }, "true_next" : "tbl_int_transit431", - "false_next" : "node_140" + "false_next" : "node_150" }, { - "name" : "node_140", - "id" : 55, + "name" : "node_150", + "id" : 59, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -23926,11 +26665,11 @@ } }, "true_next" : "tbl_int_transit434", - "false_next" : "node_142" + "false_next" : "node_152" }, { - "name" : "node_142", - "id" : 56, + "name" : "node_152", + "id" : 60, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 115, @@ -23952,14 +26691,14 @@ } }, "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", - "false_next" : "node_144" + "false_next" : "node_154" }, { - "name" : "node_144", - "id" : 57, + "name" : "node_154", + "id" : 61, "source_info" : { "filename" : "fabric.p4", - "line" : 117, + "line" : 127, "column" : 36, "source_fragment" : "fabric_metadata" }, @@ -23970,12 +26709,58 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_sink44"] + "value" : ["scalars", "userMetadata._int_meta_sink58"] + } + } + }, + "true_next" : "tbl_process_int_main_process_int_sink_restore_header", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_159", + "id" : 62, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 154, + "column" : 16, + "source_fragment" : "hdr.gtpu_ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu_ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_slicing155", + "false_next" : "node_161" + }, + { + "name" : "node_161", + "id" : 63, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] } } }, "false_next" : null, - "true_next" : "tbl_process_int_main_process_int_sink_restore_header" + "true_next" : "tbl_slicing159" } ] } @@ -24012,7 +26797,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index ce007716944..f38c9347a7e 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -719,6 +719,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 36113154 @@ -791,6 +877,18 @@ tables { bitwidth: 32 match_type: EXACT } + match_fields { + id: 3 + name: "has_qfi" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "qfi" + bitwidth: 6 + match_type: EXACT + } action_refs { id: 18504550 } @@ -942,6 +1040,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -1337,6 +1461,49 @@ actions { bitwidth: 16 } } +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: 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: 18186268 @@ -1348,6 +1515,11 @@ actions { name: "src_iface" bitwidth: 8 } + params { + id: 2 + name: "slice_id" + bitwidth: 4 + } } actions { preamble { @@ -1377,6 +1549,11 @@ actions { name: "needs_gtpu_decap" bitwidth: 1 } + params { + id: 4 + name: "tc" + bitwidth: 2 + } } actions { preamble { @@ -1401,8 +1578,18 @@ actions { } params { id: 4 - name: "qid" - bitwidth: 5 + name: "needs_qfi_push" + bitwidth: 1 + } + params { + id: 5 + name: "qfi" + bitwidth: 6 + } + params { + id: 6 + name: "tc" + bitwidth: 2 } } actions { @@ -1602,6 +1789,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -1866,6 +2067,28 @@ direct_counters { } 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: 322470063 @@ -1910,6 +2133,17 @@ meters { } size: 8192 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index 93e5c649c5e..c639b1fecd8 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -8,6 +8,7 @@ ["tmp_2", 3, false], ["tmp_4", 8, false], ["last_ipv4_dscp_0", 6, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -15,39 +16,48 @@ ["tmp_7", 64, false], ["tmp_8", 32, false], ["tmp_9", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], + ["tmp_10", 32, false], + ["dscp_rewriter_tmp_dscp", 6, false], ["process_int_main_process_int_transit_hasReturned", 1, false], - ["userMetadata._ip_eth_type0", 16, false], - ["userMetadata._vlan_id1", 12, false], - ["userMetadata._vlan_pri2", 3, false], - ["userMetadata._vlan_cfi3", 1, false], - ["userMetadata._mpls_label4", 20, false], - ["userMetadata._mpls_ttl5", 8, false], - ["userMetadata._skip_forwarding6", 1, false], - ["userMetadata._skip_next7", 1, false], - ["userMetadata._fwd_type8", 3, false], - ["userMetadata._next_id9", 32, false], - ["userMetadata._is_multicast10", 1, false], - ["userMetadata._is_controller_packet_out11", 1, false], - ["userMetadata._ip_proto12", 8, false], - ["userMetadata._l4_sport13", 16, false], - ["userMetadata._l4_dport14", 16, false], - ["userMetadata._ipv4_src_addr15", 32, false], - ["userMetadata._ipv4_dst_addr16", 32, false], - ["userMetadata._int_meta_source17", 1, false], - ["userMetadata._int_meta_transit18", 1, false], - ["userMetadata._int_meta_sink19", 1, false], - ["userMetadata._int_meta_switch_id20", 32, false], - ["userMetadata._int_meta_new_words21", 8, false], - ["userMetadata._int_meta_new_bytes22", 16, false], - ["userMetadata._int_meta_ig_tstamp23", 32, false], - ["userMetadata._int_meta_eg_tstamp24", 32, false], - ["userMetadata._port_type25", 2, false], - ["_padding_0", 1, false] + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._mpls_label12", 20, false], + ["userMetadata._mpls_ttl13", 8, false], + ["userMetadata._skip_forwarding14", 1, false], + ["userMetadata._skip_next15", 1, false], + ["userMetadata._fwd_type16", 3, false], + ["userMetadata._next_id17", 32, false], + ["userMetadata._is_multicast18", 1, false], + ["userMetadata._is_controller_packet_out19", 1, false], + ["userMetadata._ip_proto20", 8, false], + ["userMetadata._l4_sport21", 16, false], + ["userMetadata._l4_dport22", 16, false], + ["userMetadata._ipv4_src_addr23", 32, false], + ["userMetadata._ipv4_dst_addr24", 32, false], + ["userMetadata._slice_id25", 4, false], + ["userMetadata._packet_color26", 2, false], + ["userMetadata._tc27", 2, false], + ["userMetadata._dscp28", 6, false], + ["userMetadata._int_meta_source29", 1, false], + ["userMetadata._int_meta_transit30", 1, false], + ["userMetadata._int_meta_sink31", 1, false], + ["userMetadata._int_meta_switch_id32", 32, false], + ["userMetadata._int_meta_new_words33", 8, false], + ["userMetadata._int_meta_new_bytes34", 16, false], + ["userMetadata._int_meta_ig_tstamp35", 32, false], + ["userMetadata._int_meta_eg_tstamp36", 32, false], + ["userMetadata._port_type37", 2, false], + ["_padding_0", 4, false] ] }, { @@ -133,8 +143,30 @@ ] }, { - "name" : "ipv4_t", + "name" : "gtpu_options_t", "id" : 8, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 9, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "ipv4_t", + "id" : 10, "fields" : [ ["version", 4, false], ["ihl", 4, false], @@ -153,7 +185,7 @@ }, { "name" : "udp_t", - "id" : 9, + "id" : 11, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -163,7 +195,7 @@ }, { "name" : "tcp_t", - "id" : 10, + "id" : 12, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -180,7 +212,7 @@ }, { "name" : "icmp_t", - "id" : 11, + "id" : 13, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -192,7 +224,7 @@ }, { "name" : "packet_in_header_t", - "id" : 12, + "id" : 14, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -200,7 +232,7 @@ }, { "name" : "intl4_shim_t", - "id" : 13, + "id" : 15, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], @@ -210,7 +242,7 @@ }, { "name" : "int_header_t", - "id" : 14, + "id" : 16, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -229,14 +261,14 @@ }, { "name" : "int_switch_id_t", - "id" : 15, + "id" : 17, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 16, + "id" : 18, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -244,14 +276,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 17, + "id" : 19, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 18, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -259,21 +291,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 19, + "id" : 21, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 20, + "id" : 22, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 21, + "id" : 23, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -281,14 +313,14 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 22, + "id" : 24, "fields" : [ ["egress_port_tx_util", 32, false] ] }, { "name" : "intl4_tail_t", - "id" : 23, + "id" : 25, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], @@ -369,148 +401,162 @@ "pi_omit" : true }, { - "name" : "inner_ipv4", + "name" : "gtpu_options", "id" : 10, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 11, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_ipv4", + "id" : 12, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 11, + "id" : 13, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 12, + "id" : 14, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 13, + "id" : 15, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 14, + "id" : 16, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 15, + "id" : 17, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 16, + "id" : 18, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 17, + "id" : 19, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 18, + "id" : 20, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 19, + "id" : 21, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_shim", - "id" : 20, + "id" : 22, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 21, + "id" : 23, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_switch_id", - "id" : 22, + "id" : 24, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 23, + "id" : 25, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 24, + "id" : 26, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 25, + "id" : 27, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 26, + "id" : 28, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 27, + "id" : 29, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 28, + "id" : 30, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 29, + "id" : 31, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_tail", - "id" : 30, + "id" : 32, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true @@ -526,7 +572,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -861,7 +907,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -1047,7 +1093,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "field", @@ -1060,7 +1106,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] }, { "type" : "field", @@ -1121,7 +1167,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -1134,7 +1180,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -1147,7 +1193,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -1160,7 +1206,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -1233,7 +1279,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1246,7 +1292,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1283,7 +1329,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1296,7 +1342,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1884,7 +1930,128 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 16, + "parser_ops" : [ { "parameters" : [ { @@ -1943,7 +2110,7 @@ }, { "name" : "parse_inner_udp", - "id" : 14, + "id" : 17, "parser_ops" : [ { "parameters" : [ @@ -1967,7 +2134,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 15, + "id" : 18, "parser_ops" : [ { "parameters" : [ @@ -1991,7 +2158,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -2015,7 +2182,7 @@ }, { "name" : "parse_int", - "id" : 17, + "id" : 20, "parser_ops" : [], "transitions" : [ { @@ -2040,7 +2207,7 @@ }, { "name" : "parse_intl4_shim", - "id" : 18, + "id" : 21, "parser_ops" : [ { "parameters" : [ @@ -2084,7 +2251,7 @@ }, { "name" : "parse_int_data", - "id" : 19, + "id" : 22, "parser_ops" : [], "transitions" : [ { @@ -2098,7 +2265,7 @@ }, { "name" : "parse_intl4_tail", - "id" : 20, + "id" : 23, "parser_ops" : [ { "parameters" : [ @@ -2130,15 +2297,30 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "intl4_tail"], + "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "intl4_tail"], "primitives" : [] } ], - "meter_arrays" : [], + "meter_arrays" : [ + { + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 0, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" + } + ], "counter_arrays" : [ { "name" : "FabricIngress.process_set_source_sink.counter_set_source", @@ -2231,7 +2413,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -2273,8 +2455,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 12, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 13, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -2286,7 +2492,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -2298,7 +2504,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", - "id" : 13, + "id" : 15, "is_direct" : true, "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "source_info" : { @@ -2310,7 +2516,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 14, + "id" : 16, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2512,7 +2718,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source17"] + "value" : ["scalars", "userMetadata._int_meta_source29"] }, { "type" : "expression", @@ -2548,7 +2754,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -2577,7 +2783,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2606,7 +2812,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type25"] + "value" : ["scalars", "userMetadata._port_type37"] }, { "type" : "hexstr", @@ -2615,7 +2821,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -2637,7 +2843,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type25"] + "value" : ["scalars", "userMetadata._port_type37"] }, { "type" : "runtime_data", @@ -2672,7 +2878,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2691,7 +2897,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type25"] + "value" : ["scalars", "userMetadata._port_type37"] }, { "type" : "runtime_data", @@ -2722,7 +2928,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, { "type" : "runtime_data", @@ -2753,7 +2959,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2784,7 +2990,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "hexstr", @@ -2803,7 +3009,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2834,7 +3040,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2871,7 +3077,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "runtime_data", @@ -2902,7 +3108,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2933,7 +3139,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2942,8 +3148,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 32, + "line" : 32, + "column" : 26, "source_fragment" : "= next_id; ..." } } @@ -2968,7 +3174,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -2978,7 +3184,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2997,8 +3203,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 34, + "line" : 39, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3028,7 +3234,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -3050,7 +3256,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -3060,7 +3266,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -3079,8 +3285,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 34, + "line" : 51, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3138,7 +3344,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3296,7 +3502,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] }, { "type" : "expression", @@ -3323,178 +3529,231 @@ ] }, { - "name" : "packetio25", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 30, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._slice_id25"] }, { - "type" : "field", - "value" : ["packet_out", "egress_port"] + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_out" + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 31, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._slice_id25"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "b2d", - "left" : null, + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, "right" : { - "type" : "bool", - "value" : true + "type" : "hexstr", + "value" : "0x0f" } } } } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 53, - "source_fragment" : "= true; ..." + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." } }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "filtering113", - "id" : 31, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._tc27"] }, { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 36, - "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 32, + "runtime_data" : [ { - "op" : "assign", + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 33, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] - }, - { - "type" : "field", - "value" : ["vlan_tag", "pri"] + "type" : "header", + "value" : "standard_metadata" } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.pri; ..." + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" } - }, + } + ] + }, + { + "name" : "lookup_md_init37", + "id" : 34, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 32, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 37, - "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } } ] }, { - "name" : "acl102", - "id" : 33, + "name" : "lookup_md_init40", + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3502,18 +3761,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } }, { @@ -3521,25 +3780,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["inner_udp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "acl105", - "id" : 34, + "name" : "lookup_md_init43", + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3547,18 +3806,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_udp", "sport"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } }, { @@ -3566,25 +3825,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_udp", "dport"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "acl98", - "id" : 35, + "name" : "lookup_md_init32", + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3592,7 +3851,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", @@ -3600,10 +3888,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -3611,7 +3899,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", @@ -3619,10 +3907,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -3630,7 +3918,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", @@ -3638,17 +3926,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl113", - "id" : 36, + "name" : "lookup_md_init52", + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -3656,7 +3944,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3664,10 +3952,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -3675,7 +3963,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3683,17 +3971,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" - } + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." + } } ] }, { - "name" : "acl116", - "id" : 37, + "name" : "lookup_md_init55", + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -3701,7 +3989,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3709,10 +3997,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -3720,7 +4008,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3728,17 +4016,62 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl109", - "id" : 38, + "name" : "lookup_md_init58", + "id" : 40, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] + }, + { + "type" : "field", + "value" : ["icmp", "icmp_type"] + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] + }, + { + "type" : "field", + "value" : ["icmp", "icmp_code"] + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." + } + } + ] + }, + { + "name" : "lookup_md_init47", + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -3746,7 +4079,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", @@ -3754,10 +4116,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } }, { @@ -3765,7 +4127,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", @@ -3773,10 +4135,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -3784,7 +4146,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", @@ -3792,17 +4154,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "acl27", - "id" : 39, + "name" : "lookup_md_init23", + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -3810,7 +4172,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "hexstr", @@ -3818,10 +4209,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3829,7 +4220,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "hexstr", @@ -3837,10 +4228,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3848,7 +4239,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "hexstr", @@ -3856,10 +4247,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3867,7 +4258,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "hexstr", @@ -3875,10 +4266,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 27, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3886,7 +4277,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", @@ -3894,75 +4285,55 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 28, + "column" : 24, + "source_fragment" : "= 0; ..." } - } - ] - }, - { - "name" : "port_counter31", - "id" : 40, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_8"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_spec"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 38, - "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + "filename" : "include/control/lookup_md_init.p4", + "line" : 29, + "column" : 25, + "source_fragment" : "= 0; ..." } }, { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.egress_port_counter" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { - "type" : "field", - "value" : ["scalars", "tmp_8"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 30, + "column" : 25, + "source_fragment" : "= 0; ..." } } ] }, { - "name" : "port_counter34", - "id" : 41, + "name" : "packetio25", + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -3970,36 +4341,264 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_9"] + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "field", + "value" : ["packet_out", "egress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_out" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 26, + "column" : 12, + "source_fragment" : "hdr.packet_out.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xffffffff" + "type" : "bool", + "value" : true } } } } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 39, - "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." } }, { - "op" : "count", - "parameters" : [ + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 29, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "filtering113", + "id" : 44, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." + } + } + ] + }, + { + "name" : "filtering129", + "id" : 45, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] + }, + { + "type" : "hexstr", + "value" : "0x41" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + } + } + ] + }, + { + "name" : "port_counter31", + "id" : 46, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_8"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.egress_port_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_8"] + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + } + } + ] + }, + { + "name" : "port_counter34", + "id" : 47, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_9"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + } + }, + { + "op" : "count", + "parameters" : [ { "type" : "counter_array", "value" : "FabricIngress.port_counters_control.ingress_port_counter" @@ -4018,33 +4617,243 @@ } ] }, + { + "name" : "slicing114", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "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" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color26"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + }, + { + "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._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." + } + } + ] + }, { "name" : "nop", - "id" : 42, + "id" : 49, "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 43, + "id" : 50, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 51, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 44, + "id" : 52, "runtime_data" : [], "primitives" : [] }, { "name" : "NoAction", - "id" : 45, + "id" : 53, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 46, + "id" : 54, "runtime_data" : [ { "name" : "max_hop", @@ -4112,7 +4921,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 169, + "line" : 186, "column" : 36, "source_fragment" : "4; ..." } @@ -4403,7 +5212,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] } ], "source_info" : { @@ -4530,7 +5339,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 165, + "line" : 182, "column" : 24, "source_fragment" : "0x1; ..." } @@ -4539,7 +5348,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 47, + "id" : 55, "runtime_data" : [ { "name" : "switch_id", @@ -4552,7 +5361,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit18"] + "value" : ["scalars", "userMetadata._int_meta_transit30"] }, { "type" : "expression", @@ -4581,7 +5390,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] }, { "type" : "runtime_data", @@ -4599,13 +5408,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 48, + "id" : 56, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 49, + "id" : 57, "runtime_data" : [], "primitives" : [ { @@ -4679,7 +5488,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -4693,7 +5502,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -4721,7 +5530,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -4735,7 +5544,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -4762,7 +5571,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 50, + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -4804,7 +5613,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -4818,7 +5627,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -4846,7 +5655,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -4860,7 +5669,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -4887,7 +5696,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 51, + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -4995,7 +5804,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -5009,7 +5818,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -5037,7 +5846,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -5051,7 +5860,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -5078,7 +5887,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 52, + "id" : 60, "runtime_data" : [], "primitives" : [ { @@ -5165,7 +5974,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -5179,7 +5988,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -5207,7 +6016,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -5221,7 +6030,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -5248,7 +6057,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 53, + "id" : 61, "runtime_data" : [], "primitives" : [ { @@ -5401,7 +6210,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -5415,7 +6224,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -5443,7 +6252,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -5457,7 +6266,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -5484,7 +6293,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 54, + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -5605,7 +6414,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -5619,7 +6428,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -5647,7 +6456,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -5661,7 +6470,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -5688,7 +6497,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 55, + "id" : 63, "runtime_data" : [], "primitives" : [ { @@ -5875,7 +6684,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -5889,7 +6698,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -5917,7 +6726,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -5931,7 +6740,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -5958,7 +6767,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 56, + "id" : 64, "runtime_data" : [], "primitives" : [ { @@ -5985,7 +6794,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -6000,7 +6809,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -6014,7 +6823,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -6042,7 +6851,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -6056,7 +6865,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -6083,7 +6892,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 57, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -6176,7 +6985,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -6191,7 +7000,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -6205,7 +7014,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -6233,7 +7042,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -6247,7 +7056,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -6274,7 +7083,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 58, + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -6335,7 +7144,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -6350,7 +7159,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -6364,7 +7173,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -6392,7 +7201,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -6406,7 +7215,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -6433,7 +7242,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 59, + "id" : 67, "runtime_data" : [], "primitives" : [ { @@ -6560,7 +7369,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -6575,7 +7384,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -6589,7 +7398,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -6617,7 +7426,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -6631,7 +7440,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -6658,7 +7467,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 60, + "id" : 68, "runtime_data" : [], "primitives" : [ { @@ -6764,7 +7573,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -6779,7 +7588,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -6793,7 +7602,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -6821,7 +7630,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -6835,7 +7644,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -6862,7 +7671,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 61, + "id" : 69, "runtime_data" : [], "primitives" : [ { @@ -7034,7 +7843,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -7049,7 +7858,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -7063,7 +7872,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -7091,7 +7900,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -7105,7 +7914,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -7132,7 +7941,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 62, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -7272,7 +8081,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -7287,7 +8096,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -7301,7 +8110,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -7329,7 +8138,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -7343,7 +8152,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -7370,7 +8179,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 63, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -7576,7 +8385,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id20"] + "value" : ["scalars", "userMetadata._int_meta_switch_id32"] } ], "source_info" : { @@ -7591,7 +8400,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -7605,7 +8414,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -7633,7 +8442,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -7647,7 +8456,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -7674,13 +8483,13 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 64, + "id" : 72, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 65, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -7722,7 +8531,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -7736,7 +8545,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -7764,7 +8573,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -7778,7 +8587,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -7805,7 +8614,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 66, + "id" : 74, "runtime_data" : [], "primitives" : [ { @@ -7866,7 +8675,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -7880,7 +8689,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -7908,7 +8717,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -7922,7 +8731,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -7949,7 +8758,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 67, + "id" : 75, "runtime_data" : [], "primitives" : [ { @@ -8044,7 +8853,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8058,7 +8867,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8086,7 +8895,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8100,7 +8909,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -8127,7 +8936,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 68, + "id" : 76, "runtime_data" : [], "primitives" : [ { @@ -8192,7 +9001,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8206,7 +9015,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8234,7 +9043,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8248,7 +9057,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -8275,7 +9084,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 69, + "id" : 77, "runtime_data" : [], "primitives" : [ { @@ -8374,7 +9183,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8388,7 +9197,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8416,7 +9225,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8430,7 +9239,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -8457,7 +9266,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 70, + "id" : 78, "runtime_data" : [], "primitives" : [ { @@ -8575,7 +9384,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8589,7 +9398,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8617,7 +9426,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8631,7 +9440,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -8658,7 +9467,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 71, + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -8810,7 +9619,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8824,7 +9633,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8852,7 +9661,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8866,7 +9675,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -8893,7 +9702,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 72, + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -8935,7 +9744,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -8949,7 +9758,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -8977,7 +9786,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -8991,7 +9800,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9018,7 +9827,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 73, + "id" : 81, "runtime_data" : [], "primitives" : [ { @@ -9094,7 +9903,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -9108,7 +9917,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -9136,7 +9945,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -9150,7 +9959,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9177,7 +9986,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 74, + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -9272,7 +10081,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -9286,7 +10095,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -9314,7 +10123,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -9328,7 +10137,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9355,7 +10164,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 75, + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -9484,7 +10293,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -9498,7 +10307,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -9526,7 +10335,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -9540,7 +10349,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9567,7 +10376,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 76, + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -9666,7 +10475,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -9680,7 +10489,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -9708,7 +10517,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -9722,7 +10531,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9749,7 +10558,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 77, + "id" : 85, "runtime_data" : [], "primitives" : [ { @@ -9882,7 +10691,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -9896,7 +10705,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -9924,7 +10733,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -9938,7 +10747,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -9965,7 +10774,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 78, + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -10117,7 +10926,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -10131,7 +10940,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -10159,7 +10968,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -10173,7 +10982,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -10200,7 +11009,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 79, + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -10386,7 +11195,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, { "type" : "expression", @@ -10400,7 +11209,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] }, "right" : { "type" : "hexstr", @@ -10428,7 +11237,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, { "type" : "expression", @@ -10442,7 +11251,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] }, "right" : { "type" : "hexstr", @@ -10469,7 +11278,7 @@ }, { "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 80, + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -10496,7 +11305,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] } ], "source_info" : { @@ -10510,7 +11319,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 81, + "id" : 89, "runtime_data" : [], "primitives" : [ { @@ -10537,7 +11346,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] } ], "source_info" : { @@ -10594,7 +11403,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] } ], "source_info" : { @@ -10618,7 +11427,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 130, + "line" : 147, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -10627,7 +11436,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 82, + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -10654,7 +11463,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { @@ -10673,7 +11482,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._vlan_pri10"] } ], "source_info" : { @@ -10697,7 +11506,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 129, + "line" : 146, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -10711,7 +11520,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] } ], "source_info" : { @@ -10725,7 +11534,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 83, + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -10747,7 +11556,7 @@ }, { "name" : "FabricEgress.egress_next.drop", - "id" : 84, + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -10767,9 +11576,41 @@ } ] }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 93, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 135, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, { "name" : "packetio41", - "id" : 85, + "id" : 95, "runtime_data" : [], "primitives" : [ { @@ -10786,7 +11627,7 @@ }, { "name" : "packetio44", - "id" : 86, + "id" : 96, "runtime_data" : [], "primitives" : [ { @@ -10837,7 +11678,7 @@ }, { "name" : "next283", - "id" : 87, + "id" : 97, "runtime_data" : [], "primitives" : [ { @@ -10859,7 +11700,7 @@ }, { "name" : "next310", - "id" : 88, + "id" : 98, "runtime_data" : [], "primitives" : [ { @@ -10881,7 +11722,7 @@ }, { "name" : "next309", - "id" : 89, + "id" : 99, "runtime_data" : [], "primitives" : [ { @@ -10930,7 +11771,7 @@ }, { "name" : "next314", - "id" : 90, + "id" : 100, "runtime_data" : [], "primitives" : [ { @@ -10952,7 +11793,7 @@ }, { "name" : "next313", - "id" : 91, + "id" : 101, "runtime_data" : [], "primitives" : [ { @@ -11001,7 +11842,7 @@ }, { "name" : "act", - "id" : 92, + "id" : 102, "runtime_data" : [], "primitives" : [ { @@ -11031,7 +11872,7 @@ }, { "name" : "int_transit420", - "id" : 93, + "id" : 103, "runtime_data" : [], "primitives" : [ { @@ -11067,7 +11908,7 @@ }, { "name" : "int_transit428", - "id" : 94, + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -11093,7 +11934,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] } } }, @@ -11116,7 +11957,7 @@ }, { "name" : "int_transit425", - "id" : 95, + "id" : 105, "runtime_data" : [], "primitives" : [ { @@ -11165,7 +12006,7 @@ }, { "name" : "int_transit431", - "id" : 96, + "id" : 106, "runtime_data" : [], "primitives" : [ { @@ -11191,7 +12032,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes22"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes34"] } } }, @@ -11214,7 +12055,7 @@ }, { "name" : "int_transit434", - "id" : 97, + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -11240,7 +12081,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words21"] + "value" : ["scalars", "userMetadata._int_meta_new_words33"] } } }, @@ -11260,6 +12101,58 @@ } } ] + }, + { + "name" : "slicing159", + "id" : 108, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 109, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] } ], "pipelines" : [ @@ -11268,15 +12161,276 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 47, + "line" : 49, "column" : 8, "source_fragment" : "FabricIngress" }, - "init_table" : "node_2", + "init_table" : "tbl_lookup_md_init23", "tables" : [ + { + "name" : "tbl_lookup_md_init23", + "id" : 0, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "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" : [42], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", + "next_tables" : { + "lookup_md_init23" : "node_3" + }, + "default_entry" : { + "action_id" : 42, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init32", + "id" : 1, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "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" : [37], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", + "next_tables" : { + "lookup_md_init32" : "node_5" + }, + "default_entry" : { + "action_id" : 37, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init37", + "id" : 2, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "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" : [34], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init37" : "node_19" + }, + "default_entry" : { + "action_id" : 34, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init40", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "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" : [35], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init40" : "node_19" + }, + "default_entry" : { + "action_id" : 35, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init43", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "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" : [36], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init43" : "node_19" + }, + "default_entry" : { + "action_id" : 36, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init47", + "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "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" : [41], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", + "next_tables" : { + "lookup_md_init47" : "node_13" + }, + "default_entry" : { + "action_id" : 41, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init52", + "id" : 6, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "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" : [38], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init52" : "node_19" + }, + "default_entry" : { + "action_id" : 38, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init55", + "id" : 7, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "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" : [39], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init55" : "node_19" + }, + "default_entry" : { + "action_id" : 39, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init58", + "id" : 8, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "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" : [40], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init58" : "node_19" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, { "name" : "tbl_packetio25", - "id" : 0, + "id" : 9, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 25, @@ -11290,22 +12444,89 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30], + "action_ids" : [43], "actions" : ["packetio25"], - "base_default_next" : "node_4", + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", "next_tables" : { - "packetio25" : "node_4" + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" }, "default_entry" : { - "action_id" : 30, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, + { + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 49, + "column" : 10, + "source_fragment" : "classifier" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 512, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [30, 31], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", + "next_tables" : { + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" + }, + "default_entry" : { + "action_id" : 30, + "action_const" : true, + "action_data" : ["0x0", "0x0"], + "action_entry_const" : true + } + }, { "name" : "tbl_filtering113", - "id" : 1, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -11319,14 +12540,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [31], + "action_ids" : [44], "actions" : ["filtering113"], - "base_default_next" : "node_6", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_6" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 31, + "action_id" : 44, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11334,7 +12555,7 @@ }, { "name" : "tbl_filtering129", - "id" : 2, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -11348,14 +12569,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32], + "action_ids" : [45], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 32, + "action_id" : 45, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11363,7 +12584,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 3, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -11413,7 +12634,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 4, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -11442,7 +12663,7 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata._ip_eth_type0"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], "mask" : null } ], @@ -11454,9 +12675,9 @@ "direct_meters" : null, "action_ids" : [13], "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_10", + "base_default_next" : "node_28", "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_10" + "FabricIngress.filtering.set_forwarding_type" : "node_28" }, "default_entry" : { "action_id" : 13, @@ -11467,7 +12688,7 @@ }, { "name" : "FabricIngress.forwarding.bridging", - "id" : 5, + "id" : 15, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 46, @@ -11478,7 +12699,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -11496,10 +12717,10 @@ "direct_meters" : null, "action_ids" : [14, 1], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.set_next_id_bridging" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 1, @@ -11510,7 +12731,7 @@ }, { "name" : "FabricIngress.forwarding.mpls", - "id" : 6, + "id" : 16, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 71, @@ -11521,7 +12742,7 @@ { "match_type" : "exact", "name" : "mpls_label", - "target" : ["scalars", "userMetadata._mpls_label4"], + "target" : ["scalars", "userMetadata._mpls_label12"], "mask" : null } ], @@ -11533,10 +12754,10 @@ "direct_meters" : null, "action_ids" : [15, 2], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 2, @@ -11547,7 +12768,7 @@ }, { "name" : "FabricIngress.forwarding.routing_v4", - "id" : 7, + "id" : 17, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 108, @@ -11558,7 +12779,7 @@ { "match_type" : "lpm", "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata._ipv4_dst_addr16"], + "target" : ["scalars", "userMetadata._ipv4_dst_addr24"], "mask" : null } ], @@ -11570,11 +12791,11 @@ "direct_meters" : null, "action_ids" : [16, 17, 3], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_17", - "FabricIngress.forwarding.nop_routing_v4" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_35", + "FabricIngress.forwarding.nop_routing_v4" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 3, @@ -11585,7 +12806,7 @@ }, { "name" : "FabricIngress.pre_next.next_mpls", - "id" : 8, + "id" : 18, "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 36, @@ -11596,7 +12817,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -11622,7 +12843,7 @@ }, { "name" : "FabricIngress.pre_next.next_vlan", - "id" : 9, + "id" : 19, "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 73, @@ -11633,7 +12854,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -11645,216 +12866,13 @@ "direct_meters" : null, "action_ids" : [19, 5], "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], - "base_default_next" : "tbl_acl27", - "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" - }, - "default_entry" : { - "action_id" : 5, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl27", - "id" : 10, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [39], - "actions" : ["acl27"], - "base_default_next" : "node_21", - "next_tables" : { - "acl27" : "node_21" - }, - "default_entry" : { - "action_id" : 39, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl98", - "id" : 11, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [35], - "actions" : ["acl98"], - "base_default_next" : "node_23", - "next_tables" : { - "acl98" : "node_23" - }, - "default_entry" : { - "action_id" : 35, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl102", - "id" : 12, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "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" : [33], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl102" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 33, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl105", - "id" : 13, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "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" : [34], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl105" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 34, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl109", - "id" : 14, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [38], - "actions" : ["acl109"], - "base_default_next" : "node_29", - "next_tables" : { - "acl109" : "node_29" - }, - "default_entry" : { - "action_id" : 38, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl113", - "id" : 15, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "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" : [36], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl113" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 36, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl116", - "id" : 16, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "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" : [37], - "actions" : ["acl116"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 37, + "action_id" : 5, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11862,10 +12880,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 17, + "id" : 20, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -11903,19 +12921,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -11933,19 +12951,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata._port_type25"], + "target" : ["scalars", "userMetadata._port_type37"], "mask" : null } ], @@ -11957,13 +12975,13 @@ "direct_meters" : null, "action_ids" : [20, 21, 22, 23, 24], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_34", + "base_default_next" : "node_39", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_34", - "FabricIngress.acl.punt_to_cpu" : "node_34", - "FabricIngress.acl.set_clone_session_id" : "node_34", - "FabricIngress.acl.drop" : "node_34", - "FabricIngress.acl.nop_acl" : "node_34" + "FabricIngress.acl.set_next_id_acl" : "node_39", + "FabricIngress.acl.punt_to_cpu" : "node_39", + "FabricIngress.acl.set_clone_session_id" : "node_39", + "FabricIngress.acl.drop" : "node_39", + "FabricIngress.acl.nop_acl" : "node_39" }, "default_entry" : { "action_id" : 24, @@ -11974,7 +12992,7 @@ }, { "name" : "FabricIngress.next.xconnect", - "id" : 18, + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", "line" : 68, @@ -11991,7 +13009,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -12018,7 +13036,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 19, + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -12029,7 +13047,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -12051,7 +13069,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 20, + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -12062,7 +13080,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -12074,10 +13092,10 @@ "direct_meters" : null, "action_ids" : [29, 8], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_38", + "base_default_next" : "node_43", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_38", - "nop" : "node_38" + "FabricIngress.next.set_mcast_group_id" : "node_43", + "nop" : "node_43" }, "default_entry" : { "action_id" : 8, @@ -12088,7 +13106,7 @@ }, { "name" : "tbl_port_counter31", - "id" : 21, + "id" : 24, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 31, @@ -12102,14 +13120,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], + "action_ids" : [46], "actions" : ["port_counter31"], - "base_default_next" : "node_40", + "base_default_next" : "node_45", "next_tables" : { - "port_counter31" : "node_40" + "port_counter31" : "node_45" }, "default_entry" : { - "action_id" : 40, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12117,7 +13135,7 @@ }, { "name" : "tbl_port_counter34", - "id" : 22, + "id" : 25, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 34, @@ -12131,14 +13149,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], + "action_ids" : [47], "actions" : ["port_counter34"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 41, + "action_id" : 47, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12146,84 +13164,346 @@ }, { "name" : "FabricIngress.process_set_source_sink.tb_set_source", - "id" : 23, + "id" : 26, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "tb_set_source" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 511, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [9, 0], + "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], + "base_default_next" : "tbl_slicing114", + "next_tables" : { + "FabricIngress.process_set_source_sink.int_set_source" : "tbl_slicing114", + "nop" : "tbl_slicing114" + }, + "default_entry" : { + "action_id" : 0, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing114", + "id" : 27, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [48], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing114" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 28, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 93, + "column" : 10, + "source_fragment" : "queues" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id25"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc27"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color26"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [32, 33], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], + "base_default_next" : null, + "next_tables" : { + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + } + ], + "action_profiles" : [ + { + "name" : "FabricIngress.next.hashed_selector", + "id" : 0, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 125, + "column" : 57, + "source_fragment" : "hashed_selector" + }, + "max_size" : 1024, + "selector" : { + "algo" : "crc16", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_proto20"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._l4_sport21"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._l4_dport22"] + } + ] + } + } + ], + "conditionals" : [ + { + "name" : "node_3", + "id" : 0, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "hdr.inner_ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" + }, + { + "name" : "node_5", + "id" : 1, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, + "column" : 16, + "source_fragment" : "hdr.inner_tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_tcp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init37", + "false_next" : "node_7" + }, + { + "name" : "node_7", + "id" : 2, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_udp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" + }, + { + "name" : "node_9", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_icmp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" + }, + { + "name" : "node_11", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init47", + "false_next" : "node_19" + }, + { + "name" : "node_13", + "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init52", + "false_next" : "node_15" + }, + { + "name" : "node_15", + "id" : 6, "source_info" : { - "filename" : "include/int/int_main.p4", - "line" : 46, - "column" : 10, - "source_fragment" : "tb_set_source" + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" }, - "key" : [ - { - "match_type" : "exact", - "name" : "ig_port", - "target" : ["standard_metadata", "ingress_port"], - "mask" : null + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 511, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [9, 0], - "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], - "base_default_next" : null, - "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_source" : null, - "nop" : null }, - "default_entry" : { - "action_id" : 0, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - } - ], - "action_profiles" : [ + "true_next" : "tbl_lookup_md_init55", + "false_next" : "node_17" + }, { - "name" : "FabricIngress.next.hashed_selector", - "id" : 0, + "name" : "node_17", + "id" : 7, "source_info" : { - "filename" : "include/control/next.p4", - "line" : 125, - "column" : 57, - "source_fragment" : "hashed_selector" + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" }, - "max_size" : 1024, - "selector" : { - "algo" : "crc16", - "input" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] - }, - { + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["icmp", "$valid$"] } - ] - } - } - ], - "conditionals" : [ + } + }, + "true_next" : "tbl_lookup_md_init58", + "false_next" : "node_19" + }, { - "name" : "node_2", - "id" : 0, + "name" : "node_19", + "id" : 8, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 24, @@ -12242,11 +13522,11 @@ } }, "true_next" : "tbl_packetio25", - "false_next" : "node_4" + "false_next" : "FabricIngress.slice_tc_classifier.classifier" }, { - "name" : "node_4", - "id" : 1, + "name" : "node_22", + "id" : 9, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 112, @@ -12265,11 +13545,11 @@ } }, "true_next" : "tbl_filtering113", - "false_next" : "node_6" + "false_next" : "node_24" }, { - "name" : "node_6", - "id" : 2, + "name" : "node_24", + "id" : 10, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 124, @@ -12298,11 +13578,11 @@ "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { - "name" : "node_10", - "id" : 3, + "name" : "node_28", + "id" : 11, "source_info" : { "filename" : "fabric.p4", - "line" : 71, + "line" : 80, "column" : 12, "source_fragment" : "fabric_metadata.skip_forwarding" }, @@ -12318,18 +13598,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] } } } } }, - "true_next" : "node_11", - "false_next" : "node_17" + "true_next" : "node_29", + "false_next" : "node_35" }, { - "name" : "node_11", - "id" : 4, + "name" : "node_29", + "id" : 12, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 150, @@ -12342,7 +13622,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -12351,11 +13631,11 @@ } }, "true_next" : "FabricIngress.forwarding.bridging", - "false_next" : "node_13" + "false_next" : "node_31" }, { - "name" : "node_13", - "id" : 5, + "name" : "node_31", + "id" : 13, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 151, @@ -12368,7 +13648,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -12377,11 +13657,11 @@ } }, "true_next" : "FabricIngress.forwarding.mpls", - "false_next" : "node_15" + "false_next" : "node_33" }, { - "name" : "node_15", - "id" : 6, + "name" : "node_33", + "id" : 14, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 152, @@ -12394,7 +13674,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -12403,14 +13683,14 @@ } }, "true_next" : "FabricIngress.forwarding.routing_v4", - "false_next" : "node_17" + "false_next" : "node_35" }, { - "name" : "node_17", - "id" : 7, + "name" : "node_35", + "id" : 15, "source_info" : { "filename" : "fabric.p4", - "line" : 74, + "line" : 83, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -12426,176 +13706,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] } } } } }, "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" - }, - { - "name" : "node_21", - "id" : 8, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, - "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_ipv4", "$valid$"] - } - } - } - } - }, - "true_next" : "tbl_acl98", - "false_next" : "node_27" - }, - { - "name" : "node_23", - "id" : 9, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl102", - "false_next" : "node_25" - }, - { - "name" : "node_25", - "id" : 10, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_udp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" - }, - { - "name" : "node_27", - "id" : 11, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" - }, - { - "name" : "node_29", - "id" : 12, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl113", - "false_next" : "node_31" - }, - { - "name" : "node_31", - "id" : 13, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl116", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_34", - "id" : 14, + "name" : "node_39", + "id" : 16, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -12611,18 +13736,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] } } } } }, - "false_next" : null, - "true_next" : "FabricIngress.next.xconnect" + "true_next" : "FabricIngress.next.xconnect", + "false_next" : "tbl_slicing114" }, { - "name" : "node_38", - "id" : 15, + "name" : "node_43", + "id" : 17, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -12644,11 +13769,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_40" + "false_next" : "node_45" }, { - "name" : "node_40", - "id" : 16, + "name" : "node_45", + "id" : 18, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -12679,15 +13804,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_45", + "init_table" : "node_52", "tables" : [ { "name" : "tbl_packetio41", - "id" : 24, + "id" : 29, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -12701,14 +13826,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [85], + "action_ids" : [95], "actions" : ["packetio41"], - "base_default_next" : "node_47", + "base_default_next" : "node_54", "next_tables" : { - "packetio41" : "node_47" + "packetio41" : "node_54" }, "default_entry" : { - "action_id" : 85, + "action_id" : 95, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12716,7 +13841,7 @@ }, { "name" : "tbl_packetio44", - "id" : 25, + "id" : 30, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -12730,14 +13855,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86], + "action_ids" : [96], "actions" : ["packetio44"], - "base_default_next" : "node_49", + "base_default_next" : "node_56", "next_tables" : { - "packetio44" : "node_49" + "packetio44" : "node_56" }, "default_entry" : { - "action_id" : 86, + "action_id" : 96, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12745,7 +13870,7 @@ }, { "name" : "tbl_next283", - "id" : 26, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -12759,14 +13884,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87], + "action_ids" : [97], "actions" : ["next283"], - "base_default_next" : "node_51", + "base_default_next" : "node_58", "next_tables" : { - "next283" : "node_51" + "next283" : "node_58" }, "default_entry" : { - "action_id" : 87, + "action_id" : 97, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12774,7 +13899,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 27, + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -12788,14 +13913,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [80], + "action_ids" : [88], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 80, + "action_id" : 88, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12803,7 +13928,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 28, + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -12817,14 +13942,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [81], + "action_ids" : [89], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 81, + "action_id" : 89, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12832,7 +13957,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 29, + "id" : 34, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -12843,7 +13968,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -12859,16 +13984,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [82, 83, 84], + "action_ids" : [90, 91, 92], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_56", + "base_default_next" : "node_63", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_56", - "FabricEgress.egress_next.pop_vlan" : "node_56", - "FabricEgress.egress_next.drop" : "node_56" + "FabricEgress.egress_next.push_vlan" : "node_63", + "FabricEgress.egress_next.pop_vlan" : "node_63", + "FabricEgress.egress_next.drop" : "node_63" }, "default_entry" : { - "action_id" : 84, + "action_id" : 92, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12876,7 +14001,7 @@ }, { "name" : "tbl_next309", - "id" : 30, + "id" : 35, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -12890,14 +14015,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [89], + "action_ids" : [99], "actions" : ["next309"], - "base_default_next" : "node_58", + "base_default_next" : "node_65", "next_tables" : { - "next309" : "node_58" + "next309" : "node_65" }, "default_entry" : { - "action_id" : 89, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12905,7 +14030,7 @@ }, { "name" : "tbl_next310", - "id" : 31, + "id" : 36, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -12919,14 +14044,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [88], + "action_ids" : [98], "actions" : ["next310"], - "base_default_next" : "node_64", + "base_default_next" : "node_71", "next_tables" : { - "next310" : "node_64" + "next310" : "node_71" }, "default_entry" : { - "action_id" : 88, + "action_id" : 98, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12934,7 +14059,7 @@ }, { "name" : "tbl_next313", - "id" : 32, + "id" : 37, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -12948,14 +14073,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [91], + "action_ids" : [101], "actions" : ["next313"], - "base_default_next" : "node_62", + "base_default_next" : "node_69", "next_tables" : { - "next313" : "node_62" + "next313" : "node_69" }, "default_entry" : { - "action_id" : 91, + "action_id" : 101, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12963,7 +14088,7 @@ }, { "name" : "tbl_next314", - "id" : 33, + "id" : 38, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -12977,14 +14102,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [90], + "action_ids" : [100], "actions" : ["next314"], - "base_default_next" : "node_64", + "base_default_next" : "node_71", "next_tables" : { - "next314" : "node_64" + "next314" : "node_71" }, "default_entry" : { - "action_id" : 90, + "action_id" : 100, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -12992,7 +14117,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 34, + "id" : 39, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -13015,13 +14140,13 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "userMetadata._l4_sport13"], + "target" : ["scalars", "userMetadata._l4_sport21"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "userMetadata._l4_dport14"], + "target" : ["scalars", "userMetadata._l4_dport22"], "mask" : null } ], @@ -13031,15 +14156,15 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46, 42], + "action_ids" : [54, 49], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_67", + "base_default_next" : "node_74", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_67", - "nop" : "node_67" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_74", + "nop" : "node_74" }, "default_entry" : { - "action_id" : 42, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13047,7 +14172,7 @@ }, { "name" : "tbl_act", - "id" : 35, + "id" : 40, "key" : [], "match_type" : "exact", "type" : "simple", @@ -13055,14 +14180,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [92], + "action_ids" : [102], "actions" : ["act"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { "act" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 92, + "action_id" : 102, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13070,7 +14195,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 36, + "id" : 41, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -13091,15 +14216,15 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47, 43], + "action_ids" : [55, 50], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_70", + "base_default_next" : "node_77", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_70", - "nop" : "node_70" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_77", + "nop" : "node_77" }, "default_entry" : { - "action_id" : 43, + "action_id" : 50, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13107,7 +14232,7 @@ }, { "name" : "tbl_int_transit420", - "id" : 37, + "id" : 42, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -13121,14 +14246,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [93], + "action_ids" : [103], "actions" : ["int_transit420"], - "base_default_next" : "node_72", + "base_default_next" : "node_79", "next_tables" : { - "int_transit420" : "node_72" + "int_transit420" : "node_79" }, "default_entry" : { - "action_id" : 93, + "action_id" : 103, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13136,7 +14261,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 38, + "id" : 43, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -13157,7 +14282,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 44], + "action_ids" : [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 52], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -13180,7 +14305,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 44, + "action_id" : 52, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -13200,7 +14325,7 @@ } ], "action_entry" : { - "action_id" : 48, + "action_id" : 56, "action_data" : [] }, "priority" : 1 @@ -13219,7 +14344,7 @@ } ], "action_entry" : { - "action_id" : 49, + "action_id" : 57, "action_data" : [] }, "priority" : 2 @@ -13238,7 +14363,7 @@ } ], "action_entry" : { - "action_id" : 50, + "action_id" : 58, "action_data" : [] }, "priority" : 3 @@ -13257,7 +14382,7 @@ } ], "action_entry" : { - "action_id" : 51, + "action_id" : 59, "action_data" : [] }, "priority" : 4 @@ -13276,7 +14401,7 @@ } ], "action_entry" : { - "action_id" : 52, + "action_id" : 60, "action_data" : [] }, "priority" : 5 @@ -13295,7 +14420,7 @@ } ], "action_entry" : { - "action_id" : 53, + "action_id" : 61, "action_data" : [] }, "priority" : 6 @@ -13314,7 +14439,7 @@ } ], "action_entry" : { - "action_id" : 54, + "action_id" : 62, "action_data" : [] }, "priority" : 7 @@ -13333,7 +14458,7 @@ } ], "action_entry" : { - "action_id" : 55, + "action_id" : 63, "action_data" : [] }, "priority" : 8 @@ -13352,7 +14477,7 @@ } ], "action_entry" : { - "action_id" : 56, + "action_id" : 64, "action_data" : [] }, "priority" : 9 @@ -13371,7 +14496,7 @@ } ], "action_entry" : { - "action_id" : 57, + "action_id" : 65, "action_data" : [] }, "priority" : 10 @@ -13390,7 +14515,7 @@ } ], "action_entry" : { - "action_id" : 58, + "action_id" : 66, "action_data" : [] }, "priority" : 11 @@ -13409,7 +14534,7 @@ } ], "action_entry" : { - "action_id" : 59, + "action_id" : 67, "action_data" : [] }, "priority" : 12 @@ -13428,7 +14553,7 @@ } ], "action_entry" : { - "action_id" : 60, + "action_id" : 68, "action_data" : [] }, "priority" : 13 @@ -13447,7 +14572,7 @@ } ], "action_entry" : { - "action_id" : 61, + "action_id" : 69, "action_data" : [] }, "priority" : 14 @@ -13466,7 +14591,7 @@ } ], "action_entry" : { - "action_id" : 62, + "action_id" : 70, "action_data" : [] }, "priority" : 15 @@ -13485,7 +14610,7 @@ } ], "action_entry" : { - "action_id" : 63, + "action_id" : 71, "action_data" : [] }, "priority" : 16 @@ -13494,7 +14619,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 39, + "id" : 44, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -13515,7 +14640,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 45], + "action_ids" : [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 53], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], "base_default_next" : "tbl_int_transit425", "next_tables" : { @@ -13538,7 +14663,7 @@ "NoAction" : "tbl_int_transit425" }, "default_entry" : { - "action_id" : 45, + "action_id" : 53, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -13558,7 +14683,7 @@ } ], "action_entry" : { - "action_id" : 64, + "action_id" : 72, "action_data" : [] }, "priority" : 1 @@ -13577,7 +14702,7 @@ } ], "action_entry" : { - "action_id" : 65, + "action_id" : 73, "action_data" : [] }, "priority" : 2 @@ -13596,7 +14721,7 @@ } ], "action_entry" : { - "action_id" : 66, + "action_id" : 74, "action_data" : [] }, "priority" : 3 @@ -13615,7 +14740,7 @@ } ], "action_entry" : { - "action_id" : 67, + "action_id" : 75, "action_data" : [] }, "priority" : 4 @@ -13634,7 +14759,7 @@ } ], "action_entry" : { - "action_id" : 68, + "action_id" : 76, "action_data" : [] }, "priority" : 5 @@ -13653,7 +14778,7 @@ } ], "action_entry" : { - "action_id" : 69, + "action_id" : 77, "action_data" : [] }, "priority" : 6 @@ -13672,7 +14797,7 @@ } ], "action_entry" : { - "action_id" : 70, + "action_id" : 78, "action_data" : [] }, "priority" : 7 @@ -13691,7 +14816,7 @@ } ], "action_entry" : { - "action_id" : 71, + "action_id" : 79, "action_data" : [] }, "priority" : 8 @@ -13710,7 +14835,7 @@ } ], "action_entry" : { - "action_id" : 72, + "action_id" : 80, "action_data" : [] }, "priority" : 9 @@ -13729,7 +14854,7 @@ } ], "action_entry" : { - "action_id" : 73, + "action_id" : 81, "action_data" : [] }, "priority" : 10 @@ -13748,7 +14873,7 @@ } ], "action_entry" : { - "action_id" : 74, + "action_id" : 82, "action_data" : [] }, "priority" : 11 @@ -13767,7 +14892,7 @@ } ], "action_entry" : { - "action_id" : 75, + "action_id" : 83, "action_data" : [] }, "priority" : 12 @@ -13786,7 +14911,7 @@ } ], "action_entry" : { - "action_id" : 76, + "action_id" : 84, "action_data" : [] }, "priority" : 13 @@ -13805,7 +14930,7 @@ } ], "action_entry" : { - "action_id" : 77, + "action_id" : 85, "action_data" : [] }, "priority" : 14 @@ -13824,7 +14949,7 @@ } ], "action_entry" : { - "action_id" : 78, + "action_id" : 86, "action_data" : [] }, "priority" : 15 @@ -13843,7 +14968,7 @@ } ], "action_entry" : { - "action_id" : 79, + "action_id" : 87, "action_data" : [] }, "priority" : 16 @@ -13852,7 +14977,7 @@ }, { "name" : "tbl_int_transit425", - "id" : 40, + "id" : 45, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -13866,14 +14991,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95], + "action_ids" : [105], "actions" : ["int_transit425"], - "base_default_next" : "node_76", + "base_default_next" : "node_83", "next_tables" : { - "int_transit425" : "node_76" + "int_transit425" : "node_83" }, "default_entry" : { - "action_id" : 95, + "action_id" : 105, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13881,7 +15006,7 @@ }, { "name" : "tbl_int_transit428", - "id" : 41, + "id" : 46, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -13895,14 +15020,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [94], + "action_ids" : [104], "actions" : ["int_transit428"], - "base_default_next" : "node_78", + "base_default_next" : "node_85", "next_tables" : { - "int_transit428" : "node_78" + "int_transit428" : "node_85" }, "default_entry" : { - "action_id" : 94, + "action_id" : 104, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13910,7 +15035,7 @@ }, { "name" : "tbl_int_transit431", - "id" : 42, + "id" : 47, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -13924,14 +15049,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [96], + "action_ids" : [106], "actions" : ["int_transit431"], - "base_default_next" : "node_80", + "base_default_next" : "node_87", "next_tables" : { - "int_transit431" : "node_80" + "int_transit431" : "node_87" }, "default_entry" : { - "action_id" : 96, + "action_id" : 106, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13939,7 +15064,7 @@ }, { "name" : "tbl_int_transit434", - "id" : 43, + "id" : 48, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -13953,14 +15078,109 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [97], + "action_ids" : [107], "actions" : ["int_transit434"], + "base_default_next" : "tbl_slicing126", + "next_tables" : { + "int_transit434" : "tbl_slicing126" + }, + "default_entry" : { + "action_id" : 107, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing126", + "id" : 49, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [109], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 109, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 50, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 138, + "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" : [93, 94, 51], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], "base_default_next" : null, "next_tables" : { - "int_transit434" : null + "__MISS__" : null, + "__HIT__" : "node_91" }, "default_entry" : { - "action_id" : 97, + "action_id" : 51, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing159", + "id" : 51, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [108], + "actions" : ["slicing159"], + "base_default_next" : null, + "next_tables" : { + "slicing159" : null + }, + "default_entry" : { + "action_id" : 108, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13970,11 +15190,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_45", - "id" : 17, + "name" : "node_52", + "id" : 19, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 118, "column" : 33, "source_fragment" : "fabric_metadata" }, @@ -13985,16 +15205,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_47" + "false_next" : "node_54" }, { - "name" : "node_47", - "id" : 18, + "name" : "node_54", + "id" : 20, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -14016,11 +15236,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_49" + "false_next" : "node_56" }, { - "name" : "node_49", - "id" : 19, + "name" : "node_56", + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -14038,7 +15258,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] } } }, @@ -14059,11 +15279,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_51" + "false_next" : "node_58" }, { - "name" : "node_51", - "id" : 20, + "name" : "node_58", + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -14076,7 +15296,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, "right" : { "type" : "hexstr", @@ -14084,12 +15304,12 @@ } } }, - "true_next" : "node_52", + "true_next" : "node_59", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_52", - "id" : 21, + "name" : "node_59", + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -14111,8 +15331,8 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_56", - "id" : 22, + "name" : "node_63", + "id" : 24, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -14131,11 +15351,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_60" + "false_next" : "node_67" }, { - "name" : "node_58", - "id" : 23, + "name" : "node_65", + "id" : 25, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -14157,11 +15377,11 @@ } }, "true_next" : "tbl_next310", - "false_next" : "node_64" + "false_next" : "node_71" }, { - "name" : "node_60", - "id" : 24, + "name" : "node_67", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -14189,7 +15409,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -14200,11 +15420,11 @@ } }, "true_next" : "tbl_next313", - "false_next" : "node_64" + "false_next" : "node_71" }, { - "name" : "node_62", - "id" : 25, + "name" : "node_69", + "id" : 27, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -14226,11 +15446,11 @@ } }, "true_next" : "tbl_next314", - "false_next" : "node_64" + "false_next" : "node_71" }, { - "name" : "node_64", - "id" : 26, + "name" : "node_71", + "id" : 28, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -14305,15 +15525,15 @@ } } }, - "false_next" : null, - "true_next" : "node_65" + "true_next" : "node_72", + "false_next" : "tbl_slicing126" }, { - "name" : "node_65", - "id" : 27, + "name" : "node_72", + "id" : 29, "source_info" : { "filename" : "fabric.p4", - "line" : 117, + "line" : 127, "column" : 36, "source_fragment" : "fabric_metadata" }, @@ -14324,16 +15544,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source17"] + "value" : ["scalars", "userMetadata._int_meta_source29"] } } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_67" + "false_next" : "node_74" }, { - "name" : "node_67", - "id" : 28, + "name" : "node_74", + "id" : 30, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -14351,12 +15571,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_act" + "true_next" : "tbl_act", + "false_next" : "tbl_slicing126" }, { - "name" : "node_70", - "id" : 29, + "name" : "node_77", + "id" : 31, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -14375,18 +15595,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit18"] + "value" : ["scalars", "userMetadata._int_meta_transit30"] } } } } }, "true_next" : "tbl_int_transit420", - "false_next" : "node_72" + "false_next" : "node_79" }, { - "name" : "node_72", - "id" : 30, + "name" : "node_79", + "id" : 32, "expression" : { "type" : "expression", "value" : { @@ -14405,12 +15625,12 @@ } } }, - "false_next" : null, - "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "false_next" : "tbl_slicing126" }, { - "name" : "node_76", - "id" : 31, + "name" : "node_83", + "id" : 33, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -14429,11 +15649,11 @@ } }, "true_next" : "tbl_int_transit428", - "false_next" : "node_78" + "false_next" : "node_85" }, { - "name" : "node_78", - "id" : 32, + "name" : "node_85", + "id" : 34, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -14452,11 +15672,11 @@ } }, "true_next" : "tbl_int_transit431", - "false_next" : "node_80" + "false_next" : "node_87" }, { - "name" : "node_80", - "id" : 33, + "name" : "node_87", + "id" : 35, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -14474,8 +15694,31 @@ } } }, + "true_next" : "tbl_int_transit434", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_91", + "id" : 36, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, "false_next" : null, - "true_next" : "tbl_int_transit434" + "true_next" : "tbl_slicing159" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt index 99558a2beb8..8d73a312ef1 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt @@ -414,6 +414,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 44818914 @@ -512,6 +598,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -756,6 +868,49 @@ actions { bitwidth: 16 } } +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: 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: 21257015 @@ -824,6 +979,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -978,6 +1147,28 @@ direct_counters { } 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: 322470063 @@ -1000,6 +1191,17 @@ direct_counters { } direct_table_id: 49262446 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json index 8c3794457f3..61322cb541e 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -8,6 +8,7 @@ ["tmp_2", 3, false], ["tmp_4", 8, false], ["last_ipv4_dscp_0", 6, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -15,54 +16,64 @@ ["tmp_7", 64, false], ["tmp_8", 32, false], ["tmp_9", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], + ["tmp_10", 32, false], + ["dscp_rewriter_tmp_dscp", 6, false], ["process_int_main_process_int_transit_hasReturned", 1, false], - ["userMetadata._ip_eth_type0", 16, false], - ["userMetadata._vlan_id1", 12, false], - ["userMetadata._vlan_pri2", 3, false], - ["userMetadata._vlan_cfi3", 1, false], - ["userMetadata._mpls_label4", 20, false], - ["userMetadata._mpls_ttl5", 8, false], - ["userMetadata._skip_forwarding6", 1, false], - ["userMetadata._skip_next7", 1, false], - ["userMetadata._fwd_type8", 3, false], - ["userMetadata._next_id9", 32, false], - ["userMetadata._is_multicast10", 1, false], - ["userMetadata._is_controller_packet_out11", 1, false], - ["userMetadata._ip_proto12", 8, false], - ["userMetadata._l4_sport13", 16, false], - ["userMetadata._l4_dport14", 16, false], - ["userMetadata._ipv4_src_addr15", 32, false], - ["userMetadata._ipv4_dst_addr16", 32, false], - ["userMetadata._inner_l4_sport17", 16, false], - ["userMetadata._inner_l4_dport18", 16, false], - ["userMetadata._spgw_ipv4_len19", 16, false], - ["userMetadata._spgw_teid20", 32, false], - ["userMetadata._spgw_tunnel_src_port21", 16, false], - ["userMetadata._spgw_tunnel_src_addr22", 32, false], - ["userMetadata._spgw_tunnel_dst_addr23", 32, false], - ["userMetadata._spgw_ctr_id24", 32, false], - ["userMetadata._spgw_far_id25", 32, false], - ["userMetadata._spgw_src_iface26", 8, false], - ["userMetadata._spgw_skip_spgw27", 1, false], - ["userMetadata._spgw_notify_spgwc28", 1, false], - ["userMetadata._spgw_needs_gtpu_encap29", 1, false], - ["userMetadata._spgw_needs_gtpu_decap30", 1, false], - ["userMetadata._spgw_skip_egress_pdr_ctr31", 1, false], - ["userMetadata._int_meta_source32", 1, false], - ["userMetadata._int_meta_transit33", 1, false], - ["userMetadata._int_meta_sink34", 1, false], - ["userMetadata._int_meta_switch_id35", 32, false], - ["userMetadata._int_meta_new_words36", 8, false], - ["userMetadata._int_meta_new_bytes37", 16, false], - ["userMetadata._int_meta_ig_tstamp38", 32, false], - ["userMetadata._int_meta_eg_tstamp39", 32, false], - ["userMetadata._port_type40", 2, false], - ["_padding_0", 4, false] + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._mpls_label12", 20, false], + ["userMetadata._mpls_ttl13", 8, false], + ["userMetadata._skip_forwarding14", 1, false], + ["userMetadata._skip_next15", 1, false], + ["userMetadata._fwd_type16", 3, false], + ["userMetadata._next_id17", 32, false], + ["userMetadata._is_multicast18", 1, false], + ["userMetadata._is_controller_packet_out19", 1, false], + ["userMetadata._ip_proto20", 8, false], + ["userMetadata._l4_sport21", 16, false], + ["userMetadata._l4_dport22", 16, false], + ["userMetadata._ipv4_src_addr23", 32, false], + ["userMetadata._ipv4_dst_addr24", 32, false], + ["userMetadata._slice_id25", 4, false], + ["userMetadata._packet_color26", 2, false], + ["userMetadata._tc27", 2, false], + ["userMetadata._dscp28", 6, false], + ["userMetadata._inner_l4_sport29", 16, false], + ["userMetadata._inner_l4_dport30", 16, false], + ["userMetadata._spgw_ipv4_len31", 16, false], + ["userMetadata._spgw_teid32", 32, false], + ["userMetadata._spgw_tunnel_src_port33", 16, false], + ["userMetadata._spgw_tunnel_src_addr34", 32, false], + ["userMetadata._spgw_tunnel_dst_addr35", 32, false], + ["userMetadata._spgw_ctr_id36", 32, false], + ["userMetadata._spgw_far_id37", 32, false], + ["userMetadata._spgw_src_iface38", 8, false], + ["userMetadata._spgw_qfi39", 6, false], + ["userMetadata._spgw_skip_spgw40", 1, false], + ["userMetadata._spgw_notify_spgwc41", 1, false], + ["userMetadata._spgw_needs_gtpu_encap42", 1, false], + ["userMetadata._spgw_needs_gtpu_decap43", 1, false], + ["userMetadata._spgw_skip_egress_pdr_ctr44", 1, false], + ["userMetadata._spgw_needs_qfi_push45", 1, false], + ["userMetadata._int_meta_source46", 1, false], + ["userMetadata._int_meta_transit47", 1, false], + ["userMetadata._int_meta_sink48", 1, false], + ["userMetadata._int_meta_switch_id49", 32, false], + ["userMetadata._int_meta_new_words50", 8, false], + ["userMetadata._int_meta_new_bytes51", 16, false], + ["userMetadata._int_meta_ig_tstamp52", 32, false], + ["userMetadata._int_meta_eg_tstamp53", 32, false], + ["userMetadata._port_type54", 2, false] ] }, { @@ -177,8 +188,30 @@ ] }, { - "name" : "tcp_t", + "name" : "gtpu_options_t", "id" : 10, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 11, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "tcp_t", + "id" : 12, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -195,7 +228,7 @@ }, { "name" : "icmp_t", - "id" : 11, + "id" : 13, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -207,7 +240,7 @@ }, { "name" : "packet_in_header_t", - "id" : 12, + "id" : 14, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -215,7 +248,7 @@ }, { "name" : "intl4_shim_t", - "id" : 13, + "id" : 15, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], @@ -225,7 +258,7 @@ }, { "name" : "int_header_t", - "id" : 14, + "id" : 16, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -244,14 +277,14 @@ }, { "name" : "int_switch_id_t", - "id" : 15, + "id" : 17, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 16, + "id" : 18, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -259,14 +292,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 17, + "id" : 19, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 18, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -274,21 +307,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 19, + "id" : 21, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 20, + "id" : 22, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 21, + "id" : 23, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -296,14 +329,14 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 22, + "id" : 24, "fields" : [ ["egress_port_tx_util", 32, false] ] }, { "name" : "intl4_tail_t", - "id" : 23, + "id" : 25, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], @@ -398,155 +431,183 @@ "pi_omit" : true }, { - "name" : "gtpu", + "name" : "outer_gtpu_options", "id" : 12, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "outer_gtpu_ext_psc", + "id" : 13, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu", + "id" : 14, "header_type" : "gtpu_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "gtpu_options", + "id" : 15, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 16, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "inner_ipv4", - "id" : 13, + "id" : 17, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 14, + "id" : 18, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 15, + "id" : 19, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 16, + "id" : 20, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 17, + "id" : 21, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 18, + "id" : 22, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 19, + "id" : 23, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 20, + "id" : 24, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 21, + "id" : 25, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 22, + "id" : 26, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_shim", - "id" : 23, + "id" : 27, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 24, + "id" : 28, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_switch_id", - "id" : 25, + "id" : 29, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 26, + "id" : 30, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 27, + "id" : 31, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 28, + "id" : 32, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 29, + "id" : 33, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 30, + "id" : 34, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 31, + "id" : 35, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 32, + "id" : 36, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, { "name" : "intl4_tail", - "id" : 33, + "id" : 37, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true @@ -562,7 +623,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -897,7 +958,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -1083,7 +1144,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "field", @@ -1096,7 +1157,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] }, { "type" : "field", @@ -1157,7 +1218,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -1170,7 +1231,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -1183,7 +1244,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -1196,7 +1257,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -1269,7 +1330,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1282,7 +1343,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1319,7 +1380,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1332,7 +1393,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1920,7 +1981,141 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "field", + "value" : ["gtpu_ext_psc", "qfi"] + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 16, + "parser_ops" : [ { "parameters" : [ { @@ -1979,7 +2174,7 @@ }, { "name" : "parse_inner_udp", - "id" : 14, + "id" : 17, "parser_ops" : [ { "parameters" : [ @@ -1994,7 +2189,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] }, { "type" : "field", @@ -2007,7 +2202,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] }, { "type" : "field", @@ -2029,7 +2224,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 15, + "id" : 18, "parser_ops" : [ { "parameters" : [ @@ -2044,7 +2239,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] }, { "type" : "field", @@ -2057,7 +2252,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] }, { "type" : "field", @@ -2079,7 +2274,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -2103,7 +2298,7 @@ }, { "name" : "parse_int", - "id" : 17, + "id" : 20, "parser_ops" : [], "transitions" : [ { @@ -2128,7 +2323,7 @@ }, { "name" : "parse_intl4_shim", - "id" : 18, + "id" : 21, "parser_ops" : [ { "parameters" : [ @@ -2172,7 +2367,7 @@ }, { "name" : "parse_int_data", - "id" : 19, + "id" : 22, "parser_ops" : [], "transitions" : [ { @@ -2186,7 +2381,7 @@ }, { "name" : "parse_intl4_tail", - "id" : 20, + "id" : 23, "parser_ops" : [ { "parameters" : [ @@ -2218,15 +2413,30 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "ipv4", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "intl4_tail"], + "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "outer_gtpu_options", "outer_gtpu_ext_psc", "ipv4", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "intl4_tail"], "primitives" : [] } ], - "meter_arrays" : [], + "meter_arrays" : [ + { + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 0, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" + } + ], "counter_arrays" : [ { "name" : "FabricIngress.process_set_source_sink.counter_set_source", @@ -2319,7 +2529,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -2361,8 +2571,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 12, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 13, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -2374,7 +2608,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -2386,10 +2620,10 @@ }, { "name" : "FabricIngress.spgw.pdr_counter", - "id" : 13, + "id" : 15, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 108, + "line" : 110, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2398,7 +2632,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", - "id" : 14, + "id" : 16, "is_direct" : true, "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "source_info" : { @@ -2410,7 +2644,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 15, + "id" : 17, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2422,10 +2656,10 @@ }, { "name" : "FabricEgress.spgw.pdr_counter", - "id" : 16, + "id" : 18, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 295, + "line" : 307, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2501,7 +2735,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -2697,7 +2931,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source32"] + "value" : ["scalars", "userMetadata._int_meta_source46"] }, { "type" : "expression", @@ -2733,7 +2967,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -2762,7 +2996,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2791,7 +3025,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type40"] + "value" : ["scalars", "userMetadata._port_type54"] }, { "type" : "hexstr", @@ -2800,7 +3034,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -2822,7 +3056,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type40"] + "value" : ["scalars", "userMetadata._port_type54"] }, { "type" : "runtime_data", @@ -2857,7 +3091,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2876,7 +3110,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type40"] + "value" : ["scalars", "userMetadata._port_type54"] }, { "type" : "runtime_data", @@ -2907,7 +3141,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, { "type" : "runtime_data", @@ -2938,7 +3172,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2969,7 +3203,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "hexstr", @@ -2988,7 +3222,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3019,7 +3253,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3056,7 +3290,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "runtime_data", @@ -3087,7 +3321,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -3118,7 +3352,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3127,8 +3361,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 32, + "line" : 32, + "column" : 26, "source_fragment" : "= next_id; ..." } } @@ -3153,7 +3387,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -3163,7 +3397,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -3182,8 +3416,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 34, + "line" : 39, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3213,7 +3447,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -3235,7 +3469,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -3245,7 +3479,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -3264,8 +3498,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 34, + "line" : 51, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -3323,7 +3557,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3481,7 +3715,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] }, { "type" : "expression", @@ -3508,8 +3742,186 @@ ] }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 32, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 33, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x0f" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 34, + "runtime_data" : [ + { + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 35, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3517,7 +3929,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3526,7 +3938,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3536,7 +3948,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3555,7 +3967,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3574,7 +3986,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3593,11 +4005,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3612,11 +4024,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3675,6 +4087,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -3685,7 +4127,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -3704,7 +4146,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -3719,7 +4161,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -3728,7 +4170,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", - "id" : 33, + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3736,7 +4178,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3745,7 +4187,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3755,7 +4197,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3774,7 +4216,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3793,7 +4235,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3812,11 +4254,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3831,11 +4273,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3894,6 +4336,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -3908,7 +4380,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -3923,7 +4395,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -3932,7 +4404,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", - "id" : 34, + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -3940,7 +4412,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3949,7 +4421,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3959,7 +4431,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3978,7 +4450,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3997,7 +4469,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4016,11 +4488,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4035,11 +4507,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4103,33 +4575,29 @@ "parameters" : [ { "type" : "header", - "value" : "udp" + "value" : "gtpu_options" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 48, "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "source_fragment" : "hdr.gtpu_options.setInvalid()" } }, { - "op" : "assign_header", + "op" : "remove_header", "parameters" : [ { "type" : "header", - "value" : "icmp" - }, - { - "type" : "header", - "value" : "inner_icmp" + "value" : "gtpu_ext_psc" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 49, "column" : 8, - "source_fragment" : "hdr.icmp = hdr.inner_icmp" + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" } }, { @@ -4137,13 +4605,47 @@ "parameters" : [ { "type" : "header", - "value" : "inner_icmp" + "value" : "udp" } ], "source_info" : { "filename" : "include/control/spgw.p4", "line" : 67, "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "icmp" + }, + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.icmp = hdr.inner_icmp" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "inner_icmp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 69, + "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } } @@ -4151,7 +4653,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", - "id" : 35, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -4159,7 +4661,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4168,7 +4670,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4178,7 +4680,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4197,7 +4699,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4216,7 +4718,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4235,11 +4737,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4254,11 +4756,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4317,6 +4819,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4327,7 +4859,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 74, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4336,7 +4868,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", - "id" : 36, + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -4344,7 +4876,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4353,7 +4885,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4363,7 +4895,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4382,7 +4914,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4401,7 +4933,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4420,11 +4952,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4439,11 +4971,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4502,6 +5034,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4512,7 +5074,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4531,7 +5093,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -4546,7 +5108,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -4555,7 +5117,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", - "id" : 37, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -4563,7 +5125,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4572,7 +5134,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4582,7 +5144,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4601,7 +5163,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4620,7 +5182,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4639,11 +5201,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4658,11 +5220,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4721,6 +5283,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -4735,7 +5327,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -4750,7 +5342,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -4759,7 +5351,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", - "id" : 38, + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -4767,7 +5359,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4776,7 +5368,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4786,7 +5378,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4805,7 +5397,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4824,7 +5416,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4843,11 +5435,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4862,11 +5454,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4925,6 +5517,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4935,7 +5557,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 67, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4954,7 +5576,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 68, "column" : 8, "source_fragment" : "hdr.icmp = hdr.inner_icmp" } @@ -4969,7 +5591,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 67, + "line" : 69, "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } @@ -4978,7 +5600,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", - "id" : 39, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -4986,7 +5608,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4995,7 +5617,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5005,7 +5627,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -5024,7 +5646,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -5043,7 +5665,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -5062,11 +5684,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -5081,11 +5703,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -5144,6 +5766,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -5154,7 +5806,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 74, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -5163,11 +5815,15 @@ }, { "name" : "FabricIngress.spgw.load_iface", - "id" : 40, + "id" : 44, "runtime_data" : [ { "name" : "src_iface", "bitwidth" : 8 + }, + { + "name" : "slice_id", + "bitwidth" : 4 } ], "primitives" : [ @@ -5176,7 +5832,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, { "type" : "runtime_data", @@ -5185,7 +5841,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 120, + "line" : 122, "column" : 33, "source_fragment" : "= src_iface; ..." } @@ -5195,7 +5851,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] }, { "type" : "expression", @@ -5214,16 +5870,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 121, + "line" : 123, "column" : 33, "source_fragment" : "= false; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 124, + "column" : 27, + "source_fragment" : "= slice_id; ..." + } } ] }, { "name" : "FabricIngress.spgw.iface_miss", - "id" : 41, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -5231,7 +5906,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, { "type" : "hexstr", @@ -5240,7 +5915,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 110, + "line" : 127, "column" : 44, "source_fragment" : "8w0; ..." } @@ -5250,7 +5925,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] }, { "type" : "expression", @@ -5269,7 +5944,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 125, + "line" : 128, "column" : 33, "source_fragment" : "= true; ..." } @@ -5278,7 +5953,7 @@ }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 42, + "id" : 46, "runtime_data" : [ { "name" : "ctr_id", @@ -5291,6 +5966,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5299,7 +5978,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5308,7 +5987,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5318,7 +5997,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5327,7 +6006,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5337,7 +6016,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5366,16 +6045,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 43, + "id" : 47, "runtime_data" : [ { "name" : "ctr_id", @@ -5388,6 +6086,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5396,7 +6098,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5405,7 +6107,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5415,7 +6117,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5424,7 +6126,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5434,7 +6136,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5463,16 +6165,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 44, + "id" : 48, "runtime_data" : [ { "name" : "ctr_id", @@ -5487,8 +6208,16 @@ "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5497,7 +6226,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5506,7 +6235,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5516,7 +6245,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5525,7 +6254,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5535,7 +6264,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5564,16 +6293,93 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 45, + "id" : 49, "runtime_data" : [ { "name" : "ctr_id", @@ -5588,8 +6394,16 @@ "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5598,7 +6412,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5607,7 +6421,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5617,7 +6431,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5626,7 +6440,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5636,7 +6450,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5665,16 +6479,93 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_normal_far", - "id" : 46, + "id" : 50, "runtime_data" : [ { "name" : "drop", @@ -5691,7 +6582,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -5720,7 +6611,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 207, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -5730,7 +6621,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -5759,7 +6650,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 196, + "line" : 208, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -5769,7 +6660,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -5798,7 +6689,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 197, + "line" : 209, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -5807,7 +6698,7 @@ }, { "name" : "FabricIngress.spgw.load_tunnel_far", - "id" : 47, + "id" : 51, "runtime_data" : [ { "name" : "drop", @@ -5840,7 +6731,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -5869,7 +6760,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -5879,7 +6770,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -5908,7 +6799,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -5918,7 +6809,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -5947,7 +6838,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -5957,7 +6848,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] }, { "type" : "expression", @@ -5976,7 +6867,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -5986,7 +6877,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "value" : ["scalars", "userMetadata._spgw_teid32"] }, { "type" : "runtime_data", @@ -5995,7 +6886,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -6005,7 +6896,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] }, { "type" : "runtime_data", @@ -6014,7 +6905,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -6024,7 +6915,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] }, { "type" : "runtime_data", @@ -6033,7 +6924,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -6043,7 +6934,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] }, { "type" : "runtime_data", @@ -6052,7 +6943,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6062,7 +6953,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "runtime_data", @@ -6071,7 +6962,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -6081,7 +6972,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "runtime_data", @@ -6090,7 +6981,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6100,7 +6991,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "runtime_data", @@ -6109,7 +7000,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -6119,7 +7010,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "hexstr", @@ -6128,7 +7019,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -6137,7 +7028,7 @@ }, { "name" : "FabricIngress.spgw.load_dbuf_far", - "id" : 48, + "id" : 52, "runtime_data" : [ { "name" : "drop", @@ -6170,7 +7061,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -6199,7 +7090,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -6209,7 +7100,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -6238,7 +7129,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -6248,7 +7139,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -6277,7 +7168,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -6287,7 +7178,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] }, { "type" : "expression", @@ -6306,7 +7197,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -6316,7 +7207,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "value" : ["scalars", "userMetadata._spgw_teid32"] }, { "type" : "runtime_data", @@ -6325,7 +7216,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -6335,7 +7226,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] }, { "type" : "runtime_data", @@ -6344,7 +7235,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -6354,7 +7245,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] }, { "type" : "runtime_data", @@ -6363,7 +7254,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -6373,7 +7264,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] }, { "type" : "runtime_data", @@ -6382,7 +7273,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6392,7 +7283,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "runtime_data", @@ -6401,7 +7292,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -6411,7 +7302,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "runtime_data", @@ -6420,7 +7311,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6430,7 +7321,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "runtime_data", @@ -6439,7 +7330,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -6449,7 +7340,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "hexstr", @@ -6458,7 +7349,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -6468,7 +7359,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr31"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr44"] }, { "type" : "expression", @@ -6487,7 +7378,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 230, + "line" : 242, "column" : 43, "source_fragment" : "= true; ..." } @@ -6495,8 +7386,8 @@ ] }, { - "name" : "packetio25", - "id" : 49, + "name" : "lookup_md_init37", + "id" : 53, "runtime_data" : [], "primitives" : [ { @@ -6504,131 +7395,134 @@ "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["packet_out", "egress_port"] + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_out" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] + }, + { + "type" : "field", + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } - }, + } + ] + }, + { + "name" : "lookup_md_init40", + "id" : 54, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 53, - "source_fragment" : "= true; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } }, { - "op" : "exit", - "parameters" : [], + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] + }, + { + "type" : "field", + "value" : ["inner_udp", "dport"] + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "spgw265", - "id" : 50, + "name" : "lookup_md_init43", + "id" : 55, "runtime_data" : [], "primitives" : [ { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.spgw.pdr_counter" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } - } - ] - }, - { - "name" : "spgw282", - "id" : 51, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "= hdr.ipv4.total_len; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "filtering113", - "id" : 52, + "name" : "lookup_md_init32", + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -6636,18 +7530,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 36, - "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -6655,18 +7559,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.pri; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -6674,51 +7578,44 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 53, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 37, - "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl102", - "id" : 54, + "name" : "lookup_md_init52", + "id" : 57, "runtime_data" : [], "primitives" : [ { @@ -6726,18 +7623,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -6745,25 +7642,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." } } ] }, { - "name" : "acl105", - "id" : 55, + "name" : "lookup_md_init55", + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -6771,18 +7668,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_udp", "sport"] + "value" : ["udp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -6790,25 +7687,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_udp", "dport"] + "value" : ["udp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl98", - "id" : 56, + "name" : "lookup_md_init58", + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -6816,37 +7713,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] - }, - { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "value" : ["icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." } }, { @@ -6854,25 +7732,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "value" : ["icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." } } ] }, { - "name" : "acl113", - "id" : 57, + "name" : "lookup_md_init47", + "id" : 60, "runtime_data" : [], "primitives" : [ { @@ -6880,18 +7758,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["tcp", "sport"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -6899,44 +7787,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["tcp", "dport"] + "value" : ["ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "acl116", - "id" : 58, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["udp", "sport"] + "value" : ["ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -6944,25 +7825,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", - "value" : ["udp", "dport"] + "value" : ["ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "acl109", - "id" : 59, + "name" : "lookup_md_init23", + "id" : 61, "runtime_data" : [], "primitives" : [ { @@ -6970,18 +7851,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["ipv4", "src_addr"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." } }, { @@ -6989,18 +7880,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { - "type" : "field", - "value" : ["ipv4", "dst_addr"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -7008,44 +7899,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } - } - ] - }, - { - "name" : "acl27", - "id" : 60, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -7053,18 +7937,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 27, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -7072,18 +7956,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 28, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -7091,18 +7975,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 29, + "column" : 25, + "source_fragment" : "= 0; ..." } }, { @@ -7110,25 +7994,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 30, + "column" : 25, + "source_fragment" : "= 0; ..." } } ] }, { - "name" : "port_counter31", - "id" : 61, + "name" : "packetio25", + "id" : 62, "runtime_data" : [], "primitives" : [ { @@ -7136,171 +8020,98 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_8"] + "value" : ["standard_metadata", "egress_spec"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_spec"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "field", + "value" : ["packet_out", "egress_port"] } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 38, - "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" } }, { - "op" : "count", + "op" : "remove_header", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.egress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_8"] + "type" : "header", + "value" : "packet_out" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, + "filename" : "include/control/packetio.p4", + "line" : 26, "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + "source_fragment" : "hdr.packet_out.setInvalid()" } - } - ] - }, - { - "name" : "port_counter34", - "id" : 62, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_9"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xffffffff" + "type" : "bool", + "value" : true } } } } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 39, - "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." } }, { - "op" : "count", - "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.ingress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_9"] - } - ], + "op" : "exit", + "parameters" : [], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, + "filename" : "include/control/packetio.p4", + "line" : 29, "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + "source_fragment" : "exit" } } ] }, { - "name" : "nop", + "name" : "filtering113", "id" : 63, "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "nop", - "id" : 64, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 65, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 66, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", - "id" : 67, - "runtime_data" : [ - { - "name" : "max_hop", - "bitwidth" : 8 - }, - { - "name" : "ins_cnt", - "bitwidth" : 5 - }, - { - "name" : "ins_mask0003", - "bitwidth" : 4 - }, - { - "name" : "ins_mask0407", - "bitwidth" : 4 - } - ], "primitives" : [ { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "intl4_shim" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 32, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.setValid()" + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." } }, { @@ -7308,18 +8119,18 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "int_type"] + "value" : ["scalars", "userMetadata._vlan_pri10"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["vlan_tag", "pri"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.int_type = 1" + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." } }, { @@ -7327,185 +8138,334 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len_words"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] }, { - "type" : "hexstr", - "value" : "0x04" + "type" : "field", + "value" : ["vlan_tag", "cfi"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 169, - "column" : 36, - "source_fragment" : "4; ..." + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." } - }, + } + ] + }, + { + "name" : "filtering129", + "id" : 64, + "runtime_data" : [], + "primitives" : [ { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_header" + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] + }, + { + "type" : "hexstr", + "value" : "0x41" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 37, - "column" : 8, - "source_fragment" : "hdr.int_header.setValid()" + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." } - }, + } + ] + }, + { + "name" : "spgw277", + "id" : 65, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "ver"] + "type" : "counter_array", + "value" : "FabricIngress.spgw.pdr_counter" }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 38, - "column" : 8, - "source_fragment" : "hdr.int_header.ver = 0" + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" } - }, + } + ] + }, + { + "name" : "spgw294", + "id" : 66, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "rep"] + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["ipv4", "total_len"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 39, - "column" : 8, - "source_fragment" : "hdr.int_header.rep = 0" + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "= hdr.ipv4.total_len; ..." } - }, + } + ] + }, + { + "name" : "port_counter31", + "id" : 67, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "c"] + "value" : ["scalars", "tmp_8"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_header.c = 0" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "e"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.egress_port_counter" }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "tmp_8"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_header.e = 0" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" } - }, + } + ] + }, + { + "name" : "port_counter34", + "id" : 68, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "rsvd1"] + "value" : ["scalars", "tmp_9"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 42, - "column" : 8, - "source_fragment" : "hdr.int_header.rsvd1 = 0" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "ins_cnt"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" }, { - "type" : "runtime_data", - "value" : 1 + "type" : "field", + "value" : ["scalars", "tmp_9"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 43, - "column" : 8, - "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" } - }, + } + ] + }, + { + "name" : "slicing114", + "id" : 69, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "max_hop_cnt"] + "value" : ["scalars", "tmp_10"] }, { - "type" : "runtime_data", - "value" : 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" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" } }, { - "op" : "assign", + "op" : "execute_meter", "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["scalars", "tmp_10"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color26"] } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 45, + "filename" : "include/control/slicing.p4", + "line" : 114, "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = 0" + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" } }, { @@ -7513,37 +8473,150 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_0003"] + "value" : ["scalars", "userMetadata._dscp28"] }, { - "type" : "runtime_data", - "value" : 2 - } + "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._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + } + } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 46, - "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." } + } + ] + }, + { + "name" : "nop", + "id" : 70, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 71, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 72, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 73, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 74, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", + "id" : 75, + "runtime_data" : [ + { + "name" : "max_hop", + "bitwidth" : 8 }, { - "op" : "assign", + "name" : "ins_cnt", + "bitwidth" : 5 + }, + { + "name" : "ins_mask0003", + "bitwidth" : 4 + }, + { + "name" : "ins_mask0407", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["int_header", "instruction_mask_0407"] - }, - { - "type" : "runtime_data", - "value" : 3 + "type" : "header", + "value" : "intl4_shim" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 47, + "line" : 32, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." + "source_fragment" : "hdr.intl4_shim.setValid()" } }, { @@ -7551,18 +8624,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_0811"] + "value" : ["intl4_shim", "int_type"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x01" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 48, + "line" : 34, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" + "source_fragment" : "hdr.intl4_shim.int_type = 1" } }, { @@ -7570,18 +8643,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_header", "instruction_mask_1215"] + "value" : ["intl4_shim", "len_words"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x04" } ], "source_info" : { - "filename" : "include/int/int_source.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" + "filename" : "include/control/../define.p4", + "line" : 186, + "column" : 36, + "source_fragment" : "4; ..." } }, { @@ -7589,14 +8662,14 @@ "parameters" : [ { "type" : "header", - "value" : "intl4_tail" + "value" : "int_header" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 51, + "line" : 37, "column" : 8, - "source_fragment" : "hdr.intl4_tail.setValid()" + "source_fragment" : "hdr.int_header.setValid()" } }, { @@ -7604,18 +8677,18 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_tail", "next_proto"] + "value" : ["int_header", "ver"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 52, + "line" : 38, "column" : 8, - "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" + "source_fragment" : "hdr.int_header.ver = 0" } }, { @@ -7623,18 +8696,18 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_tail", "dest_port"] + "value" : ["int_header", "rep"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 53, + "line" : 39, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..." + "source_fragment" : "hdr.int_header.rep = 0" } }, { @@ -7642,18 +8715,18 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_tail", "dscp"] + "value" : ["int_header", "c"] }, { - "type" : "field", - "value" : ["ipv4", "dscp"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 54, + "line" : 40, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" + "source_fragment" : "hdr.int_header.c = 0" } }, { @@ -7661,41 +8734,18 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["int_header", "e"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 56, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" + "source_fragment" : "hdr.int_header.e = 0" } }, { @@ -7703,41 +8753,18 @@ "parameters" : [ { "type" : "field", - "value" : ["udp", "len"] + "value" : ["int_header", "rsvd1"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_source.p4", - "line" : 57, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" + "source_fragment" : "hdr.int_header.rsvd1 = 0" } }, { @@ -7745,59 +8772,56 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "dscp"] + "value" : ["int_header", "ins_cnt"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 165, - "column" : 24, - "source_fragment" : "0x1; ..." + "filename" : "include/int/int_source.p4", + "line" : 43, + "column" : 8, + "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", - "id" : 68, - "runtime_data" : [ + }, { - "name" : "switch_id", - "bitwidth" : 32 - } - ], - "primitives" : [ + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "max_hop_cnt"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." + } + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit33"] + "value" : ["int_header", "total_hop_cnt"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 26, - "column" : 31, - "source_fragment" : "= true; ..." + "filename" : "include/int/int_source.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = 0" } }, { @@ -7805,46 +8829,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["int_header", "instruction_mask_0003"] }, { "type" : "runtime_data", - "value" : 0 + "value" : 2 } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 31, - "column" : 33, - "source_fragment" : "= switch_id; ..." + "filename" : "include/int/int_source.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", - "id" : 69, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", - "id" : 70, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_q_occupancy" + "type" : "field", + "value" : ["int_header", "instruction_mask_0407"] + }, + { + "type" : "runtime_data", + "value" : 3 } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 60, + "filename" : "include/int/int_source.p4", + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } }, { @@ -7852,7 +8867,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] + "value" : ["int_header", "instruction_mask_0811"] }, { "type" : "hexstr", @@ -7860,10 +8875,10 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 62, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } }, { @@ -7871,31 +8886,90 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] + "value" : ["int_header", "instruction_mask_1215"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 63, + "filename" : "include/int/int_source.p4", + "line" : 49, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "intl4_tail" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "next_proto"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dest_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._l4_dport22"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -7903,7 +8977,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["ipv4", "total_len"] }, { "type" : "expression", @@ -7917,27 +8991,27 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["ipv4", "total_len"] }, "right" : { "type" : "hexstr", - "value" : "0x01" + "value" : "0x0010" } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "filename" : "include/int/int_source.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -7945,7 +9019,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["udp", "len"] }, { "type" : "expression", @@ -7959,11 +9033,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["udp", "len"] }, "right" : { "type" : "hexstr", - "value" : "0x0004" + "value" : "0x0010" } } }, @@ -7976,32 +9050,10 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", - "id" : 71, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 57, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -8009,50 +9061,49 @@ "parameters" : [ { "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] + "value" : ["ipv4", "dscp"] }, { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] + "type" : "hexstr", + "value" : "0x01" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + "filename" : "include/control/../define.p4", + "line" : 182, + "column" : 24, + "source_fragment" : "0x1; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 76, + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_transit47"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xff" + "type" : "bool", + "value" : true } } } @@ -8060,9 +9111,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "line" : 26, + "column" : 31, + "source_fragment" : "= true; ..." } }, { @@ -8070,48 +9121,31 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 31, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= switch_id; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", - "id" : 72, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 77, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 78, "runtime_data" : [], "primitives" : [ { @@ -8180,46 +9214,12 @@ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -8233,11 +9233,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -8251,9 +9251,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -8261,7 +9261,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -8275,11 +9275,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -8293,16 +9293,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", - "id" : 73, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 79, "runtime_data" : [], "primitives" : [ { @@ -8310,14 +9310,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_port_ids" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -8325,63 +9325,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_hop_latency", "hop_latency"] }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -8389,7 +9344,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -8403,7 +9358,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -8431,7 +9386,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -8445,7 +9400,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -8471,8 +9426,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", - "id" : 74, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 80, "runtime_data" : [], "primitives" : [ { @@ -8546,14 +9501,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_port_ids" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -8561,31 +9516,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -8593,7 +9535,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -8602,12 +9544,22 @@ "value" : { "op" : "&", "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xff" } } } @@ -8615,9 +9567,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "line" : 103, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -8625,7 +9577,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -8639,53 +9591,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x02" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 103, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0008" } } }, @@ -8707,44 +9617,10 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", - "id" : 75, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 81, "runtime_data" : [], "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -8829,7 +9705,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -8843,11 +9719,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -8861,9 +9737,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -8871,7 +9747,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -8885,11 +9761,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -8903,16 +9779,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", - "id" : 76, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 82, "runtime_data" : [], "primitives" : [ { @@ -8981,40 +9857,6 @@ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -9099,7 +9941,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -9113,11 +9955,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -9131,9 +9973,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -9141,7 +9983,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -9155,11 +9997,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -9173,16 +10015,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", - "id" : 77, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 83, "runtime_data" : [], "primitives" : [ { @@ -9190,14 +10032,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -9205,18 +10047,97 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -9224,7 +10145,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -9238,11 +10159,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x01" + "value" : "0x02" } } }, @@ -9256,9 +10177,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -9266,7 +10187,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -9280,11 +10201,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0004" + "value" : "0x0008" } } }, @@ -9298,16 +10219,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", - "id" : 78, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 84, "runtime_data" : [], "primitives" : [ { @@ -9381,14 +10302,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_switch_id" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 41, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -9396,18 +10317,97 @@ "parameters" : [ { "type" : "field", - "value" : ["int_switch_id", "switch_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 42, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } }, { @@ -9415,7 +10415,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -9429,11 +10429,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x03" } } }, @@ -9447,9 +10447,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -9457,7 +10457,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -9471,11 +10471,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x000c" } } }, @@ -9489,52 +10489,18 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 110, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", - "id" : 79, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 85, "runtime_data" : [], "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -9559,7 +10525,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -9574,7 +10540,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -9588,11 +10554,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -9606,9 +10572,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -9616,7 +10582,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -9630,11 +10596,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -9648,16 +10614,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", - "id" : 80, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 86, "runtime_data" : [], "primitives" : [ { @@ -9726,40 +10692,6 @@ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -9784,7 +10716,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -9799,7 +10731,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -9813,11 +10745,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -9831,9 +10763,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -9841,7 +10773,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -9855,11 +10787,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -9873,16 +10805,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", - "id" : 81, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 87, "runtime_data" : [], "primitives" : [ { @@ -9890,14 +10822,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_port_ids" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -9905,71 +10837,26 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 48, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 49, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" + "type" : "header", + "value" : "int_switch_id" } ], "source_info" : { @@ -9988,7 +10875,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -10003,7 +10890,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -10017,7 +10904,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -10045,7 +10932,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -10059,7 +10946,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -10085,8 +10972,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", - "id" : 82, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 88, "runtime_data" : [], "primitives" : [ { @@ -10160,14 +11047,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_port_ids" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 47, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -10175,63 +11062,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] + "value" : ["int_hop_latency", "hop_latency"] }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 48, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 49, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -10258,7 +11100,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -10273,7 +11115,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -10287,7 +11129,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -10315,7 +11157,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -10329,7 +11171,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -10355,44 +11197,10 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", - "id" : 83, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 89, "runtime_data" : [], "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -10496,7 +11304,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -10511,7 +11319,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -10525,11 +11333,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -10543,9 +11351,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -10553,7 +11361,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -10567,11 +11375,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -10585,16 +11393,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", - "id" : 84, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 90, "runtime_data" : [], "primitives" : [ { @@ -10663,40 +11471,6 @@ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 54, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 55, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -10800,7 +11574,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_switch_id35"] + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { @@ -10815,7 +11589,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -10829,11 +11603,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x04" + "value" : "0x03" } } }, @@ -10847,9 +11621,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 115, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -10857,7 +11631,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -10871,11 +11645,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0010" + "value" : "0x000c" } } }, @@ -10889,22 +11663,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 116, + "line" : 110, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", - "id" : 85, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", - "id" : 86, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -10912,14 +11680,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tx_util" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 88, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -10927,18 +11695,33 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "hexstr", - "value" : "0x00000000" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 90, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -10946,7 +11729,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -10955,22 +11738,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } @@ -10978,9 +11751,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -10988,7 +11761,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -10997,18 +11770,8 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0004" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", @@ -11020,31 +11783,24 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", - "id" : 87, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 80, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -11052,37 +11808,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_id"] + "value" : ["int_switch_id", "switch_id"] }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 83, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -11090,7 +11827,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -11104,11 +11841,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x01" + "value" : "0x03" } } }, @@ -11122,9 +11859,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -11132,7 +11869,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -11146,11 +11883,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0004" + "value" : "0x000c" } } }, @@ -11164,16 +11901,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 110, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", - "id" : 88, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -11181,14 +11918,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_egress_tx_util" + "value" : "int_q_occupancy" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 88, + "line" : 60, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -11196,18 +11933,50 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] + "value" : ["int_q_occupancy", "q_id"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x00" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 90, + "line" : 62, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, { @@ -11215,14 +11984,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_hop_latency" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 80, + "line" : 54, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { @@ -11230,37 +11999,33 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_congestion", "q_id"] + "value" : ["int_hop_latency", "hop_latency"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 82, + "line" : 55, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" + "type" : "header", + "value" : "int_port_ids" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 83, + "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { @@ -11268,7 +12033,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["int_port_ids", "ingress_port_id"] }, { "type" : "expression", @@ -11277,22 +12042,12 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x02" - } - } + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } @@ -11300,9 +12055,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" } }, { @@ -11310,7 +12065,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["int_port_ids", "egress_port_id"] }, { "type" : "expression", @@ -11319,18 +12074,8 @@ "value" : { "op" : "&", "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0008" - } - } + "type" : "field", + "value" : ["standard_metadata", "egress_port"] }, "right" : { "type" : "hexstr", @@ -11342,31 +12087,24 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", - "id" : 89, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_egress_tstamp" + "value" : "int_switch_id" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 74, + "line" : 41, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "hdr.int_switch_id.setValid()" } }, { @@ -11374,41 +12112,18 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["int_switch_id", "switch_id"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_switch_id49"] } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 75, + "line" : 42, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..." } }, { @@ -11416,7 +12131,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -11430,11 +12145,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x01" + "value" : "0x04" } } }, @@ -11448,9 +12163,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 97, + "line" : 115, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." } }, { @@ -11458,7 +12173,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -11472,11 +12187,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0004" + "value" : "0x0010" } } }, @@ -11490,16 +12205,22 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 98, + "line" : 116, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", - "id" : 90, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 93, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 94, "runtime_data" : [], "primitives" : [ { @@ -11537,68 +12258,11 @@ } }, { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, - { - "op" : "assign", + "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -11612,11 +12276,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -11630,9 +12294,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -11640,7 +12304,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -11654,11 +12318,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -11672,16 +12336,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", - "id" : 91, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 95, "runtime_data" : [], "primitives" : [ { @@ -11737,69 +12401,12 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -11813,11 +12420,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -11831,9 +12438,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -11841,7 +12448,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -11855,11 +12462,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -11873,16 +12480,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", - "id" : 92, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 96, "runtime_data" : [], "primitives" : [ { @@ -11972,69 +12579,12 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12048,11 +12598,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -12066,9 +12616,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -12076,7 +12626,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12090,11 +12640,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -12108,16 +12658,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", - "id" : 93, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 97, "runtime_data" : [], "primitives" : [ { @@ -12125,14 +12675,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -12140,18 +12690,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -12159,7 +12732,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12173,7 +12746,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -12201,7 +12774,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12215,7 +12788,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -12241,9 +12814,9 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", - "id" : 94, - "runtime_data" : [], + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 98, + "runtime_data" : [], "primitives" : [ { "op" : "add_header", @@ -12284,14 +12857,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -12299,18 +12872,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -12318,7 +12914,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12332,7 +12928,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -12360,7 +12956,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12374,7 +12970,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -12400,8 +12996,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", - "id" : 95, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 99, "runtime_data" : [], "primitives" : [ { @@ -12462,14 +13058,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 68, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -12477,18 +13073,41 @@ "parameters" : [ { "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 75, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -12496,7 +13115,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12510,7 +13129,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", @@ -12538,7 +13157,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12552,7 +13171,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", @@ -12578,8 +13197,8 @@ ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", - "id" : 96, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 100, "runtime_data" : [], "primitives" : [ { @@ -12674,33 +13293,14 @@ "parameters" : [ { "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 68, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "value" : "int_egress_tstamp" } ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 69, + "line" : 74, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -12708,7 +13308,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { "type" : "expression", @@ -12722,17 +13322,17 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["standard_metadata", "enq_timestamp"] }, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffffffff" } } } @@ -12740,9 +13340,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, - "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { @@ -12750,7 +13350,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12764,17 +13364,17 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x03" } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xff" } } } @@ -12782,31 +13382,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 109, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", - "id" : 97, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -12814,7 +13392,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12828,17 +13406,17 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] + "type" : "hexstr", + "value" : "0x000c" } } }, "right" : { "type" : "hexstr", - "value" : "0xffffffff" + "value" : "0xffff" } } } @@ -12846,11 +13424,18 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 101, + "runtime_data" : [], + "primitives" : [ { "op" : "add_header", "parameters" : [ @@ -12890,7 +13475,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -12904,11 +13489,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x01" } } }, @@ -12922,9 +13507,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 103, + "line" : 97, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 1; ..." } }, { @@ -12932,7 +13517,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -12946,11 +13531,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0008" + "value" : "0x0004" } } }, @@ -12964,16 +13549,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 104, + "line" : 98, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", - "id" : 98, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 102, "runtime_data" : [], "primitives" : [ { @@ -13010,63 +13595,6 @@ "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -13106,7 +13634,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -13120,11 +13648,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -13138,9 +13666,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -13148,7 +13676,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -13162,11 +13690,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -13180,16 +13708,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", - "id" : 99, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 103, "runtime_data" : [], "primitives" : [ { @@ -13245,63 +13773,6 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" - } - }, { "op" : "add_header", "parameters" : [ @@ -13341,7 +13812,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -13355,11 +13826,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x03" + "value" : "0x02" } } }, @@ -13373,9 +13844,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 109, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -13383,7 +13854,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -13397,11 +13868,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x000c" + "value" : "0x0008" } } }, @@ -13415,16 +13886,16 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 110, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", - "id" : 100, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 104, "runtime_data" : [], "primitives" : [ { @@ -13514,6 +13985,131 @@ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 105, + "runtime_data" : [], + "primitives" : [ { "op" : "add_header", "parameters" : [ @@ -13610,7 +14206,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { "type" : "expression", @@ -13624,11 +14220,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, "right" : { "type" : "hexstr", - "value" : "0x04" + "value" : "0x02" } } }, @@ -13642,9 +14238,9 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 115, + "line" : 103, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." + "source_fragment" : "= fmeta.int_meta.new_words + 2; ..." } }, { @@ -13652,7 +14248,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { "type" : "expression", @@ -13666,11 +14262,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, "right" : { "type" : "hexstr", - "value" : "0x0010" + "value" : "0x0008" } } }, @@ -13684,31 +14280,31 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 116, + "line" : 104, "column" : 33, - "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." + "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..." } } ] }, { - "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 101, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 106, "runtime_data" : [], "primitives" : [ { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "mpls" + "value" : "int_egress_tx_util" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 204, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.mpls.setInvalid()" + "source_fragment" : "hdr.int_egress_tx_util.setValid()" } }, { @@ -13716,40 +14312,33 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["int_egress_tx_util", "egress_port_tx_util"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 206, + "filename" : "include/int/int_transit.p4", + "line" : 90, "column" : 8, - "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.set_mpls", - "id" : 102, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "mpls" + "value" : "int_egress_tstamp" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 211, + "filename" : "include/int/int_transit.p4", + "line" : 74, "column" : 8, - "source_fragment" : "hdr.mpls.setValid()" + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -13757,37 +14346,56 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "label"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 212, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["mpls", "tc"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "type" : "header", + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 213, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.mpls.tc = 3w0" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -13795,18 +14403,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "bos"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 214, + "filename" : "include/int/int_transit.p4", + "line" : 69, "column" : 8, - "source_fragment" : "hdr.mpls.bos = 1w1" + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" } }, { @@ -13814,18 +14422,41 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 215, - "column" : 8, - "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." } }, { @@ -13833,25 +14464,48 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { - "type" : "hexstr", - "value" : "0x8847" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 130, - "column" : 31, - "source_fragment" : "0x8847; ..." + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 103, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 107, "runtime_data" : [], "primitives" : [ { @@ -13859,14 +14513,14 @@ "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "int_q_congestion" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "source_fragment" : "hdr.int_q_congestion.setValid()" } }, { @@ -13874,18 +14528,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["int_q_congestion", "q_id"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, + "filename" : "include/int/int_transit.p4", + "line" : 82, "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" } }, { @@ -13893,37 +14547,33 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["int_q_congestion", "q_congestion"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "type" : "hexstr", + "value" : "0x000000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, + "filename" : "include/int/int_transit.p4", + "line" : 83, "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["vlan_tag", "eth_type"] - }, - { - "type" : "hexstr", - "value" : "0x8100" + "type" : "header", + "value" : "int_egress_tstamp" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/int/int_transit.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -13931,69 +14581,166 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 104, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 256, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.vlan_tag.setInvalid()" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.drop", - "id" : 105, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" - } - ], + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 261, + "filename" : "include/int/int_transit.p4", + "line" : 69, "column" : 8, - "source_fragment" : "mark_to_drop(standard_metadata)" + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 109, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 3; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 110, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..." } } ] }, { - "name" : "FabricEgress.spgw.gtpu_encap", - "id" : 106, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 108, "runtime_data" : [], "primitives" : [ { @@ -14001,14 +14748,14 @@ "parameters" : [ { "type" : "header", - "value" : "gtpu_ipv4" + "value" : "int_egress_tx_util" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 300, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.setValid()" + "source_fragment" : "hdr.int_egress_tx_util.setValid()" } }, { @@ -14016,37 +14763,33 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "version"] + "value" : ["int_egress_tx_util", "egress_port_tx_util"] }, { "type" : "hexstr", - "value" : "0x04" + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 301, + "filename" : "include/int/int_transit.p4", + "line" : 90, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.version = 4" + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "ihl"] - }, - { - "type" : "hexstr", - "value" : "0x05" + "type" : "header", + "value" : "int_q_congestion" } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 147, - "column" : 28, - "source_fragment" : "5; ..." + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" } }, { @@ -14054,7 +14797,7 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "dscp"] + "value" : ["int_q_congestion", "q_id"] }, { "type" : "hexstr", @@ -14062,10 +14805,10 @@ } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 303, + "filename" : "include/int/int_transit.p4", + "line" : 82, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" } }, { @@ -14073,18 +14816,33 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "ecn"] + "value" : ["int_q_congestion", "q_congestion"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x000000" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 304, + "filename" : "include/int/int_transit.p4", + "line" : 83, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" } }, { @@ -14092,7 +14850,7 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "total_len"] + "value" : ["int_egress_tstamp", "egress_tstamp"] }, { "type" : "expression", @@ -14106,46 +14864,42 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["standard_metadata", "enq_timestamp"] }, "right" : { - "type" : "hexstr", - "value" : "0x0024" + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] } } }, "right" : { "type" : "hexstr", - "value" : "0xffff" + "value" : "0xffffffff" } } } } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 305, + "filename" : "include/int/int_transit.p4", + "line" : 75, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" } }, { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "identification"] - }, - { - "type" : "hexstr", - "value" : "0x1513" + "type" : "header", + "value" : "int_ingress_tstamp" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 307, + "filename" : "include/int/int_transit.p4", + "line" : 68, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" } }, { @@ -14153,18 +14907,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "flags"] + "value" : ["int_ingress_tstamp", "ingress_tstamp"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 308, + "filename" : "include/int/int_transit.p4", + "line" : 69, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.flags = 0" + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" } }, { @@ -14172,18 +14926,41 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "frag_offset"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] }, { - "type" : "hexstr", - "value" : "0x0000" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_words50"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 309, - "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" + "filename" : "include/int/int_transit.p4", + "line" : 115, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_words + 4; ..." } }, { @@ -14191,56 +14968,63 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "ttl"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] }, { - "type" : "hexstr", - "value" : "0x40" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 160, - "column" : 32, - "source_fragment" : "64; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["gtpu_ipv4", "protocol"] - }, - { - "type" : "hexstr", - "value" : "0x11" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 144, - "column" : 25, - "source_fragment" : "17; ..." + "filename" : "include/int/int_transit.p4", + "line" : 116, + "column" : 33, + "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "id" : 109, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "src_addr"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "type" : "header", + "value" : "mpls" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 312, + "filename" : "include/control/next.p4", + "line" : 204, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." + "source_fragment" : "hdr.mpls.setInvalid()" } }, { @@ -14248,52 +15032,59 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_ipv4", "dst_addr"] + "value" : ["eth_type", "value"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 313, + "filename" : "include/control/next.p4", + "line" : 206, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.set_mpls", + "id" : 110, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["gtpu_ipv4", "hdr_checksum"] - }, - { - "type" : "hexstr", - "value" : "0x0000" + "type" : "header", + "value" : "mpls" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 314, + "filename" : "include/control/next.p4", + "line" : 211, "column" : 8, - "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" + "source_fragment" : "hdr.mpls.setValid()" } }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "gtpu_udp" + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_label12"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 316, + "filename" : "include/control/next.p4", + "line" : 212, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.setValid()" + "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." } }, { @@ -14301,18 +15092,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "sport"] + "value" : ["mpls", "tc"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 317, + "filename" : "include/control/next.p4", + "line" : 213, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + "source_fragment" : "hdr.mpls.tc = 3w0" } }, { @@ -14320,18 +15111,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "dport"] + "value" : ["mpls", "bos"] }, { "type" : "hexstr", - "value" : "0x0868" + "value" : "0x01" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 318, + "filename" : "include/control/next.p4", + "line" : 214, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.dport = 2152" + "source_fragment" : "hdr.mpls.bos = 1w1" } }, { @@ -14339,41 +15130,18 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "len"] + "value" : ["mpls", "ttl"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x0010" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 319, + "filename" : "include/control/next.p4", + "line" : 215, "column" : 8, - "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." } }, { @@ -14381,33 +15149,40 @@ "parameters" : [ { "type" : "field", - "value" : ["gtpu_udp", "checksum"] + "value" : ["eth_type", "value"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x8847" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 321, - "column" : 8, - "source_fragment" : "hdr.gtpu_udp.checksum = 0" + "filename" : "include/control/../define.p4", + "line" : 147, + "column" : 31, + "source_fragment" : "0x8847; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 111, + "runtime_data" : [], + "primitives" : [ { "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "outer_gtpu" + "value" : "vlan_tag" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 324, + "filename" : "include/control/next.p4", + "line" : 223, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.setValid()" + "source_fragment" : "hdr.vlan_tag.setValid()" } }, { @@ -14415,18 +15190,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "version"] + "value" : ["vlan_tag", "cfi"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 325, + "filename" : "include/control/next.p4", + "line" : 224, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.version = 0x01" + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." } }, { @@ -14434,18 +15209,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "pt"] + "value" : ["vlan_tag", "pri"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 326, + "filename" : "include/control/next.p4", + "line" : 225, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." } }, { @@ -14453,18 +15228,18 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "spare"] + "value" : ["vlan_tag", "eth_type"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x8100" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 327, - "column" : 8, - "source_fragment" : "hdr.outer_gtpu.spare = 0" + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." } }, { @@ -14472,94 +15247,116 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "ex_flag"] + "value" : ["vlan_tag", "vlan_id"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 328, + "filename" : "include/control/next.p4", + "line" : 227, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 112, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["outer_gtpu", "seq_flag"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "type" : "header", + "value" : "vlan_tag" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 329, + "filename" : "include/control/next.p4", + "line" : 256, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + "source_fragment" : "hdr.vlan_tag.setInvalid()" } - }, + } + ] + }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 113, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "mark_to_drop", "parameters" : [ { - "type" : "field", - "value" : ["outer_gtpu", "npdu_flag"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "type" : "header", + "value" : "standard_metadata" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 330, + "filename" : "include/control/next.p4", + "line" : 261, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + "source_fragment" : "mark_to_drop(standard_metadata)" } - }, + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 114, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 115, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "msgtype"] + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] }, { "type" : "hexstr", - "value" : "0xff" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 331, + "filename" : "include/control/slicing.p4", + "line" : 135, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + "source_fragment" : "tmp_dscp = 0" } - }, + } + ] + }, + { + "name" : "FabricEgress.spgw.gtpu_encap", + "id" : 116, + "runtime_data" : [], + "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["outer_gtpu", "msglen"] - }, - { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] + "type" : "header", + "value" : "gtpu_ipv4" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 311, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + "source_fragment" : "hdr.gtpu_ipv4.setValid()" } }, { @@ -14567,57 +15364,37 @@ "parameters" : [ { "type" : "field", - "value" : ["outer_gtpu", "teid"] + "value" : ["gtpu_ipv4", "version"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "type" : "hexstr", + "value" : "0x04" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 312, "column" : 8, - "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." - } - } - ] - }, - { - "name" : "packetio41", - "id" : 107, - "runtime_data" : [], - "primitives" : [ - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 41, - "column" : 12, - "source_fragment" : "exit" + "source_fragment" : "hdr.gtpu_ipv4.version = 4" } - } - ] - }, - { - "name" : "packetio44", - "id" : 108, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_in" + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 44, - "column" : 12, - "source_fragment" : "hdr.packet_in.setValid()" + "filename" : "include/control/../define.p4", + "line" : 164, + "column" : 28, + "source_fragment" : "5; ..." } }, { @@ -14625,87 +15402,45 @@ "parameters" : [ { "type" : "field", - "value" : ["packet_in", "ingress_port"] + "value" : ["gtpu_ipv4", "dscp"] }, { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 45, - "column" : 12, - "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + "filename" : "include/control/spgw.p4", + "line" : 314, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } }, { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 47, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "next283", - "id" : 109, - "runtime_data" : [], - "primitives" : [ - { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 283, - "column" : 12, - "source_fragment" : "mark_to_drop(standard_metadata)" - } - } - ] - }, - { - "name" : "next310", - "id" : 110, - "runtime_data" : [], - "primitives" : [ - { - "op" : "mark_to_drop", - "parameters" : [ + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, { - "type" : "header", - "value" : "standard_metadata" + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 310, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 315, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } - } - ] - }, - { - "name" : "next309", - "id" : 111, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["gtpu_ipv4", "total_len"] }, { "type" : "expression", @@ -14719,205 +15454,240 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["ipv4", "total_len"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0x0024" } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 309, - "column" : 12, - "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 316, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } - } - ] - }, - { - "name" : "next314", - "id" : 112, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 314, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 318, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } - } - ] - }, - { - "name" : "next313", - "id" : 113, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "ttl"] + "value" : ["gtpu_ipv4", "flags"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 313, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 319, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } - } - ] - }, - { - "name" : "spgw342", - "id" : 114, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricEgress.spgw.pdr_counter" + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 320, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 177, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "line" : 323, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } - } - ] - }, - { - "name" : "act", - "id" : 115, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"] + "value" : ["gtpu_ipv4", "dst_addr"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : false - } - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] } - ] - } - ] - }, - { - "name" : "int_transit420", - "id" : 116, - "runtime_data" : [], - "primitives" : [ + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 324, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + } + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"] + "value" : ["gtpu_ipv4", "hdr_checksum"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 420, - "column" : 12, - "source_fragment" : "return" + "filename" : "include/control/spgw.p4", + "line" : 325, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" } - } - ] - }, - { - "name" : "int_transit428", - "id" : 117, - "runtime_data" : [], - "primitives" : [ + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.setValid()" + } + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["gtpu_udp", "sport"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 328, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.dport = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] }, { "type" : "expression", @@ -14931,11 +15701,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] }, "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "type" : "hexstr", + "value" : "0x0010" } } }, @@ -14948,30 +15718,1470 @@ } ], "source_info" : { - "filename" : "include/int/int_transit.p4", - "line" : 428, - "column" : 12, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } - } - ] - }, - { - "name" : "int_transit425", - "id" : 118, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["gtpu_udp", "checksum"] }, { - "type" : "expression", - "value" : { - "type" : "expression", + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 332, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 335, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 336, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 337, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 338, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 339, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 340, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 341, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 342, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_teid32"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 343, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." + } + } + ] + }, + { + "name" : "FabricEgress.spgw.gtpu_encap_qfi", + "id" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 311, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 312, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.version = 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 164, + "column" : 28, + "source_fragment" : "5; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 314, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 315, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0024" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 316, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 318, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 319, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 320, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 177, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 323, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 324, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 325, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "sport"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 328, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.dport = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 332, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 335, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 336, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 337, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 338, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 339, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 340, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 341, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 342, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_teid32"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 343, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x002c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 349, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0018" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 352, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 355, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 357, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 1" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 358, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_options", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 359, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.next_ext = 0x85" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 360, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 88, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 362, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.len = 8w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "qfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 363, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.qfi = fabric_md.spgw.qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 364, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.next_ext = 0x0" + } + } + ] + }, + { + "name" : "packetio41", + "id" : 118, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio44", + "id" : 119, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 45, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 47, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "next283", + "id" : 120, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 283, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next310", + "id" : 121, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 310, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next309", + "id" : 122, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 309, + "column" : 12, + "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + } + } + ] + }, + { + "name" : "next314", + "id" : 123, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 314, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next313", + "id" : 124, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 313, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "spgw377", + "id" : 125, + "runtime_data" : [], + "primitives" : [ + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricEgress.spgw.pdr_counter" + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 377, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + } + } + ] + }, + { + "name" : "act", + "id" : 126, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "int_transit420", + "id" : 127, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 420, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "int_transit428", + "id" : 128, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 428, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "int_transit425", + "id" : 129, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", "value" : { "op" : "&", "left" : { @@ -15007,7 +17217,7 @@ }, { "name" : "int_transit431", - "id" : 119, + "id" : 130, "runtime_data" : [], "primitives" : [ { @@ -15033,7 +17243,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_bytes37"] + "value" : ["scalars", "userMetadata._int_meta_new_bytes51"] } } }, @@ -15056,7 +17266,7 @@ }, { "name" : "int_transit434", - "id" : 120, + "id" : 131, "runtime_data" : [], "primitives" : [ { @@ -15082,7 +17292,7 @@ }, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_new_words36"] + "value" : ["scalars", "userMetadata._int_meta_new_words50"] } } }, @@ -15102,6 +17312,84 @@ } } ] + }, + { + "name" : "slicing155", + "id" : 132, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 16, + "source_fragment" : "hdr.ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing159", + "id" : 133, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 134, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] } ], "pipelines" : [ @@ -15110,20 +17398,20 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 47, + "line" : 49, "column" : 8, "source_fragment" : "FabricIngress" }, - "init_table" : "node_2", + "init_table" : "tbl_lookup_md_init23", "tables" : [ { - "name" : "tbl_packetio25", + "name" : "tbl_lookup_md_init23", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 42, - "source_fragment" : "= hdr.packet_out.egress_port; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." }, "key" : [], "match_type" : "exact", @@ -15132,286 +17420,143 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], - "actions" : ["packetio25"], - "base_default_next" : "FabricIngress.spgw.interfaces", + "action_ids" : [61], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", "next_tables" : { - "packetio25" : "FabricIngress.spgw.interfaces" + "lookup_md_init23" : "node_3" }, "default_entry" : { - "action_id" : 49, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.interfaces", + "name" : "tbl_lookup_md_init32", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 129, - "column" : 10, - "source_fragment" : "interfaces" + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." }, - "key" : [ - { - "match_type" : "lpm", - "name" : "ipv4_dst_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "gtpu_is_valid", - "target" : ["gtpu", "$valid$"], - "mask" : null - } - ], - "match_type" : "lpm", + "key" : [], + "match_type" : "exact", "type" : "simple", - "max_size" : 128, + "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40, 41], - "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], - "base_default_next" : null, + "action_ids" : [56], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", "next_tables" : { - "__HIT__" : "node_5", - "__MISS__" : "node_16" + "lookup_md_init32" : "node_5" }, "default_entry" : { - "action_id" : 41, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "name" : "tbl_lookup_md_init37", "id" : 2, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [32, 33, 34, 35], - "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], - "base_default_next" : "node_7", - "next_tables" : { - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_7" - }, - "default_entry" : { - "action_id" : 35, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 32, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 33, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 34, - "action_data" : [] - }, - "priority" : 3 - } - ] + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [53], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init37" : "node_19" + }, + "default_entry" : { + "action_id" : 53, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } }, { - "name" : "FabricIngress.spgw.uplink_pdrs", + "name" : "tbl_lookup_md_init40", "id" : 3, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 176, - "column" : 10, - "source_fragment" : "uplink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "tunnel_ipv4_dst", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "teid", - "target" : ["gtpu", "teid"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43, 45, 10], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [54], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init40" : "node_19" }, "default_entry" : { - "action_id" : 10, - "action_const" : false, + "action_id" : 54, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.downlink_pdrs", + "name" : "tbl_lookup_md_init43", "id" : 4, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 164, - "column" : 10, - "source_fragment" : "downlink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "ue_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [42, 44, 9], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [55], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init43" : "node_19" }, "default_entry" : { - "action_id" : 9, - "action_const" : false, + "action_id" : 55, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "tbl_spgw265", + "name" : "tbl_lookup_md_init47", "id" : 5, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." }, "key" : [], "match_type" : "exact", @@ -15420,223 +17565,205 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], - "actions" : ["spgw265"], - "base_default_next" : "node_12", + "action_ids" : [60], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", "next_tables" : { - "spgw265" : "node_12" + "lookup_md_init47" : "node_13" }, "default_entry" : { - "action_id" : 50, + "action_id" : 60, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "name" : "tbl_lookup_md_init52", "id" : 6, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36, 37, 38, 39], - "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw.fars", + "action_ids" : [57], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" + "lookup_md_init52" : "node_19" }, "default_entry" : { - "action_id" : 39, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true - }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 36, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 37, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 38, - "action_data" : [] - }, - "priority" : 3 - } - ] + } }, { - "name" : "FabricIngress.spgw.fars", + "name" : "tbl_lookup_md_init55", "id" : 7, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 233, - "column" : 10, - "source_fragment" : "fars" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "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" : [58], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init55" : "node_19" + }, + "default_entry" : { + "action_id" : 58, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init58", + "id" : 8, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "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" : [59], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init58" : "node_19" + }, + "default_entry" : { + "action_id" : 59, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_packetio25", + "id" : 9, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 42, + "source_fragment" : "= hdr.packet_out.egress_port; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "far_id", - "target" : ["scalars", "userMetadata._spgw_far_id25"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2048, + "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46, 47, 48], - "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], - "base_default_next" : "tbl_spgw282", + "action_ids" : [62], + "actions" : ["packetio25"], + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", "next_tables" : { - "FabricIngress.spgw.load_normal_far" : "tbl_spgw282", - "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw282", - "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw282" + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" }, "default_entry" : { - "action_id" : 46, + "action_id" : 62, "action_const" : true, - "action_data" : ["0x1", "0x0"], + "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw282", - "id" : 8, + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "=" + "filename" : "include/control/slicing.p4", + "line" : 49, + "column" : 10, + "source_fragment" : "classifier" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 512, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], - "actions" : ["spgw282"], - "base_default_next" : "node_16", + "action_ids" : [32, 33], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", "next_tables" : { - "spgw282" : "node_16" + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" }, "default_entry" : { - "action_id" : 51, + "action_id" : 32, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_filtering113", - "id" : 9, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -15650,14 +17777,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [52], + "action_ids" : [63], "actions" : ["filtering113"], - "base_default_next" : "node_18", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_18" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 52, + "action_id" : 63, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15665,7 +17792,7 @@ }, { "name" : "tbl_filtering129", - "id" : 10, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -15679,14 +17806,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], + "action_ids" : [64], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 53, + "action_id" : 64, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -15694,7 +17821,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 11, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -15744,7 +17871,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -15773,258 +17900,509 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata._ip_eth_type0"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [15], + "actions" : ["FabricIngress.filtering.set_forwarding_type"], + "base_default_next" : "node_28", + "next_tables" : { + "FabricIngress.filtering.set_forwarding_type" : "node_28" + }, + "default_entry" : { + "action_id" : 15, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw.interfaces", + "id" : 15, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 132, + "column" : 10, + "source_fragment" : "interfaces" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["gtpu", "$valid$"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 128, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [44, 45], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "node_30", + "__MISS__" : "node_41" + }, + "default_entry" : { + "action_id" : 45, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "id" : 16, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 77, + "column" : 10, + "source_fragment" : "decap_gtpu" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } - ], - "match_type" : "ternary", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [15], - "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_22", - "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_22" - }, - "default_entry" : { - "action_id" : 15, - "action_const" : true, - "action_data" : ["0x0"], - "action_entry_const" : true - } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [36, 37, 38, 39], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_32", + "next_tables" : { + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_32" + }, + "default_entry" : { + "action_id" : 39, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 36, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 37, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 38, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "FabricIngress.forwarding.bridging", - "id" : 13, + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 17, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 46, + "filename" : "include/control/spgw.p4", + "line" : 184, "column" : 10, - "source_fragment" : "bridging" + "source_fragment" : "uplink_pdrs" }, "key" : [ { "match_type" : "exact", - "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "name" : "tunnel_ipv4_dst", + "target" : ["ipv4", "dst_addr"], "mask" : null }, { - "match_type" : "ternary", - "name" : "eth_dst", - "target" : ["ethernet", "dst_addr"], + "match_type" : "exact", + "name" : "teid", + "target" : ["gtpu", "teid"], "mask" : null - } - ], - "match_type" : "ternary", - "type" : "simple", - "max_size" : 1024, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [16, 1], - "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_29", - "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_29", - "nop" : "node_29" - }, - "default_entry" : { - "action_id" : 1, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "FabricIngress.forwarding.mpls", - "id" : 14, - "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 71, - "column" : 10, - "source_fragment" : "mpls" - }, - "key" : [ + }, { "match_type" : "exact", - "name" : "mpls_label", - "target" : ["scalars", "userMetadata._mpls_label4"], + "name" : "has_qfi", + "target" : ["gtpu_ext_psc", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "qfi", + "target" : ["scalars", "userMetadata._spgw_qfi39"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [17, 2], - "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_29", + "action_ids" : [47, 49, 10], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_29", - "nop" : "node_29" + "FabricIngress.spgw.load_pdr" : "node_35", + "FabricIngress.spgw.load_pdr_qos" : "node_35", + "NoAction" : "node_35" }, "default_entry" : { - "action_id" : 2, - "action_const" : true, + "action_id" : 10, + "action_const" : false, "action_data" : [], - "action_entry_const" : true + "action_entry_const" : false } }, { - "name" : "FabricIngress.forwarding.routing_v4", - "id" : 15, + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 18, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 108, + "filename" : "include/control/spgw.p4", + "line" : 172, "column" : 10, - "source_fragment" : "routing_v4" + "source_fragment" : "downlink_pdrs" }, "key" : [ { - "match_type" : "lpm", - "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata._ipv4_dst_addr16"], + "match_type" : "exact", + "name" : "ue_addr", + "target" : ["ipv4", "dst_addr"], "mask" : null } ], - "match_type" : "lpm", + "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [18, 19, 3], - "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_29", + "action_ids" : [46, 48, 9], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_29", - "FabricIngress.forwarding.nop_routing_v4" : "node_29", - "nop" : "node_29" + "FabricIngress.spgw.load_pdr" : "node_35", + "FabricIngress.spgw.load_pdr_qos" : "node_35", + "NoAction" : "node_35" }, "default_entry" : { - "action_id" : 3, + "action_id" : 9, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricIngress.pre_next.next_mpls", - "id" : 16, + "name" : "tbl_spgw277", + "id" : 19, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 36, - "column" : 10, - "source_fragment" : "next_mpls" + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, - "key" : [ - { - "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [20, 4], - "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], - "base_default_next" : "FabricIngress.pre_next.next_vlan", + "action_ids" : [65], + "actions" : ["spgw277"], + "base_default_next" : "node_37", "next_tables" : { - "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", - "nop" : "FabricIngress.pre_next.next_vlan" + "spgw277" : "node_37" }, "default_entry" : { - "action_id" : 4, + "action_id" : 65, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.pre_next.next_vlan", - "id" : 17, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 20, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 73, + "filename" : "include/control/spgw.p4", + "line" : 77, "column" : 10, - "source_fragment" : "next_vlan" + "source_fragment" : "decap_gtpu" }, "key" : [ { "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [21, 5], - "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], - "base_default_next" : "tbl_acl27", + "action_ids" : [40, 41, 42, 43], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 5, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true - } + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 40, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 41, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 42, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "tbl_acl27", - "id" : 18, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." + "name" : "FabricIngress.spgw.fars", + "id" : 21, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 245, + "column" : 10, + "source_fragment" : "fars" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "far_id", + "target" : ["scalars", "userMetadata._spgw_far_id37"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 2048, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [60], - "actions" : ["acl27"], - "base_default_next" : "node_33", + "action_ids" : [50, 51, 52], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_spgw294", "next_tables" : { - "acl27" : "node_33" + "FabricIngress.spgw.load_normal_far" : "tbl_spgw294", + "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw294", + "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw294" }, "default_entry" : { - "action_id" : 60, + "action_id" : 50, "action_const" : true, - "action_data" : [], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { - "name" : "tbl_acl98", - "id" : 19, + "name" : "tbl_spgw294", + "id" : 22, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -16033,159 +18411,206 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], - "actions" : ["acl98"], - "base_default_next" : "node_35", + "action_ids" : [66], + "actions" : ["spgw294"], + "base_default_next" : "node_41", "next_tables" : { - "acl98" : "node_35" + "spgw294" : "node_41" }, "default_entry" : { - "action_id" : 56, + "action_id" : 66, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl102", - "id" : 20, + "name" : "FabricIngress.forwarding.bridging", + "id" : 23, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "source_fragment" : "= hdr.inner_tcp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "bridging" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "exact", + "name" : "vlan_id", + "target" : ["scalars", "userMetadata._vlan_id9"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "eth_dst", + "target" : ["ethernet", "dst_addr"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [16, 1], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl102" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.set_next_id_bridging" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 54, + "action_id" : 1, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl105", - "id" : 21, + "name" : "FabricIngress.forwarding.mpls", + "id" : 24, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "source_fragment" : "= hdr.inner_udp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 71, + "column" : 10, + "source_fragment" : "mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "mpls_label", + "target" : ["scalars", "userMetadata._mpls_label12"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [17, 2], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl105" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 55, + "action_id" : 2, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl109", - "id" : 22, + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 25, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." + "filename" : "include/control/forwarding.p4", + "line" : 108, + "column" : 10, + "source_fragment" : "routing_v4" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._ipv4_dst_addr24"], + "mask" : null + } + ], + "match_type" : "lpm", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59], - "actions" : ["acl109"], - "base_default_next" : "node_41", + "action_ids" : [18, 19, 3], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl109" : "node_41" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_48", + "FabricIngress.forwarding.nop_routing_v4" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 59, - "action_const" : true, + "action_id" : 3, + "action_const" : false, "action_data" : [], - "action_entry_const" : true + "action_entry_const" : false } }, { - "name" : "tbl_acl113", - "id" : 23, + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 26, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "source_fragment" : "= hdr.tcp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 36, + "column" : 10, + "source_fragment" : "next_mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id17"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [20, 4], + "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], + "base_default_next" : "FabricIngress.pre_next.next_vlan", "next_tables" : { - "acl113" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", + "nop" : "FabricIngress.pre_next.next_vlan" }, "default_entry" : { - "action_id" : 57, + "action_id" : 4, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl116", - "id" : 24, + "name" : "FabricIngress.pre_next.next_vlan", + "id" : 27, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "source_fragment" : "= hdr.udp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 73, + "column" : 10, + "source_fragment" : "next_vlan" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id17"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58], - "actions" : ["acl116"], + "action_ids" : [21, 5], + "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 58, + "action_id" : 5, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -16193,10 +18618,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 25, + "id" : 28, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -16234,19 +18659,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -16264,19 +18689,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata._port_type40"], + "target" : ["scalars", "userMetadata._port_type54"], "mask" : null } ], @@ -16288,13 +18713,13 @@ "direct_meters" : null, "action_ids" : [22, 23, 24, 25, 26], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_46", + "base_default_next" : "node_52", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_46", - "FabricIngress.acl.punt_to_cpu" : "node_46", - "FabricIngress.acl.set_clone_session_id" : "node_46", - "FabricIngress.acl.drop" : "node_46", - "FabricIngress.acl.nop_acl" : "node_46" + "FabricIngress.acl.set_next_id_acl" : "node_52", + "FabricIngress.acl.punt_to_cpu" : "node_52", + "FabricIngress.acl.set_clone_session_id" : "node_52", + "FabricIngress.acl.drop" : "node_52", + "FabricIngress.acl.nop_acl" : "node_52" }, "default_entry" : { "action_id" : 26, @@ -16305,7 +18730,7 @@ }, { "name" : "FabricIngress.next.xconnect", - "id" : 26, + "id" : 29, "source_info" : { "filename" : "include/control/next.p4", "line" : 68, @@ -16322,7 +18747,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -16349,7 +18774,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 27, + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -16360,7 +18785,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -16382,7 +18807,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 28, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -16393,7 +18818,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -16405,10 +18830,10 @@ "direct_meters" : null, "action_ids" : [31, 8], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_50", + "base_default_next" : "node_56", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_50", - "nop" : "node_50" + "FabricIngress.next.set_mcast_group_id" : "node_56", + "nop" : "node_56" }, "default_entry" : { "action_id" : 8, @@ -16419,7 +18844,7 @@ }, { "name" : "tbl_port_counter31", - "id" : 29, + "id" : 32, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 31, @@ -16433,27 +18858,93 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61], + "action_ids" : [67], "actions" : ["port_counter31"], - "base_default_next" : "node_52", + "base_default_next" : "node_58", + "next_tables" : { + "port_counter31" : "node_58" + }, + "default_entry" : { + "action_id" : 67, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_port_counter34", + "id" : 33, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [68], + "actions" : ["port_counter34"], + "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", + "next_tables" : { + "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source" + }, + "default_entry" : { + "action_id" : 68, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.process_set_source_sink.tb_set_source", + "id" : 34, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "tb_set_source" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 511, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [11, 0], + "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], + "base_default_next" : "tbl_slicing114", "next_tables" : { - "port_counter31" : "node_52" + "FabricIngress.process_set_source_sink.int_set_source" : "tbl_slicing114", + "nop" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 61, + "action_id" : 0, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_port_counter34", - "id" : 30, + "name" : "tbl_slicing114", + "id" : 35, "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." }, "key" : [], "match_type" : "exact", @@ -16462,53 +18953,65 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], - "actions" : ["port_counter34"], - "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", + "action_ids" : [69], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", "next_tables" : { - "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source" + "slicing114" : "FabricIngress.qos.queues" }, "default_entry" : { - "action_id" : 62, + "action_id" : 69, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.process_set_source_sink.tb_set_source", - "id" : 31, + "name" : "FabricIngress.qos.queues", + "id" : 36, "source_info" : { - "filename" : "include/int/int_main.p4", - "line" : 46, + "filename" : "include/control/slicing.p4", + "line" : 93, "column" : 10, - "source_fragment" : "tb_set_source" + "source_fragment" : "queues" }, "key" : [ { "match_type" : "exact", - "name" : "ig_port", - "target" : ["standard_metadata", "ingress_port"], + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id25"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc27"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color26"], "mask" : null } ], - "match_type" : "exact", + "match_type" : "ternary", "type" : "simple", - "max_size" : 511, + "max_size" : 128, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [11, 0], - "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"], + "action_ids" : [34, 35], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], "base_default_next" : null, "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_source" : null, - "nop" : null + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null }, "default_entry" : { - "action_id" : 0, + "action_id" : 34, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0"], "action_entry_const" : true } } @@ -16529,23 +19032,23 @@ "input" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] } ] } @@ -16553,13 +19056,13 @@ ], "conditionals" : [ { - "name" : "node_2", + "name" : "node_3", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 24, + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, "column" : 12, - "source_fragment" : "hdr.packet_out.isValid()" + "source_fragment" : "hdr.inner_ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -16568,47 +19071,44 @@ "left" : null, "right" : { "type" : "field", - "value" : ["packet_out", "$valid$"] + "value" : ["inner_ipv4", "$valid$"] } } }, - "true_next" : "tbl_packetio25", - "false_next" : "FabricIngress.spgw.interfaces" + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" }, { "name" : "node_5", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 255, + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + "source_fragment" : "hdr.inner_tcp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["inner_tcp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "true_next" : "tbl_lookup_md_init37", "false_next" : "node_7" }, { "name" : "node_7", "id" : 2, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 259, - "column" : 16, - "source_fragment" : "hdr.gtpu.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" }, "expression" : { "type" : "expression", @@ -16617,47 +19117,44 @@ "left" : null, "right" : { "type" : "field", - "value" : ["gtpu", "$valid$"] + "value" : ["inner_udp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.uplink_pdrs", - "false_next" : "FabricIngress.spgw.downlink_pdrs" + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" }, { - "name" : "node_10", + "name" : "node_9", "id" : 3, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 264, - "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["inner_icmp", "$valid$"] } } }, - "true_next" : "tbl_spgw265", - "false_next" : "node_12" + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" }, { - "name" : "node_12", + "name" : "node_11", "id" : 4, "source_info" : { - "filename" : "fabric.p4", - "line" : 68, - "column" : 24, - "source_fragment" : "fabric_metadata" + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -16666,16 +19163,108 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["ipv4", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", - "false_next" : "FabricIngress.spgw.fars" + "true_next" : "tbl_lookup_md_init47", + "false_next" : "node_19" }, { - "name" : "node_16", + "name" : "node_13", "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init52", + "false_next" : "node_15" + }, + { + "name" : "node_15", + "id" : 6, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init55", + "false_next" : "node_17" + }, + { + "name" : "node_17", + "id" : 7, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["icmp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init58", + "false_next" : "node_19" + }, + { + "name" : "node_19", + "id" : 8, + "source_info" : { + "filename" : "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" : ["packet_out", "$valid$"] + } + } + }, + "true_next" : "tbl_packetio25", + "false_next" : "FabricIngress.slice_tc_classifier.classifier" + }, + { + "name" : "node_22", + "id" : 9, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 112, @@ -16694,11 +19283,11 @@ } }, "true_next" : "tbl_filtering113", - "false_next" : "node_18" + "false_next" : "node_24" }, { - "name" : "node_18", - "id" : 6, + "name" : "node_24", + "id" : 10, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 124, @@ -16727,11 +19316,11 @@ "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { - "name" : "node_22", - "id" : 7, + "name" : "node_28", + "id" : 11, "source_info" : { "filename" : "fabric.p4", - "line" : 71, + "line" : 76, "column" : 12, "source_fragment" : "fabric_metadata.skip_forwarding" }, @@ -16747,23 +19336,23 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] } } } } }, - "true_next" : "node_23", - "false_next" : "node_29" + "true_next" : "FabricIngress.spgw.interfaces", + "false_next" : "node_41" }, { - "name" : "node_23", - "id" : 8, + "name" : "node_30", + "id" : 12, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 150, - "column" : 12, - "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + "filename" : "include/control/spgw.p4", + "line" : 267, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", @@ -16771,77 +19360,97 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, "right" : { "type" : "hexstr", - "value" : "0x00" + "value" : "0x03" } } }, - "true_next" : "FabricIngress.forwarding.bridging", - "false_next" : "node_25" + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_32" }, { - "name" : "node_25", - "id" : 9, + "name" : "node_32", + "id" : 13, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 151, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + "filename" : "include/control/spgw.p4", + "line" : 271, + "column" : 16, + "source_fragment" : "hdr.gtpu.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["gtpu", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.mpls", - "false_next" : "node_27" + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" }, { - "name" : "node_27", - "id" : 10, + "name" : "node_35", + "id" : 14, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 152, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + "filename" : "include/control/spgw.p4", + "line" : 276, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", + "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x03" } } }, - "true_next" : "FabricIngress.forwarding.routing_v4", - "false_next" : "node_29" + "true_next" : "tbl_spgw277", + "false_next" : "node_37" }, { - "name" : "node_29", - "id" : 11, + "name" : "node_37", + "id" : 15, + "source_info" : { + "filename" : "fabric.p4", + "line" : 77, + "column" : 28, + "source_fragment" : "fabric_metadata" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] + } + } + }, + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" + }, + { + "name" : "node_41", + "id" : 16, "source_info" : { "filename" : "fabric.p4", - "line" : 74, + "line" : 80, "column" : 12, - "source_fragment" : "fabric_metadata.skip_next" + "source_fragment" : "fabric_metadata.skip_forwarding" }, "expression" : { "type" : "expression", @@ -16855,176 +19464,129 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] } } } } }, - "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" + "true_next" : "node_42", + "false_next" : "node_48" }, { - "name" : "node_33", - "id" : 12, + "name" : "node_42", + "id" : 17, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, + "filename" : "include/control/forwarding.p4", + "line" : 150, "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" }, "expression" : { "type" : "expression", "value" : { - "op" : "and", + "op" : "==", "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["inner_ipv4", "$valid$"] - } - } + "type" : "hexstr", + "value" : "0x00" } } }, - "true_next" : "tbl_acl98", - "false_next" : "node_39" + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_44" }, { - "name" : "node_35", - "id" : 13, + "name" : "node_44", + "id" : 18, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 151, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["inner_tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl102", - "false_next" : "node_37" - }, - { - "name" : "node_37", - "id" : 14, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, + "value" : ["scalars", "userMetadata._fwd_type16"] + }, "right" : { - "type" : "field", - "value" : ["inner_udp", "$valid$"] + "type" : "hexstr", + "value" : "0x01" } } }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_46" }, { - "name" : "node_39", - "id" : 15, + "name" : "node_46", + "id" : 19, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" - }, - { - "name" : "node_41", - "id" : 16, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, + "value" : ["scalars", "userMetadata._fwd_type16"] + }, "right" : { - "type" : "field", - "value" : ["tcp", "$valid$"] + "type" : "hexstr", + "value" : "0x02" } } }, - "true_next" : "tbl_acl113", - "false_next" : "node_43" + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "node_48" }, { - "name" : "node_43", - "id" : 17, + "name" : "node_48", + "id" : 20, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" + "filename" : "fabric.p4", + "line" : 83, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_next" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_next15"] + } + } } } }, - "true_next" : "tbl_acl116", + "true_next" : "FabricIngress.pre_next.next_mpls", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_46", - "id" : 18, + "name" : "node_52", + "id" : 21, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -17040,18 +19602,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] } } } } }, - "false_next" : null, - "true_next" : "FabricIngress.next.xconnect" + "true_next" : "FabricIngress.next.xconnect", + "false_next" : "tbl_slicing114" }, { - "name" : "node_50", - "id" : 19, + "name" : "node_56", + "id" : 22, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -17073,11 +19635,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_52" + "false_next" : "node_58" }, { - "name" : "node_52", - "id" : 20, + "name" : "node_58", + "id" : 23, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -17108,15 +19670,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_57", + "init_table" : "node_65", "tables" : [ { "name" : "tbl_packetio41", - "id" : 32, + "id" : 37, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -17130,14 +19692,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [107], + "action_ids" : [118], "actions" : ["packetio41"], - "base_default_next" : "node_59", + "base_default_next" : "node_67", "next_tables" : { - "packetio41" : "node_59" + "packetio41" : "node_67" }, "default_entry" : { - "action_id" : 107, + "action_id" : 118, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17145,7 +19707,7 @@ }, { "name" : "tbl_packetio44", - "id" : 33, + "id" : 38, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -17159,14 +19721,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [108], + "action_ids" : [119], "actions" : ["packetio44"], - "base_default_next" : "node_61", + "base_default_next" : "node_69", "next_tables" : { - "packetio44" : "node_61" + "packetio44" : "node_69" }, "default_entry" : { - "action_id" : 108, + "action_id" : 119, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17174,7 +19736,7 @@ }, { "name" : "tbl_next283", - "id" : 34, + "id" : 39, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -17188,14 +19750,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [109], + "action_ids" : [120], "actions" : ["next283"], - "base_default_next" : "node_63", + "base_default_next" : "node_71", "next_tables" : { - "next283" : "node_63" + "next283" : "node_71" }, "default_entry" : { - "action_id" : 109, + "action_id" : 120, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17203,7 +19765,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 35, + "id" : 40, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -17217,14 +19779,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [101], + "action_ids" : [109], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 101, + "action_id" : 109, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17232,7 +19794,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 36, + "id" : 41, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -17246,14 +19808,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], + "action_ids" : [110], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 102, + "action_id" : 110, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17261,7 +19823,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 37, + "id" : 42, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -17272,7 +19834,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -17288,16 +19850,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 104, 105], + "action_ids" : [111, 112, 113], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_68", + "base_default_next" : "node_76", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_68", - "FabricEgress.egress_next.pop_vlan" : "node_68", - "FabricEgress.egress_next.drop" : "node_68" + "FabricEgress.egress_next.push_vlan" : "node_76", + "FabricEgress.egress_next.pop_vlan" : "node_76", + "FabricEgress.egress_next.drop" : "node_76" }, "default_entry" : { - "action_id" : 105, + "action_id" : 113, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17305,7 +19867,7 @@ }, { "name" : "tbl_next309", - "id" : 38, + "id" : 43, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -17319,14 +19881,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [111], + "action_ids" : [122], "actions" : ["next309"], - "base_default_next" : "node_70", + "base_default_next" : "node_78", "next_tables" : { - "next309" : "node_70" + "next309" : "node_78" }, "default_entry" : { - "action_id" : 111, + "action_id" : 122, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17334,7 +19896,7 @@ }, { "name" : "tbl_next310", - "id" : 39, + "id" : 44, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -17348,14 +19910,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [110], + "action_ids" : [121], "actions" : ["next310"], - "base_default_next" : "node_76", + "base_default_next" : "node_84", "next_tables" : { - "next310" : "node_76" + "next310" : "node_84" }, "default_entry" : { - "action_id" : 110, + "action_id" : 121, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17363,7 +19925,7 @@ }, { "name" : "tbl_next313", - "id" : 40, + "id" : 45, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -17377,14 +19939,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [113], + "action_ids" : [124], "actions" : ["next313"], - "base_default_next" : "node_74", + "base_default_next" : "node_82", "next_tables" : { - "next313" : "node_74" + "next313" : "node_82" }, "default_entry" : { - "action_id" : 113, + "action_id" : 124, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17392,7 +19954,7 @@ }, { "name" : "tbl_next314", - "id" : 41, + "id" : 46, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -17406,14 +19968,43 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [112], + "action_ids" : [123], "actions" : ["next314"], - "base_default_next" : "node_76", + "base_default_next" : "node_84", "next_tables" : { - "next314" : "node_76" + "next314" : "node_84" }, "default_entry" : { - "action_id" : 112, + "action_id" : 123, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_spgw_gtpu_encap_qfi", + "id" : 47, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 371, + "column" : 20, + "source_fragment" : "gtpu_encap_qfi()" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [117], + "actions" : ["FabricEgress.spgw.gtpu_encap_qfi"], + "base_default_next" : "node_89", + "next_tables" : { + "FabricEgress.spgw.gtpu_encap_qfi" : "node_89" + }, + "default_entry" : { + "action_id" : 117, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17421,11 +20012,11 @@ }, { "name" : "tbl_spgw_gtpu_encap", - "id" : 42, + "id" : 48, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, - "column" : 16, + "line" : 373, + "column" : 20, "source_fragment" : "gtpu_encap()" }, "key" : [], @@ -17435,25 +20026,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [106], + "action_ids" : [116], "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_79", + "base_default_next" : "node_89", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_79" + "FabricEgress.spgw.gtpu_encap" : "node_89" }, "default_entry" : { - "action_id" : 106, + "action_id" : 116, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw342", - "id" : 43, + "name" : "tbl_spgw377", + "id" : 49, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, + "line" : 377, "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, @@ -17464,14 +20055,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [114], - "actions" : ["spgw342"], - "base_default_next" : "node_81", + "action_ids" : [125], + "actions" : ["spgw377"], + "base_default_next" : "node_91", "next_tables" : { - "spgw342" : "node_81" + "spgw377" : "node_91" }, "default_entry" : { - "action_id" : 114, + "action_id" : 125, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17479,7 +20070,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "id" : 44, + "id" : 50, "source_info" : { "filename" : "include/int/int_source.p4", "line" : 66, @@ -17502,13 +20093,13 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "userMetadata._l4_sport13"], + "target" : ["scalars", "userMetadata._l4_sport21"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "userMetadata._l4_dport14"], + "target" : ["scalars", "userMetadata._l4_dport22"], "mask" : null } ], @@ -17518,15 +20109,15 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [67, 63], + "action_ids" : [75, 70], "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"], - "base_default_next" : "node_84", + "base_default_next" : "node_94", "next_tables" : { - "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_84", - "nop" : "node_84" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_94", + "nop" : "node_94" }, "default_entry" : { - "action_id" : 63, + "action_id" : 70, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17534,7 +20125,7 @@ }, { "name" : "tbl_act", - "id" : 45, + "id" : 51, "key" : [], "match_type" : "exact", "type" : "simple", @@ -17542,14 +20133,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [115], + "action_ids" : [126], "actions" : ["act"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { "act" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 115, + "action_id" : 126, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17557,7 +20148,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", - "id" : 46, + "id" : 52, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 315, @@ -17578,15 +20169,15 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68, 64], + "action_ids" : [76, 71], "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], - "base_default_next" : "node_87", + "base_default_next" : "node_97", "next_tables" : { - "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_87", - "nop" : "node_87" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_97", + "nop" : "node_97" }, "default_entry" : { - "action_id" : 64, + "action_id" : 71, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17594,7 +20185,7 @@ }, { "name" : "tbl_int_transit420", - "id" : 47, + "id" : 53, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 420, @@ -17608,14 +20199,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [116], + "action_ids" : [127], "actions" : ["int_transit420"], - "base_default_next" : "node_89", + "base_default_next" : "node_99", "next_tables" : { - "int_transit420" : "node_89" + "int_transit420" : "node_99" }, "default_entry" : { - "action_id" : 116, + "action_id" : 127, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -17623,7 +20214,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", - "id" : 48, + "id" : 54, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 331, @@ -17644,7 +20235,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 65], + "action_ids" : [77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 73], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -17667,7 +20258,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 65, + "action_id" : 73, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -17687,7 +20278,7 @@ } ], "action_entry" : { - "action_id" : 69, + "action_id" : 77, "action_data" : [] }, "priority" : 1 @@ -17706,7 +20297,7 @@ } ], "action_entry" : { - "action_id" : 70, + "action_id" : 78, "action_data" : [] }, "priority" : 2 @@ -17725,7 +20316,7 @@ } ], "action_entry" : { - "action_id" : 71, + "action_id" : 79, "action_data" : [] }, "priority" : 3 @@ -17744,7 +20335,7 @@ } ], "action_entry" : { - "action_id" : 72, + "action_id" : 80, "action_data" : [] }, "priority" : 4 @@ -17763,7 +20354,7 @@ } ], "action_entry" : { - "action_id" : 73, + "action_id" : 81, "action_data" : [] }, "priority" : 5 @@ -17782,7 +20373,7 @@ } ], "action_entry" : { - "action_id" : 74, + "action_id" : 82, "action_data" : [] }, "priority" : 6 @@ -17801,7 +20392,7 @@ } ], "action_entry" : { - "action_id" : 75, + "action_id" : 83, "action_data" : [] }, "priority" : 7 @@ -17820,7 +20411,7 @@ } ], "action_entry" : { - "action_id" : 76, + "action_id" : 84, "action_data" : [] }, "priority" : 8 @@ -17839,7 +20430,7 @@ } ], "action_entry" : { - "action_id" : 77, + "action_id" : 85, "action_data" : [] }, "priority" : 9 @@ -17858,7 +20449,7 @@ } ], "action_entry" : { - "action_id" : 78, + "action_id" : 86, "action_data" : [] }, "priority" : 10 @@ -17877,7 +20468,7 @@ } ], "action_entry" : { - "action_id" : 79, + "action_id" : 87, "action_data" : [] }, "priority" : 11 @@ -17896,7 +20487,7 @@ } ], "action_entry" : { - "action_id" : 80, + "action_id" : 88, "action_data" : [] }, "priority" : 12 @@ -17915,7 +20506,7 @@ } ], "action_entry" : { - "action_id" : 81, + "action_id" : 89, "action_data" : [] }, "priority" : 13 @@ -17934,7 +20525,7 @@ } ], "action_entry" : { - "action_id" : 82, + "action_id" : 90, "action_data" : [] }, "priority" : 14 @@ -17953,7 +20544,7 @@ } ], "action_entry" : { - "action_id" : 83, + "action_id" : 91, "action_data" : [] }, "priority" : 15 @@ -17972,7 +20563,7 @@ } ], "action_entry" : { - "action_id" : 84, + "action_id" : 92, "action_data" : [] }, "priority" : 16 @@ -17981,7 +20572,7 @@ }, { "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", - "id" : 49, + "id" : 55, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 375, @@ -18002,7 +20593,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 66], + "action_ids" : [93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 74], "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], "base_default_next" : "tbl_int_transit425", "next_tables" : { @@ -18025,7 +20616,7 @@ "NoAction" : "tbl_int_transit425" }, "default_entry" : { - "action_id" : 66, + "action_id" : 74, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -18045,7 +20636,7 @@ } ], "action_entry" : { - "action_id" : 85, + "action_id" : 93, "action_data" : [] }, "priority" : 1 @@ -18064,7 +20655,7 @@ } ], "action_entry" : { - "action_id" : 86, + "action_id" : 94, "action_data" : [] }, "priority" : 2 @@ -18083,7 +20674,7 @@ } ], "action_entry" : { - "action_id" : 87, + "action_id" : 95, "action_data" : [] }, "priority" : 3 @@ -18102,7 +20693,7 @@ } ], "action_entry" : { - "action_id" : 88, + "action_id" : 96, "action_data" : [] }, "priority" : 4 @@ -18121,7 +20712,7 @@ } ], "action_entry" : { - "action_id" : 89, + "action_id" : 97, "action_data" : [] }, "priority" : 5 @@ -18140,7 +20731,7 @@ } ], "action_entry" : { - "action_id" : 90, + "action_id" : 98, "action_data" : [] }, "priority" : 6 @@ -18159,7 +20750,7 @@ } ], "action_entry" : { - "action_id" : 91, + "action_id" : 99, "action_data" : [] }, "priority" : 7 @@ -18178,7 +20769,7 @@ } ], "action_entry" : { - "action_id" : 92, + "action_id" : 100, "action_data" : [] }, "priority" : 8 @@ -18197,7 +20788,7 @@ } ], "action_entry" : { - "action_id" : 93, + "action_id" : 101, "action_data" : [] }, "priority" : 9 @@ -18216,7 +20807,7 @@ } ], "action_entry" : { - "action_id" : 94, + "action_id" : 102, "action_data" : [] }, "priority" : 10 @@ -18235,7 +20826,7 @@ } ], "action_entry" : { - "action_id" : 95, + "action_id" : 103, "action_data" : [] }, "priority" : 11 @@ -18254,7 +20845,7 @@ } ], "action_entry" : { - "action_id" : 96, + "action_id" : 104, "action_data" : [] }, "priority" : 12 @@ -18273,7 +20864,7 @@ } ], "action_entry" : { - "action_id" : 97, + "action_id" : 105, "action_data" : [] }, "priority" : 13 @@ -18292,7 +20883,7 @@ } ], "action_entry" : { - "action_id" : 98, + "action_id" : 106, "action_data" : [] }, "priority" : 14 @@ -18311,7 +20902,7 @@ } ], "action_entry" : { - "action_id" : 99, + "action_id" : 107, "action_data" : [] }, "priority" : 15 @@ -18330,7 +20921,7 @@ } ], "action_entry" : { - "action_id" : 100, + "action_id" : 108, "action_data" : [] }, "priority" : 16 @@ -18339,7 +20930,7 @@ }, { "name" : "tbl_int_transit425", - "id" : 50, + "id" : 56, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 425, @@ -18353,14 +20944,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [118], + "action_ids" : [129], "actions" : ["int_transit425"], - "base_default_next" : "node_93", + "base_default_next" : "node_103", "next_tables" : { - "int_transit425" : "node_93" + "int_transit425" : "node_103" }, "default_entry" : { - "action_id" : 118, + "action_id" : 129, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18368,7 +20959,7 @@ }, { "name" : "tbl_int_transit428", - "id" : 51, + "id" : 57, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 428, @@ -18382,14 +20973,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [117], + "action_ids" : [128], "actions" : ["int_transit428"], - "base_default_next" : "node_95", + "base_default_next" : "node_105", "next_tables" : { - "int_transit428" : "node_95" + "int_transit428" : "node_105" }, "default_entry" : { - "action_id" : 117, + "action_id" : 128, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18397,7 +20988,7 @@ }, { "name" : "tbl_int_transit431", - "id" : 52, + "id" : 58, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 431, @@ -18411,14 +21002,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [119], + "action_ids" : [130], "actions" : ["int_transit431"], - "base_default_next" : "node_97", + "base_default_next" : "node_107", "next_tables" : { - "int_transit431" : "node_97" + "int_transit431" : "node_107" }, "default_entry" : { - "action_id" : 119, + "action_id" : 130, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18426,7 +21017,7 @@ }, { "name" : "tbl_int_transit434", - "id" : 53, + "id" : 59, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 434, @@ -18440,14 +21031,138 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [120], + "action_ids" : [131], "actions" : ["int_transit434"], + "base_default_next" : "tbl_slicing126", + "next_tables" : { + "int_transit434" : "tbl_slicing126" + }, + "default_entry" : { + "action_id" : 131, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing126", + "id" : 60, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [134], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 134, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 61, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 138, + "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" : [114, 115, 72], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], "base_default_next" : null, "next_tables" : { - "int_transit434" : null + "__MISS__" : null, + "__HIT__" : "node_111" }, "default_entry" : { - "action_id" : 120, + "action_id" : 72, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing155", + "id" : 62, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 30, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [132], + "actions" : ["slicing155"], + "base_default_next" : null, + "next_tables" : { + "slicing155" : null + }, + "default_entry" : { + "action_id" : 132, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing159", + "id" : 63, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [133], + "actions" : ["slicing159"], + "base_default_next" : null, + "next_tables" : { + "slicing159" : null + }, + "default_entry" : { + "action_id" : 133, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -18457,11 +21172,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_57", - "id" : 21, + "name" : "node_65", + "id" : 24, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 118, "column" : 33, "source_fragment" : "fabric_metadata" }, @@ -18472,16 +21187,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_59" + "false_next" : "node_67" }, { - "name" : "node_59", - "id" : 22, + "name" : "node_67", + "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -18503,11 +21218,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_61" + "false_next" : "node_69" }, { - "name" : "node_61", - "id" : 23, + "name" : "node_69", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -18525,7 +21240,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] } } }, @@ -18546,11 +21261,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_63" + "false_next" : "node_71" }, { - "name" : "node_63", - "id" : 24, + "name" : "node_71", + "id" : 27, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -18563,7 +21278,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, "right" : { "type" : "hexstr", @@ -18571,12 +21286,12 @@ } } }, - "true_next" : "node_64", + "true_next" : "node_72", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_64", - "id" : 25, + "name" : "node_72", + "id" : 28, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -18598,8 +21313,8 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_68", - "id" : 26, + "name" : "node_76", + "id" : 29, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -18618,11 +21333,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_72" + "false_next" : "node_80" }, { - "name" : "node_70", - "id" : 27, + "name" : "node_78", + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -18644,11 +21359,11 @@ } }, "true_next" : "tbl_next310", - "false_next" : "node_76" + "false_next" : "node_84" }, { - "name" : "node_72", - "id" : 28, + "name" : "node_80", + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -18676,7 +21391,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -18687,11 +21402,11 @@ } }, "true_next" : "tbl_next313", - "false_next" : "node_76" + "false_next" : "node_84" }, { - "name" : "node_74", - "id" : 29, + "name" : "node_82", + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -18713,14 +21428,14 @@ } }, "true_next" : "tbl_next314", - "false_next" : "node_76" + "false_next" : "node_84" }, { - "name" : "node_76", - "id" : 30, + "name" : "node_84", + "id" : 33, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 368, "column" : 12, "source_fragment" : "fabric_md.spgw.skip_spgw" }, @@ -18736,21 +21451,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] } } } } }, - "true_next" : "node_77", - "false_next" : "node_81" + "true_next" : "node_85", + "false_next" : "node_91" }, { - "name" : "node_77", - "id" : 31, + "name" : "node_85", + "id" : 34, "source_info" : { "filename" : "fabric.p4", - "line" : 111, + "line" : 121, "column" : 24, "source_fragment" : "fabric_metadata" }, @@ -18761,19 +21476,42 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] } } }, - "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_79" + "true_next" : "node_86", + "false_next" : "node_89" }, { - "name" : "node_79", - "id" : 32, + "name" : "node_86", + "id" : 35, + "source_info" : { + "filename" : "fabric.p4", + "line" : 121, + "column" : 24, + "source_fragment" : "fabric_metadata" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + } + } + }, + "true_next" : "tbl_spgw_gtpu_encap_qfi", + "false_next" : "tbl_spgw_gtpu_encap" + }, + { + "name" : "node_89", + "id" : 36, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 341, + "line" : 376, "column" : 16, "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr" }, @@ -18789,18 +21527,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr31"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr44"] } } } } }, - "true_next" : "tbl_spgw342", - "false_next" : "node_81" + "true_next" : "tbl_spgw377", + "false_next" : "node_91" }, { - "name" : "node_81", - "id" : 33, + "name" : "node_91", + "id" : 37, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 102, @@ -18875,15 +21613,15 @@ } } }, - "false_next" : null, - "true_next" : "node_82" + "true_next" : "node_92", + "false_next" : "tbl_slicing126" }, { - "name" : "node_82", - "id" : 34, + "name" : "node_92", + "id" : 38, "source_info" : { "filename" : "fabric.p4", - "line" : 117, + "line" : 127, "column" : 36, "source_fragment" : "fabric_metadata" }, @@ -18894,16 +21632,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_source32"] + "value" : ["scalars", "userMetadata._int_meta_source46"] } } }, "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", - "false_next" : "node_84" + "false_next" : "node_94" }, { - "name" : "node_84", - "id" : 35, + "name" : "node_94", + "id" : 39, "source_info" : { "filename" : "include/int/int_main.p4", "line" : 110, @@ -18921,12 +21659,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_act" + "true_next" : "tbl_act", + "false_next" : "tbl_slicing126" }, { - "name" : "node_87", - "id" : 36, + "name" : "node_97", + "id" : 40, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 419, @@ -18945,18 +21683,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._int_meta_transit33"] + "value" : ["scalars", "userMetadata._int_meta_transit47"] } } } } }, "true_next" : "tbl_int_transit420", - "false_next" : "node_89" + "false_next" : "node_99" }, { - "name" : "node_89", - "id" : 37, + "name" : "node_99", + "id" : 41, "expression" : { "type" : "expression", "value" : { @@ -18975,12 +21713,12 @@ } } }, - "false_next" : null, - "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "false_next" : "tbl_slicing126" }, { - "name" : "node_93", - "id" : 38, + "name" : "node_103", + "id" : 42, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 427, @@ -18999,11 +21737,11 @@ } }, "true_next" : "tbl_int_transit428", - "false_next" : "node_95" + "false_next" : "node_105" }, { - "name" : "node_95", - "id" : 39, + "name" : "node_105", + "id" : 43, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 430, @@ -19022,11 +21760,11 @@ } }, "true_next" : "tbl_int_transit431", - "false_next" : "node_97" + "false_next" : "node_107" }, { - "name" : "node_97", - "id" : 40, + "name" : "node_107", + "id" : 44, "source_info" : { "filename" : "include/int/int_transit.p4", "line" : 433, @@ -19044,8 +21782,54 @@ } } }, + "true_next" : "tbl_int_transit434", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_111", + "id" : 45, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 154, + "column" : 16, + "source_fragment" : "hdr.gtpu_ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu_ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_slicing155", + "false_next" : "node_113" + }, + { + "name" : "node_113", + "id" : 46, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, "false_next" : null, - "true_next" : "tbl_int_transit434" + "true_next" : "tbl_slicing159" } ] } @@ -19082,7 +21866,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt index 778efbba0d9..c758d1b11bb 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -414,6 +414,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 36113154 @@ -486,6 +572,18 @@ tables { bitwidth: 32 match_type: EXACT } + match_fields { + id: 3 + name: "has_qfi" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "qfi" + bitwidth: 6 + match_type: EXACT + } action_refs { id: 18504550 } @@ -621,6 +719,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -873,6 +997,49 @@ actions { bitwidth: 16 } } +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: 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: 18186268 @@ -884,6 +1051,11 @@ actions { name: "src_iface" bitwidth: 8 } + params { + id: 2 + name: "slice_id" + bitwidth: 4 + } } actions { preamble { @@ -913,6 +1085,11 @@ actions { name: "needs_gtpu_decap" bitwidth: 1 } + params { + id: 4 + name: "tc" + bitwidth: 2 + } } actions { preamble { @@ -937,8 +1114,18 @@ actions { } params { id: 4 - name: "qid" - bitwidth: 5 + name: "needs_qfi_push" + bitwidth: 1 + } + params { + id: 5 + name: "qfi" + bitwidth: 6 + } + params { + id: 6 + name: "tc" + bitwidth: 2 } } actions { @@ -1092,6 +1279,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -1268,6 +1469,28 @@ direct_counters { } 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: 322470063 @@ -1290,6 +1513,17 @@ direct_counters { } direct_table_id: 49262446 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index 6eedcc00fa0..bfb06d66244 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -7,6 +7,7 @@ ["tmp_0", 1, false], ["tmp_2", 3, false], ["tmp_4", 8, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -14,45 +15,56 @@ ["tmp_7", 64, false], ["tmp_8", 32, false], ["tmp_9", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], - ["userMetadata._ip_eth_type0", 16, false], - ["userMetadata._vlan_id1", 12, false], - ["userMetadata._vlan_pri2", 3, false], - ["userMetadata._vlan_cfi3", 1, false], - ["userMetadata._mpls_label4", 20, false], - ["userMetadata._mpls_ttl5", 8, false], - ["userMetadata._skip_forwarding6", 1, false], - ["userMetadata._skip_next7", 1, false], - ["userMetadata._fwd_type8", 3, false], - ["userMetadata._next_id9", 32, false], - ["userMetadata._is_multicast10", 1, false], - ["userMetadata._is_controller_packet_out11", 1, false], - ["userMetadata._ip_proto12", 8, false], - ["userMetadata._l4_sport13", 16, false], - ["userMetadata._l4_dport14", 16, false], - ["userMetadata._ipv4_src_addr15", 32, false], - ["userMetadata._ipv4_dst_addr16", 32, false], - ["userMetadata._inner_l4_sport17", 16, false], - ["userMetadata._inner_l4_dport18", 16, false], - ["userMetadata._spgw_ipv4_len19", 16, false], - ["userMetadata._spgw_teid20", 32, false], - ["userMetadata._spgw_tunnel_src_port21", 16, false], - ["userMetadata._spgw_tunnel_src_addr22", 32, false], - ["userMetadata._spgw_tunnel_dst_addr23", 32, false], - ["userMetadata._spgw_ctr_id24", 32, false], - ["userMetadata._spgw_far_id25", 32, false], - ["userMetadata._spgw_src_iface26", 8, false], - ["userMetadata._spgw_skip_spgw27", 1, false], - ["userMetadata._spgw_notify_spgwc28", 1, false], - ["userMetadata._spgw_needs_gtpu_encap29", 1, false], - ["userMetadata._spgw_needs_gtpu_decap30", 1, false], - ["userMetadata._spgw_skip_egress_pdr_ctr31", 1, false], - ["userMetadata._port_type32", 2, false], - ["_padding_0", 6, false] + ["tmp_10", 32, false], + ["dscp_rewriter_tmp_dscp", 6, false], + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._mpls_label12", 20, false], + ["userMetadata._mpls_ttl13", 8, false], + ["userMetadata._skip_forwarding14", 1, false], + ["userMetadata._skip_next15", 1, false], + ["userMetadata._fwd_type16", 3, false], + ["userMetadata._next_id17", 32, false], + ["userMetadata._is_multicast18", 1, false], + ["userMetadata._is_controller_packet_out19", 1, false], + ["userMetadata._ip_proto20", 8, false], + ["userMetadata._l4_sport21", 16, false], + ["userMetadata._l4_dport22", 16, false], + ["userMetadata._ipv4_src_addr23", 32, false], + ["userMetadata._ipv4_dst_addr24", 32, false], + ["userMetadata._slice_id25", 4, false], + ["userMetadata._packet_color26", 2, false], + ["userMetadata._tc27", 2, false], + ["userMetadata._dscp28", 6, false], + ["userMetadata._inner_l4_sport29", 16, false], + ["userMetadata._inner_l4_dport30", 16, false], + ["userMetadata._spgw_ipv4_len31", 16, false], + ["userMetadata._spgw_teid32", 32, false], + ["userMetadata._spgw_tunnel_src_port33", 16, false], + ["userMetadata._spgw_tunnel_src_addr34", 32, false], + ["userMetadata._spgw_tunnel_dst_addr35", 32, false], + ["userMetadata._spgw_ctr_id36", 32, false], + ["userMetadata._spgw_far_id37", 32, false], + ["userMetadata._spgw_src_iface38", 8, false], + ["userMetadata._spgw_qfi39", 6, false], + ["userMetadata._spgw_skip_spgw40", 1, false], + ["userMetadata._spgw_notify_spgwc41", 1, false], + ["userMetadata._spgw_needs_gtpu_encap42", 1, false], + ["userMetadata._spgw_needs_gtpu_decap43", 1, false], + ["userMetadata._spgw_skip_egress_pdr_ctr44", 1, false], + ["userMetadata._spgw_needs_qfi_push45", 1, false], + ["userMetadata._port_type46", 2, false], + ["_padding_0", 2, false] ] }, { @@ -167,8 +179,30 @@ ] }, { - "name" : "tcp_t", + "name" : "gtpu_options_t", "id" : 10, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 11, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "tcp_t", + "id" : 12, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -185,7 +219,7 @@ }, { "name" : "icmp_t", - "id" : 11, + "id" : 13, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -197,7 +231,7 @@ }, { "name" : "packet_in_header_t", - "id" : 12, + "id" : 14, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -290,78 +324,106 @@ "pi_omit" : true }, { - "name" : "gtpu", + "name" : "outer_gtpu_options", "id" : 12, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "outer_gtpu_ext_psc", + "id" : 13, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu", + "id" : 14, "header_type" : "gtpu_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "gtpu_options", + "id" : 15, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 16, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "inner_ipv4", - "id" : 13, + "id" : 17, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 14, + "id" : 18, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 15, + "id" : 19, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 16, + "id" : 20, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 17, + "id" : 21, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 18, + "id" : 22, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 19, + "id" : 23, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 20, + "id" : 24, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 21, + "id" : 25, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 22, + "id" : 26, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true @@ -377,7 +439,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -712,7 +774,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -898,7 +960,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "field", @@ -911,7 +973,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] }, { "type" : "field", @@ -972,7 +1034,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -985,7 +1047,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -998,7 +1060,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -1011,7 +1073,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -1071,7 +1133,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1084,7 +1146,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1121,7 +1183,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1134,7 +1196,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1722,7 +1784,141 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "field", + "value" : ["gtpu_ext_psc", "qfi"] + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 16, + "parser_ops" : [ { "parameters" : [ { @@ -1768,7 +1964,7 @@ }, { "name" : "parse_inner_udp", - "id" : 14, + "id" : 17, "parser_ops" : [ { "parameters" : [ @@ -1783,7 +1979,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] }, { "type" : "field", @@ -1796,7 +1992,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] }, { "type" : "field", @@ -1818,7 +2014,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 15, + "id" : 18, "parser_ops" : [ { "parameters" : [ @@ -1833,7 +2029,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] }, { "type" : "field", @@ -1846,7 +2042,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] }, { "type" : "field", @@ -1868,7 +2064,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -1900,15 +2096,30 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "ipv4", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], + "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "gtpu_ipv4", "gtpu_udp", "outer_gtpu", "outer_gtpu_options", "outer_gtpu_ext_psc", "ipv4", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], "primitives" : [] } ], - "meter_arrays" : [], + "meter_arrays" : [ + { + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 0, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" + } + ], "counter_arrays" : [ { "name" : "FabricIngress.filtering.ingress_port_vlan_counter", @@ -1989,7 +2200,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -2031,8 +2242,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 10, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 12, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -2044,7 +2279,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 11, + "id" : 13, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -2056,10 +2291,10 @@ }, { "name" : "FabricIngress.spgw.pdr_counter", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 108, + "line" : 110, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2068,7 +2303,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 13, + "id" : 15, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2080,10 +2315,10 @@ }, { "name" : "FabricEgress.spgw.pdr_counter", - "id" : 14, + "id" : 16, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 295, + "line" : 307, "column" : 53, "source_fragment" : "pdr_counter" }, @@ -2159,7 +2394,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, @@ -2349,7 +2584,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -2378,7 +2613,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2407,7 +2642,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type32"] + "value" : ["scalars", "userMetadata._port_type46"] }, { "type" : "hexstr", @@ -2416,7 +2651,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -2438,7 +2673,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type32"] + "value" : ["scalars", "userMetadata._port_type46"] }, { "type" : "runtime_data", @@ -2473,7 +2708,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2492,7 +2727,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._port_type32"] + "value" : ["scalars", "userMetadata._port_type46"] }, { "type" : "runtime_data", @@ -2523,7 +2758,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, { "type" : "runtime_data", @@ -2554,7 +2789,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2585,7 +2820,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "hexstr", @@ -2604,7 +2839,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2635,7 +2870,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2672,7 +2907,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "runtime_data", @@ -2703,7 +2938,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2734,7 +2969,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2743,8 +2978,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 32, + "line" : 32, + "column" : 26, "source_fragment" : "= next_id; ..." } } @@ -2769,7 +3004,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -2779,7 +3014,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2798,8 +3033,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 34, + "line" : 39, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -2829,7 +3064,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -2851,7 +3086,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -2861,7 +3096,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2880,8 +3115,8 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 34, + "line" : 51, + "column" : 28, "source_fragment" : "= true; ..." } } @@ -2939,7 +3174,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._next_id9"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -3097,7 +3332,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] }, { "type" : "expression", @@ -3124,27 +3359,36 @@ ] }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 30, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._slice_id25"] }, { - "type" : "hexstr", - "value" : "0x0800" + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 132, - "column" : 31, - "source_fragment" : "0x0800; ..." + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." } }, { @@ -3152,26 +3396,195 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._tc27"] }, { - "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 39, - "column" : 27, - "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." } - }, - { - "op" : "assign", - "parameters" : [ - { + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 31, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x0f" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 32, + "runtime_data" : [ + { + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 33, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", + "id" : 34, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_eth_type8"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 149, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_proto20"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 39, + "column" : 27, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3190,7 +3603,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3209,11 +3622,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3228,11 +3641,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3291,6 +3704,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -3301,7 +3744,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -3320,7 +3763,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -3335,7 +3778,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -3344,7 +3787,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", - "id" : 31, + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3352,7 +3795,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3361,7 +3804,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3371,7 +3814,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3390,7 +3833,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3409,7 +3852,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3428,11 +3871,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3447,11 +3890,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3510,6 +3953,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -3524,7 +3997,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -3539,7 +4012,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -3548,7 +4021,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", - "id" : 32, + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3556,7 +4029,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3565,7 +4038,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3575,7 +4048,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3594,7 +4067,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3613,7 +4086,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3632,11 +4105,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3651,11 +4124,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3714,6 +4187,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -3724,7 +4227,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 67, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -3743,7 +4246,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 68, "column" : 8, "source_fragment" : "hdr.icmp = hdr.inner_icmp" } @@ -3758,7 +4261,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 67, + "line" : 69, "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } @@ -3767,7 +4270,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown", - "id" : 33, + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3775,7 +4278,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3784,7 +4287,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3794,7 +4297,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3813,7 +4316,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -3832,7 +4335,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -3851,11 +4354,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -3870,11 +4373,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -3938,29 +4441,59 @@ "parameters" : [ { "type" : "header", - "value" : "udp" + "value" : "gtpu_options" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 48, "column" : 8, - "source_fragment" : "hdr.udp.setInvalid()" + "source_fragment" : "hdr.gtpu_options.setInvalid()" } - } - ] - }, - { - "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", - "id" : 34, - "runtime_data" : [], + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp", + "id" : 38, + "runtime_data" : [], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -3969,7 +4502,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3979,7 +4512,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -3998,7 +4531,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4017,7 +4550,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4036,11 +4569,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4055,11 +4588,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4118,6 +4651,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4128,7 +4691,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 52, + "line" : 54, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4147,7 +4710,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 53, + "line" : 55, "column" : 8, "source_fragment" : "hdr.tcp = hdr.inner_tcp" } @@ -4162,7 +4725,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 54, + "line" : 56, "column" : 8, "source_fragment" : "hdr.inner_tcp.setInvalid()" } @@ -4171,7 +4734,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp", - "id" : 35, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -4179,7 +4742,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4188,7 +4751,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4198,7 +4761,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4217,7 +4780,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4236,7 +4799,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4255,11 +4818,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4274,11 +4837,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4337,6 +4900,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "assign_header", "parameters" : [ @@ -4351,7 +4944,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 59, + "line" : 61, "column" : 8, "source_fragment" : "hdr.udp = hdr.inner_udp" } @@ -4366,7 +4959,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 60, + "line" : 62, "column" : 8, "source_fragment" : "hdr.inner_udp.setInvalid()" } @@ -4375,7 +4968,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", - "id" : 36, + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -4383,7 +4976,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4392,7 +4985,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4402,7 +4995,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4421,7 +5014,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4440,7 +5033,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4459,11 +5052,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4478,11 +5071,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4541,6 +5134,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4551,7 +5174,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 65, + "line" : 67, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4570,7 +5193,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 66, + "line" : 68, "column" : 8, "source_fragment" : "hdr.icmp = hdr.inner_icmp" } @@ -4585,7 +5208,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 67, + "line" : 69, "column" : 8, "source_fragment" : "hdr.inner_icmp.setInvalid()" } @@ -4594,7 +5217,7 @@ }, { "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown", - "id" : 37, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -4602,7 +5225,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -4611,7 +5234,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 149, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4621,7 +5244,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -4640,7 +5263,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -4659,7 +5282,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -4678,11 +5301,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_sport17"] + "value" : ["scalars", "userMetadata._inner_l4_sport29"] } ], "source_info" : { @@ -4697,11 +5320,11 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._inner_l4_dport18"] + "value" : ["scalars", "userMetadata._inner_l4_dport30"] } ], "source_info" : { @@ -4760,6 +5383,36 @@ "source_fragment" : "hdr.gtpu.setInvalid()" } }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, { "op" : "remove_header", "parameters" : [ @@ -4770,7 +5423,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 72, + "line" : 74, "column" : 8, "source_fragment" : "hdr.udp.setInvalid()" } @@ -4779,11 +5432,15 @@ }, { "name" : "FabricIngress.spgw.load_iface", - "id" : 38, + "id" : 42, "runtime_data" : [ { "name" : "src_iface", "bitwidth" : 8 + }, + { + "name" : "slice_id", + "bitwidth" : 4 } ], "primitives" : [ @@ -4792,7 +5449,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, { "type" : "runtime_data", @@ -4801,7 +5458,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 120, + "line" : 122, "column" : 33, "source_fragment" : "= src_iface; ..." } @@ -4811,7 +5468,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] }, { "type" : "expression", @@ -4830,16 +5487,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 121, + "line" : 123, "column" : 33, "source_fragment" : "= false; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 124, + "column" : 27, + "source_fragment" : "= slice_id; ..." + } } ] }, { "name" : "FabricIngress.spgw.iface_miss", - "id" : 39, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -4847,7 +5523,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, { "type" : "hexstr", @@ -4856,7 +5532,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 110, + "line" : 127, "column" : 44, "source_fragment" : "8w0; ..." } @@ -4866,7 +5542,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] }, { "type" : "expression", @@ -4885,7 +5561,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 125, + "line" : 128, "column" : 33, "source_fragment" : "= true; ..." } @@ -4894,7 +5570,7 @@ }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 40, + "id" : 44, "runtime_data" : [ { "name" : "ctr_id", @@ -4907,6 +5583,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -4915,7 +5595,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -4924,7 +5604,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -4934,7 +5614,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -4943,7 +5623,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -4953,7 +5633,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -4982,16 +5662,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr", - "id" : 41, + "id" : 45, "runtime_data" : [ { "name" : "ctr_id", @@ -5004,6 +5703,10 @@ { "name" : "needs_gtpu_decap", "bitwidth" : 1 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5012,7 +5715,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5021,7 +5724,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5031,7 +5734,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5040,7 +5743,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5050,7 +5753,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5079,16 +5782,35 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 42, + "id" : 46, "runtime_data" : [ { "name" : "ctr_id", @@ -5103,8 +5825,16 @@ "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5113,7 +5843,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5122,7 +5852,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5132,7 +5862,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5141,7 +5871,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5151,7 +5881,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5180,32 +5910,117 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } - } - ] - }, - { - "name" : "FabricIngress.spgw.load_pdr_qos", - "id" : 43, - "runtime_data" : [ - { - "name" : "ctr_id", - "bitwidth" : 32 }, { - "name" : "far_id", - "bitwidth" : 32 - }, + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } + } + ] + }, + { + "name" : "FabricIngress.spgw.load_pdr_qos", + "id" : 47, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 32 + }, + { + "name" : "far_id", + "bitwidth" : 32 + }, { "name" : "needs_gtpu_decap", "bitwidth" : 1 }, { - "name" : "qid", - "bitwidth" : 5 + "name" : "needs_qfi_push", + "bitwidth" : 1 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "tc", + "bitwidth" : 2 } ], "primitives" : [ @@ -5214,7 +6029,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] }, { "type" : "runtime_data", @@ -5223,7 +6038,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 150, + "line" : 153, "column" : 30, "source_fragment" : "= ctr_id; ..." } @@ -5233,7 +6048,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_far_id25"] + "value" : ["scalars", "userMetadata._spgw_far_id37"] }, { "type" : "runtime_data", @@ -5242,7 +6057,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 151, + "line" : 154, "column" : 30, "source_fragment" : "= far_id; ..." } @@ -5252,7 +6067,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] }, { "type" : "expression", @@ -5281,16 +6096,93 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 152, + "line" : 155, "column" : 40, "source_fragment" : "= (bool)needs_gtpu_decap; ..." } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 5 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 156, + "column" : 21, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 167, + "column" : 27, + "source_fragment" : "= qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "local", + "value" : 3 + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 168, + "column" : 38, + "source_fragment" : "= (bool)needs_qfi_push; ..." + } } ] }, { "name" : "FabricIngress.spgw.load_normal_far", - "id" : 44, + "id" : 48, "runtime_data" : [ { "name" : "drop", @@ -5307,7 +6199,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -5336,7 +6228,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 195, + "line" : 207, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -5346,7 +6238,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -5375,7 +6267,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 196, + "line" : 208, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -5385,7 +6277,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -5414,7 +6306,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 197, + "line" : 209, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -5423,7 +6315,7 @@ }, { "name" : "FabricIngress.spgw.load_tunnel_far", - "id" : 45, + "id" : 49, "runtime_data" : [ { "name" : "drop", @@ -5456,7 +6348,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -5485,7 +6377,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -5495,7 +6387,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -5524,7 +6416,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -5534,7 +6426,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -5563,7 +6455,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -5573,7 +6465,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] }, { "type" : "expression", @@ -5592,7 +6484,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -5602,7 +6494,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "value" : ["scalars", "userMetadata._spgw_teid32"] }, { "type" : "runtime_data", @@ -5611,7 +6503,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -5621,7 +6513,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] }, { "type" : "runtime_data", @@ -5630,7 +6522,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -5640,7 +6532,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] }, { "type" : "runtime_data", @@ -5649,7 +6541,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -5659,7 +6551,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] }, { "type" : "runtime_data", @@ -5668,7 +6560,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -5678,7 +6570,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "runtime_data", @@ -5687,7 +6579,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -5697,7 +6589,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "runtime_data", @@ -5706,7 +6598,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -5716,7 +6608,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "runtime_data", @@ -5725,7 +6617,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -5735,7 +6627,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "hexstr", @@ -5744,7 +6636,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -5753,7 +6645,7 @@ }, { "name" : "FabricIngress.spgw.load_dbuf_far", - "id" : 46, + "id" : 50, "runtime_data" : [ { "name" : "drop", @@ -5786,7 +6678,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -5815,7 +6707,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 206, + "line" : 218, "column" : 34, "source_fragment" : "= (bool)drop; ..." } @@ -5825,7 +6717,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -5854,7 +6746,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 207, + "line" : 219, "column" : 28, "source_fragment" : "= (bool)drop; ..." } @@ -5864,7 +6756,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_notify_spgwc28"] + "value" : ["scalars", "userMetadata._spgw_notify_spgwc41"] }, { "type" : "expression", @@ -5893,7 +6785,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 208, + "line" : 220, "column" : 36, "source_fragment" : "= (bool)notify_cp; ..." } @@ -5903,7 +6795,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] }, { "type" : "expression", @@ -5922,7 +6814,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 210, + "line" : 222, "column" : 40, "source_fragment" : "= true; ..." } @@ -5932,7 +6824,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "value" : ["scalars", "userMetadata._spgw_teid32"] }, { "type" : "runtime_data", @@ -5941,7 +6833,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 211, + "line" : 223, "column" : 28, "source_fragment" : "= teid; ..." } @@ -5951,7 +6843,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] }, { "type" : "runtime_data", @@ -5960,7 +6852,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 212, + "line" : 224, "column" : 39, "source_fragment" : "= tunnel_src_port; ..." } @@ -5970,7 +6862,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] }, { "type" : "runtime_data", @@ -5979,7 +6871,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 213, + "line" : 225, "column" : 39, "source_fragment" : "= tunnel_src_addr; ..." } @@ -5989,7 +6881,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] }, { "type" : "runtime_data", @@ -5998,7 +6890,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 214, + "line" : 226, "column" : 39, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6008,7 +6900,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "runtime_data", @@ -6017,7 +6909,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 216, + "line" : 228, "column" : 32, "source_fragment" : "= tunnel_src_addr; ..." } @@ -6027,7 +6919,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "runtime_data", @@ -6036,7 +6928,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 217, + "line" : 229, "column" : 32, "source_fragment" : "= tunnel_dst_addr; ..." } @@ -6046,7 +6938,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "runtime_data", @@ -6055,7 +6947,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 218, + "line" : 230, "column" : 27, "source_fragment" : "= tunnel_src_port; ..." } @@ -6065,7 +6957,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "hexstr", @@ -6074,7 +6966,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 219, + "line" : 231, "column" : 27, "source_fragment" : "= 2152; ..." } @@ -6084,7 +6976,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr31"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr44"] }, { "type" : "expression", @@ -6103,7 +6995,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 230, + "line" : 242, "column" : 43, "source_fragment" : "= true; ..." } @@ -6111,8 +7003,8 @@ ] }, { - "name" : "packetio25", - "id" : 47, + "name" : "lookup_md_init37", + "id" : 51, "runtime_data" : [], "primitives" : [ { @@ -6120,131 +7012,134 @@ "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["packet_out", "egress_port"] + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_out" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] + }, + { + "type" : "field", + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } - }, + } + ] + }, + { + "name" : "lookup_md_init40", + "id" : 52, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } + "type" : "field", + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 53, - "source_fragment" : "= true; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } }, { - "op" : "exit", - "parameters" : [], + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] + }, + { + "type" : "field", + "value" : ["inner_udp", "dport"] + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "spgw265", - "id" : 48, + "name" : "lookup_md_init43", + "id" : 53, "runtime_data" : [], "primitives" : [ { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricIngress.spgw.pdr_counter" + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } - } - ] - }, - { - "name" : "spgw282", - "id" : 49, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["ipv4", "total_len"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "= hdr.ipv4.total_len; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "filtering113", - "id" : 50, + "name" : "lookup_md_init32", + "id" : 54, "runtime_data" : [], "primitives" : [ { @@ -6252,18 +7147,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 36, - "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -6271,18 +7176,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["inner_ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.pri; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -6290,51 +7195,44 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 37, - "source_fragment" : "= hdr.vlan_tag.cfi; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 51, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 37, - "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl102", - "id" : 52, + "name" : "lookup_md_init52", + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -6342,18 +7240,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -6361,25 +7259,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." } } ] }, { - "name" : "acl105", - "id" : 53, + "name" : "lookup_md_init55", + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -6387,18 +7285,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_udp", "sport"] + "value" : ["udp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -6406,25 +7304,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_udp", "dport"] + "value" : ["udp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl98", - "id" : 54, + "name" : "lookup_md_init58", + "id" : 57, "runtime_data" : [], "primitives" : [ { @@ -6432,37 +7330,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] - }, - { - "type" : "field", - "value" : ["inner_ipv4", "src_addr"] - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_ipv4", "dst_addr"] + "value" : ["icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." } }, { @@ -6470,25 +7349,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_ipv4", "protocol"] + "value" : ["icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." } } ] }, { - "name" : "acl113", - "id" : 55, + "name" : "lookup_md_init47", + "id" : 58, "runtime_data" : [], "primitives" : [ { @@ -6496,18 +7375,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["tcp", "sport"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." } }, { @@ -6515,44 +7404,37 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", - "value" : ["tcp", "dport"] + "value" : ["ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } - } - ] - }, - { - "name" : "acl116", - "id" : 56, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", - "value" : ["udp", "sport"] + "value" : ["ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -6560,25 +7442,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", - "value" : ["udp", "dport"] + "value" : ["ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "acl109", - "id" : 57, + "name" : "lookup_md_init23", + "id" : 59, "runtime_data" : [], "primitives" : [ { @@ -6586,18 +7468,28 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["ipv4", "src_addr"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." } }, { @@ -6605,18 +7497,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { - "type" : "field", - "value" : ["ipv4", "dst_addr"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -6624,44 +7516,56 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } - } - ] - }, - { - "name" : "acl27", - "id" : 58, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -6669,18 +7573,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", - "value" : "0x00000000" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/acl.p4", + "filename" : "include/control/lookup_md_init.p4", "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -6688,7 +7592,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "hexstr", @@ -6696,10 +7600,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", + "filename" : "include/control/lookup_md_init.p4", "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "column" : 25, + "source_fragment" : "= 0; ..." } }, { @@ -6707,18 +7611,143 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/acl.p4", + "filename" : "include/control/lookup_md_init.p4", "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" + "column" : 25, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "packetio25", + "id" : 60, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "field", + "value" : ["packet_out", "egress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_out" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 26, + "column" : 12, + "source_fragment" : "hdr.packet_out.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 29, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "filtering113", + "id" : 61, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." } }, { @@ -6726,25 +7755,103 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." + } + } + ] + }, + { + "name" : "filtering129", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] }, { "type" : "hexstr", - "value" : "0x0000" + "value" : "0x41" } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." + } + } + ] + }, + { + "name" : "spgw277", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.spgw.pdr_counter" + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + } + } + ] + }, + { + "name" : "spgw294", + "id" : 64, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "= hdr.ipv4.total_len; ..." } } ] }, { "name" : "port_counter31", - "id" : 59, + "id" : 65, "runtime_data" : [], "primitives" : [ { @@ -6802,7 +7909,7 @@ }, { "name" : "port_counter34", - "id" : 60, + "id" : 66, "runtime_data" : [], "primitives" : [ { @@ -6859,19 +7966,229 @@ ] }, { - "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 61, + "name" : "slicing114", + "id" : 67, "runtime_data" : [], "primitives" : [ { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "mpls" - } - ], - "source_info" : { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "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" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color26"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + }, + { + "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._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." + } + } + ] + }, + { + "name" : "nop", + "id" : 68, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { "filename" : "include/control/next.p4", "line" : 204, "column" : 8, @@ -6887,7 +8204,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_eth_type0"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] } ], "source_info" : { @@ -6901,7 +8218,7 @@ }, { "name" : "FabricEgress.egress_next.set_mpls", - "id" : 62, + "id" : 70, "runtime_data" : [], "primitives" : [ { @@ -6928,7 +8245,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] } ], "source_info" : { @@ -6985,7 +8302,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_ttl5"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] } ], "source_info" : { @@ -7009,7 +8326,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 130, + "line" : 147, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -7018,7 +8335,7 @@ }, { "name" : "FabricEgress.egress_next.push_vlan", - "id" : 63, + "id" : 71, "runtime_data" : [], "primitives" : [ { @@ -7045,7 +8362,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_cfi3"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] } ], "source_info" : { @@ -7064,7 +8381,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_pri2"] + "value" : ["scalars", "userMetadata._vlan_pri10"] } ], "source_info" : { @@ -7088,7 +8405,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 129, + "line" : 146, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -7102,7 +8419,7 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._vlan_id1"] + "value" : ["scalars", "userMetadata._vlan_id9"] } ], "source_info" : { @@ -7116,7 +8433,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 64, + "id" : 72, "runtime_data" : [], "primitives" : [ { @@ -7138,7 +8455,7 @@ }, { "name" : "FabricEgress.egress_next.drop", - "id" : 65, + "id" : 73, "runtime_data" : [], "primitives" : [ { @@ -7158,9 +8475,41 @@ } ] }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 74, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 75, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 135, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, { "name" : "FabricEgress.spgw.gtpu_encap", - "id" : 66, + "id" : 76, "runtime_data" : [], "primitives" : [ { @@ -7173,7 +8522,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 300, + "line" : 311, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.setValid()" } @@ -7192,7 +8541,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 301, + "line" : 312, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.version = 4" } @@ -7211,7 +8560,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 147, + "line" : 164, "column" : 28, "source_fragment" : "5; ..." } @@ -7230,7 +8579,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 303, + "line" : 314, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } @@ -7249,7 +8598,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 304, + "line" : 315, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } @@ -7291,7 +8640,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 305, + "line" : 316, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } @@ -7310,7 +8659,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 307, + "line" : 318, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } @@ -7329,7 +8678,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 308, + "line" : 319, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } @@ -7348,7 +8697,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 309, + "line" : 320, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } @@ -7367,7 +8716,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 160, + "line" : 177, "column" : 32, "source_fragment" : "64; ..." } @@ -7386,7 +8735,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 144, + "line" : 161, "column" : 25, "source_fragment" : "17; ..." } @@ -7400,12 +8749,12 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr22"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 312, + "line" : 323, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." } @@ -7419,12 +8768,12 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr23"] + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 313, + "line" : 324, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." } @@ -7443,7 +8792,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 314, + "line" : 325, "column" : 8, "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" } @@ -7458,7 +8807,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 316, + "line" : 327, "column" : 8, "source_fragment" : "hdr.gtpu_udp.setValid()" } @@ -7472,12 +8821,12 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_tunnel_src_port21"] + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 317, + "line" : 328, "column" : 8, "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." } @@ -7496,7 +8845,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 318, + "line" : 329, "column" : 8, "source_fragment" : "hdr.gtpu_udp.dport = 2152" } @@ -7520,7 +8869,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] }, "right" : { "type" : "hexstr", @@ -7538,7 +8887,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 319, + "line" : 330, "column" : 8, "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." } @@ -7557,7 +8906,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 321, + "line" : 332, "column" : 8, "source_fragment" : "hdr.gtpu_udp.checksum = 0" } @@ -7572,7 +8921,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 324, + "line" : 334, "column" : 8, "source_fragment" : "hdr.outer_gtpu.setValid()" } @@ -7591,7 +8940,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 325, + "line" : 335, "column" : 8, "source_fragment" : "hdr.outer_gtpu.version = 0x01" } @@ -7610,7 +8959,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 326, + "line" : 336, "column" : 8, "source_fragment" : "hdr.outer_gtpu.pt = 0x01" } @@ -7629,7 +8978,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 327, + "line" : 337, "column" : 8, "source_fragment" : "hdr.outer_gtpu.spare = 0" } @@ -7648,7 +8997,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 328, + "line" : 338, "column" : 8, "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" } @@ -7667,7 +9016,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 329, + "line" : 339, "column" : 8, "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" } @@ -7686,7 +9035,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 330, + "line" : 340, "column" : 8, "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" } @@ -7705,7 +9054,7 @@ ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 331, + "line" : 341, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" } @@ -7719,12 +9068,12 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ipv4_len19"] + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 332, + "line" : 342, "column" : 8, "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." } @@ -7738,12 +9087,12 @@ }, { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_teid20"] + "value" : ["scalars", "userMetadata._spgw_teid32"] } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 333, + "line" : 343, "column" : 8, "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." } @@ -7751,40 +9100,42 @@ ] }, { - "name" : "packetio41", - "id" : 67, + "name" : "FabricEgress.spgw.gtpu_encap_qfi", + "id" : 77, "runtime_data" : [], "primitives" : [ { - "op" : "exit", - "parameters" : [], + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 41, - "column" : 12, - "source_fragment" : "exit" + "filename" : "include/control/spgw.p4", + "line" : 311, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.setValid()" } - } - ] - }, - { - "name" : "packetio44", - "id" : 68, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_in" + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 44, - "column" : 12, - "source_fragment" : "hdr.packet_in.setValid()" + "filename" : "include/control/spgw.p4", + "line" : 312, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.version = 4" } }, { @@ -7792,87 +9143,64 @@ "parameters" : [ { "type" : "field", - "value" : ["packet_in", "ingress_port"] + "value" : ["gtpu_ipv4", "ihl"] }, { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "type" : "hexstr", + "value" : "0x05" } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 45, - "column" : 12, - "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + "filename" : "include/control/../define.p4", + "line" : 164, + "column" : 28, + "source_fragment" : "5; ..." } }, { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 47, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "next283", - "id" : 69, - "runtime_data" : [], - "primitives" : [ - { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 283, - "column" : 12, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 314, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dscp = 0" } - } - ] - }, - { - "name" : "next310", - "id" : 70, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 310, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 315, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.ecn = 0" } - } - ] - }, - { - "name" : "next309", - "id" : 71, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["gtpu_ipv4", "total_len"] }, { "type" : "expression", @@ -7886,149 +9214,1110 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["ipv4", "total_len"] }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0x0024" } } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0xffff" } } } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 309, - "column" : 12, - "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 316, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." } - } - ] - }, - { - "name" : "next314", - "id" : 72, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 314, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/spgw.p4", + "line" : 318, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.identification = 0x1513" } - } - ] - }, - { - "name" : "next313", - "id" : 73, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "ttl"] + "value" : ["gtpu_ipv4", "flags"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 313, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + "filename" : "include/control/spgw.p4", + "line" : 319, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.flags = 0" } - } - ] - }, - { - "name" : "spgw342", - "id" : 74, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "count", + "op" : "assign", "parameters" : [ { - "type" : "counter_array", - "value" : "FabricEgress.spgw.pdr_counter" + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_ctr_id24"] + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "line" : 320, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.frag_offset = 0" } - } - ] - } - ], - "pipelines" : [ - { - "name" : "ingress", - "id" : 0, - "source_info" : { - "filename" : "fabric.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "FabricIngress" - }, - "init_table" : "node_2", - "tables" : [ + }, { - "name" : "tbl_packetio25", - "id" : 0, + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 42, - "source_fragment" : "= hdr.packet_out.egress_port; ..." + "filename" : "include/control/../define.p4", + "line" : 177, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 161, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_addr34"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 323, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.src_addr = fabric_md.spgw.tunnel_src_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_dst_addr35"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 324, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.dst_addr = fabric_md.spgw.tunnel_dst_addr; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 325, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 327, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "sport"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_tunnel_src_port33"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 328, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.sport = fabric_md.spgw.tunnel_src_port; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 329, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.dport = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 330, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 332, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 335, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 336, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 337, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 338, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 339, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 340, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 341, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 342, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_teid32"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 343, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.teid = fabric_md.spgw.teid; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x002c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 349, + "column" : 8, + "source_fragment" : "hdr.gtpu_ipv4.total_len = hdr.ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0018" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 352, + "column" : 8, + "source_fragment" : "hdr.gtpu_udp.len = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "msglen"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ipv4_len31"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 355, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.msglen = fabric_md.spgw.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 357, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu.ex_flag = 1" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_options" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 358, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_options", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 359, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_options.next_ext = 0x85" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "outer_gtpu_ext_psc" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 360, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 88, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 362, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.len = 8w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "qfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_qfi39"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 363, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.qfi = fabric_md.spgw.qfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["outer_gtpu_ext_psc", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 364, + "column" : 8, + "source_fragment" : "hdr.outer_gtpu_ext_psc.next_ext = 0x0" + } + } + ] + }, + { + "name" : "packetio41", + "id" : 78, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio44", + "id" : 79, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 45, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 47, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "next283", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 283, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next310", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 310, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next309", + "id" : 82, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 309, + "column" : 12, + "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + } + } + ] + }, + { + "name" : "next314", + "id" : 83, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 314, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next313", + "id" : 84, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 313, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "spgw377", + "id" : 85, + "runtime_data" : [], + "primitives" : [ + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricEgress.spgw.pdr_counter" + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_ctr_id36"] + } + ], + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 377, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + } + } + ] + }, + { + "name" : "slicing155", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 16, + "source_fragment" : "hdr.ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing159", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] + } + ], + "pipelines" : [ + { + "name" : "ingress", + "id" : 0, + "source_info" : { + "filename" : "fabric.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "FabricIngress" + }, + "init_table" : "tbl_lookup_md_init23", + "tables" : [ + { + "name" : "tbl_lookup_md_init23", + "id" : 0, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." }, "key" : [], "match_type" : "exact", @@ -8037,286 +10326,201 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], - "actions" : ["packetio25"], - "base_default_next" : "FabricIngress.spgw.interfaces", + "action_ids" : [59], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", "next_tables" : { - "packetio25" : "FabricIngress.spgw.interfaces" + "lookup_md_init23" : "node_3" }, "default_entry" : { - "action_id" : 47, + "action_id" : 59, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.interfaces", + "name" : "tbl_lookup_md_init32", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 129, - "column" : 10, - "source_fragment" : "interfaces" + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." }, - "key" : [ - { - "match_type" : "lpm", - "name" : "ipv4_dst_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "gtpu_is_valid", - "target" : ["gtpu", "$valid$"], - "mask" : null - } - ], - "match_type" : "lpm", + "key" : [], + "match_type" : "exact", "type" : "simple", - "max_size" : 128, + "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38, 39], - "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], - "base_default_next" : null, + "action_ids" : [54], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", "next_tables" : { - "__HIT__" : "node_5", - "__MISS__" : "node_16" + "lookup_md_init32" : "node_5" }, "default_entry" : { - "action_id" : 39, + "action_id" : 54, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "name" : "tbl_lookup_md_init37", "id" : 2, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30, 31, 32, 33], - "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], - "base_default_next" : "node_7", + "action_ids" : [51], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_7", - "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_7" + "lookup_md_init37" : "node_19" }, "default_entry" : { - "action_id" : 33, + "action_id" : 51, "action_const" : true, "action_data" : [], "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init40", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 30, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 31, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 32, - "action_data" : [] - }, - "priority" : 3 - } - ] + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [52], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init40" : "node_19" + }, + "default_entry" : { + "action_id" : 52, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init43", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "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" : [53], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init43" : "node_19" + }, + "default_entry" : { + "action_id" : 53, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } }, { - "name" : "FabricIngress.spgw.uplink_pdrs", - "id" : 3, + "name" : "tbl_lookup_md_init47", + "id" : 5, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 176, - "column" : 10, - "source_fragment" : "uplink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "tunnel_ipv4_dst", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "teid", - "target" : ["gtpu", "teid"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41, 43, 9], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [58], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init47" : "node_13" }, "default_entry" : { - "action_id" : 9, - "action_const" : false, + "action_id" : 58, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.downlink_pdrs", - "id" : 4, + "name" : "tbl_lookup_md_init52", + "id" : 6, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 164, - "column" : 10, - "source_fragment" : "downlink_pdrs" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "ue_addr", - "target" : ["ipv4", "dst_addr"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40, 42, 8], - "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], - "base_default_next" : "node_10", + "action_ids" : [55], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.load_pdr" : "node_10", - "FabricIngress.spgw.load_pdr_qos" : "node_10", - "NoAction" : "node_10" + "lookup_md_init52" : "node_19" }, "default_entry" : { - "action_id" : 8, - "action_const" : false, + "action_id" : 55, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "tbl_spgw265", - "id" : 5, + "name" : "tbl_lookup_md_init55", + "id" : 7, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 265, - "column" : 16, - "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." }, "key" : [], "match_type" : "exact", @@ -8325,223 +10529,147 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], - "actions" : ["spgw265"], - "base_default_next" : "node_12", + "action_ids" : [56], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", "next_tables" : { - "spgw265" : "node_12" + "lookup_md_init55" : "node_19" }, "default_entry" : { - "action_id" : 48, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", - "id" : 6, + "name" : "tbl_lookup_md_init58", + "id" : 8, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 75, - "column" : 10, - "source_fragment" : "decap_gtpu" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." }, - "key" : [ - { - "match_type" : "exact", - "name" : "hdr.inner_tcp.$valid$", - "target" : ["inner_tcp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_udp.$valid$", - "target" : ["inner_udp", "$valid$"], - "mask" : null - }, - { - "match_type" : "exact", - "name" : "hdr.inner_icmp.$valid$", - "target" : ["inner_icmp", "$valid$"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [34, 35, 36, 37], - "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], - "base_default_next" : "FabricIngress.spgw.fars", + "action_ids" : [57], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", "next_tables" : { - "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", - "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" + "lookup_md_init58" : "node_19" }, "default_entry" : { - "action_id" : 37, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true + } + }, + { + "name" : "tbl_packetio25", + "id" : 9, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 42, + "source_fragment" : "= hdr.packet_out.egress_port; ..." }, - "entries" : [ - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 89, - "column" : 12, - "source_fragment" : "(true, false, false) : decap_inner_tcp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 34, - "action_data" : [] - }, - "priority" : 1 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 90, - "column" : 12, - "source_fragment" : "(false, true, false) : decap_inner_udp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - }, - { - "match_type" : "exact", - "key" : "0x00" - } - ], - "action_entry" : { - "action_id" : 35, - "action_data" : [] - }, - "priority" : 2 - }, - { - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 91, - "column" : 12, - "source_fragment" : "(false, false, true) : decap_inner_icmp()" - }, - "match_key" : [ - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x00" - }, - { - "match_type" : "exact", - "key" : "0x01" - } - ], - "action_entry" : { - "action_id" : 36, - "action_data" : [] - }, - "priority" : 3 - } - ] + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [60], + "actions" : ["packetio25"], + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", + "next_tables" : { + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" + }, + "default_entry" : { + "action_id" : 60, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } }, { - "name" : "FabricIngress.spgw.fars", - "id" : 7, + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 233, + "filename" : "include/control/slicing.p4", + "line" : 49, "column" : 10, - "source_fragment" : "fars" + "source_fragment" : "classifier" }, "key" : [ { - "match_type" : "exact", - "name" : "far_id", - "target" : ["scalars", "userMetadata._spgw_far_id25"], + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null } ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 2048, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [44, 45, 46], - "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], - "base_default_next" : "tbl_spgw282", - "next_tables" : { - "FabricIngress.spgw.load_normal_far" : "tbl_spgw282", - "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw282", - "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw282" - }, - "default_entry" : { - "action_id" : 44, - "action_const" : true, - "action_data" : ["0x1", "0x0"], - "action_entry_const" : true - } - }, - { - "name" : "tbl_spgw282", - "id" : 8, - "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 282, - "column" : 36, - "source_fragment" : "=" - }, - "key" : [], - "match_type" : "exact", + "match_type" : "ternary", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 512, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], - "actions" : ["spgw282"], - "base_default_next" : "node_16", + "action_ids" : [30, 31], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", "next_tables" : { - "spgw282" : "node_16" + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" }, "default_entry" : { - "action_id" : 49, + "action_id" : 30, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_filtering113", - "id" : 9, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -8555,14 +10683,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], + "action_ids" : [61], "actions" : ["filtering113"], - "base_default_next" : "node_18", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_18" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 50, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8570,7 +10698,7 @@ }, { "name" : "tbl_filtering129", - "id" : 10, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -8584,14 +10712,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [62], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 51, + "action_id" : 62, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -8599,7 +10727,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 11, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -8649,7 +10777,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 12, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -8678,7 +10806,7 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata._ip_eth_type0"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], "mask" : null } ], @@ -8690,9 +10818,9 @@ "direct_meters" : null, "action_ids" : [13], "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_22", + "base_default_next" : "node_28", "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_22" + "FabricIngress.filtering.set_forwarding_type" : "node_28" }, "default_entry" : { "action_id" : 13, @@ -8702,234 +10830,485 @@ } }, { - "name" : "FabricIngress.forwarding.bridging", - "id" : 13, + "name" : "FabricIngress.spgw.interfaces", + "id" : 15, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 46, + "filename" : "include/control/spgw.p4", + "line" : 132, "column" : 10, - "source_fragment" : "bridging" + "source_fragment" : "interfaces" }, "key" : [ { - "match_type" : "exact", - "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["ipv4", "dst_addr"], "mask" : null }, { - "match_type" : "ternary", - "name" : "eth_dst", - "target" : ["ethernet", "dst_addr"], + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["gtpu", "$valid$"], "mask" : null } ], - "match_type" : "ternary", + "match_type" : "lpm", "type" : "simple", - "max_size" : 1024, - "with_counters" : true, + "max_size" : 128, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [14, 0], - "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_29", + "action_ids" : [42, 43], + "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"], + "base_default_next" : null, "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_29", - "nop" : "node_29" + "__HIT__" : "node_30", + "__MISS__" : "node_41" }, "default_entry" : { - "action_id" : 0, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.forwarding.mpls", - "id" : 14, + "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "id" : 16, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 71, + "filename" : "include/control/spgw.p4", + "line" : 77, "column" : 10, - "source_fragment" : "mpls" + "source_fragment" : "decap_gtpu" }, "key" : [ { "match_type" : "exact", - "name" : "mpls_label", - "target" : ["scalars", "userMetadata._mpls_label4"], + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15, 1], - "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_29", + "action_ids" : [34, 35, 36, 37], + "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"], + "base_default_next" : "node_32", "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_29", - "nop" : "node_29" + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp" : "node_32", + "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_32" }, "default_entry" : { - "action_id" : 1, + "action_id" : 37, "action_const" : true, "action_data" : [], "action_entry_const" : true - } + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 34, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 35, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 36, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "FabricIngress.forwarding.routing_v4", - "id" : 15, + "name" : "FabricIngress.spgw.uplink_pdrs", + "id" : 17, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 108, + "filename" : "include/control/spgw.p4", + "line" : 184, "column" : 10, - "source_fragment" : "routing_v4" + "source_fragment" : "uplink_pdrs" }, "key" : [ { - "match_type" : "lpm", - "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata._ipv4_dst_addr16"], + "match_type" : "exact", + "name" : "tunnel_ipv4_dst", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "teid", + "target" : ["gtpu", "teid"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "has_qfi", + "target" : ["gtpu_ext_psc", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "qfi", + "target" : ["scalars", "userMetadata._spgw_qfi39"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45, 47, 9], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_35", + "next_tables" : { + "FabricIngress.spgw.load_pdr" : "node_35", + "FabricIngress.spgw.load_pdr_qos" : "node_35", + "NoAction" : "node_35" + }, + "default_entry" : { + "action_id" : 9, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.spgw.downlink_pdrs", + "id" : 18, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 172, + "column" : 10, + "source_fragment" : "downlink_pdrs" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_addr", + "target" : ["ipv4", "dst_addr"], "mask" : null } ], - "match_type" : "lpm", + "match_type" : "exact", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [16, 17, 2], - "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_29", + "action_ids" : [44, 46, 8], + "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"], + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_29", - "FabricIngress.forwarding.nop_routing_v4" : "node_29", - "nop" : "node_29" + "FabricIngress.spgw.load_pdr" : "node_35", + "FabricIngress.spgw.load_pdr_qos" : "node_35", + "NoAction" : "node_35" }, "default_entry" : { - "action_id" : 2, + "action_id" : 8, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricIngress.pre_next.next_mpls", - "id" : 16, + "name" : "tbl_spgw277", + "id" : 19, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 36, - "column" : 10, - "source_fragment" : "next_mpls" + "filename" : "include/control/spgw.p4", + "line" : 277, + "column" : 16, + "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, - "key" : [ - { - "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], - "mask" : null - } - ], + "key" : [], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [18, 3], - "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], - "base_default_next" : "FabricIngress.pre_next.next_vlan", + "action_ids" : [63], + "actions" : ["spgw277"], + "base_default_next" : "node_37", "next_tables" : { - "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", - "nop" : "FabricIngress.pre_next.next_vlan" + "spgw277" : "node_37" }, "default_entry" : { - "action_id" : 3, + "action_id" : 63, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricIngress.pre_next.next_vlan", - "id" : 17, + "name" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "id" : 20, "source_info" : { - "filename" : "include/control/pre_next.p4", - "line" : 73, + "filename" : "include/control/spgw.p4", + "line" : 77, "column" : 10, - "source_fragment" : "next_vlan" + "source_fragment" : "decap_gtpu" }, "key" : [ { "match_type" : "exact", - "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "name" : "hdr.inner_tcp.$valid$", + "target" : ["inner_tcp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_udp.$valid$", + "target" : ["inner_udp", "$valid$"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.inner_icmp.$valid$", + "target" : ["inner_icmp", "$valid$"], "mask" : null } ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [19, 4], - "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], - "base_default_next" : "tbl_acl27", + "action_ids" : [38, 39, 40, 41], + "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"], + "base_default_next" : "FabricIngress.spgw.fars", "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" + "FabricIngress.spgw.decap_gtpu.decap_inner_tcp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_udp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_icmp" : "FabricIngress.spgw.fars", + "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars" }, "default_entry" : { - "action_id" : 4, + "action_id" : 41, "action_const" : true, "action_data" : [], "action_entry_const" : true - } + }, + "entries" : [ + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 91, + "column" : 12, + "source_fragment" : "(true, false, false) : decap_inner_tcp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 38, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 92, + "column" : 12, + "source_fragment" : "(false, true, false) : decap_inner_udp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + }, + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 39, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 93, + "column" : 12, + "source_fragment" : "(false, false, true) : decap_inner_icmp()" + }, + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x00" + }, + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 40, + "action_data" : [] + }, + "priority" : 3 + } + ] }, { - "name" : "tbl_acl27", - "id" : 18, + "name" : "FabricIngress.spgw.fars", + "id" : 21, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." + "filename" : "include/control/spgw.p4", + "line" : 245, + "column" : 10, + "source_fragment" : "fars" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "far_id", + "target" : ["scalars", "userMetadata._spgw_far_id37"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 2048, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58], - "actions" : ["acl27"], - "base_default_next" : "node_33", + "action_ids" : [48, 49, 50], + "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"], + "base_default_next" : "tbl_spgw294", "next_tables" : { - "acl27" : "node_33" + "FabricIngress.spgw.load_normal_far" : "tbl_spgw294", + "FabricIngress.spgw.load_tunnel_far" : "tbl_spgw294", + "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw294" }, "default_entry" : { - "action_id" : 58, + "action_id" : 48, "action_const" : true, - "action_data" : [], + "action_data" : ["0x1", "0x0"], "action_entry_const" : true } }, { - "name" : "tbl_acl98", - "id" : 19, + "name" : "tbl_spgw294", + "id" : 22, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." + "filename" : "include/control/spgw.p4", + "line" : 294, + "column" : 36, + "source_fragment" : "=" }, "key" : [], "match_type" : "exact", @@ -8938,159 +11317,206 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [54], - "actions" : ["acl98"], - "base_default_next" : "node_35", + "action_ids" : [64], + "actions" : ["spgw294"], + "base_default_next" : "node_41", "next_tables" : { - "acl98" : "node_35" + "spgw294" : "node_41" }, "default_entry" : { - "action_id" : 54, + "action_id" : 64, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl102", - "id" : 20, + "name" : "FabricIngress.forwarding.bridging", + "id" : 23, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "source_fragment" : "= hdr.inner_tcp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "bridging" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "exact", + "name" : "vlan_id", + "target" : ["scalars", "userMetadata._vlan_id9"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "eth_dst", + "target" : ["ethernet", "dst_addr"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [52], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [14, 0], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl102" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.set_next_id_bridging" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 52, + "action_id" : 0, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl105", - "id" : 21, + "name" : "FabricIngress.forwarding.mpls", + "id" : 24, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "source_fragment" : "= hdr.inner_udp.sport; ..." + "filename" : "include/control/forwarding.p4", + "line" : 71, + "column" : 10, + "source_fragment" : "mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "mpls_label", + "target" : ["scalars", "userMetadata._mpls_label12"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [53], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [15, 1], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl105" : "FabricIngress.acl.acl" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 53, + "action_id" : 1, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl109", - "id" : 22, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 25, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 108, + "column" : 10, + "source_fragment" : "routing_v4" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._ipv4_dst_addr24"], + "mask" : null + } + ], + "match_type" : "lpm", "type" : "simple", "max_size" : 1024, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [57], - "actions" : ["acl109"], - "base_default_next" : "node_41", + "action_ids" : [16, 17, 2], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], + "base_default_next" : "node_48", "next_tables" : { - "acl109" : "node_41" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_48", + "FabricIngress.forwarding.nop_routing_v4" : "node_48", + "nop" : "node_48" }, "default_entry" : { - "action_id" : 57, - "action_const" : true, + "action_id" : 2, + "action_const" : false, "action_data" : [], - "action_entry_const" : true + "action_entry_const" : false } }, { - "name" : "tbl_acl113", - "id" : 23, + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 26, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "source_fragment" : "= hdr.tcp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 36, + "column" : 10, + "source_fragment" : "next_mpls" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id17"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [55], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", + "action_ids" : [18, 3], + "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"], + "base_default_next" : "FabricIngress.pre_next.next_vlan", "next_tables" : { - "acl113" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan", + "nop" : "FabricIngress.pre_next.next_vlan" }, "default_entry" : { - "action_id" : 55, + "action_id" : 3, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_acl116", - "id" : 24, + "name" : "FabricIngress.pre_next.next_vlan", + "id" : 27, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "source_fragment" : "= hdr.udp.sport; ..." + "filename" : "include/control/pre_next.p4", + "line" : 73, + "column" : 10, + "source_fragment" : "next_vlan" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "next_id", + "target" : ["scalars", "userMetadata._next_id17"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", "max_size" : 1024, - "with_counters" : false, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [56], - "actions" : ["acl116"], + "action_ids" : [19, 4], + "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 56, + "action_id" : 4, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9098,10 +11524,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 25, + "id" : 28, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -9139,19 +11565,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -9169,19 +11595,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata._port_type32"], + "target" : ["scalars", "userMetadata._port_type46"], "mask" : null } ], @@ -9193,13 +11619,13 @@ "direct_meters" : null, "action_ids" : [20, 21, 22, 23, 24], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_46", + "base_default_next" : "node_52", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_46", - "FabricIngress.acl.punt_to_cpu" : "node_46", - "FabricIngress.acl.set_clone_session_id" : "node_46", - "FabricIngress.acl.drop" : "node_46", - "FabricIngress.acl.nop_acl" : "node_46" + "FabricIngress.acl.set_next_id_acl" : "node_52", + "FabricIngress.acl.punt_to_cpu" : "node_52", + "FabricIngress.acl.set_clone_session_id" : "node_52", + "FabricIngress.acl.drop" : "node_52", + "FabricIngress.acl.nop_acl" : "node_52" }, "default_entry" : { "action_id" : 24, @@ -9210,7 +11636,7 @@ }, { "name" : "FabricIngress.next.xconnect", - "id" : 26, + "id" : 29, "source_info" : { "filename" : "include/control/next.p4", "line" : 68, @@ -9227,7 +11653,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -9254,7 +11680,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 27, + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -9265,7 +11691,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -9287,7 +11713,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 28, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -9298,7 +11724,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata._next_id9"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -9310,10 +11736,10 @@ "direct_meters" : null, "action_ids" : [29, 7], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_50", + "base_default_next" : "node_56", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_50", - "nop" : "node_50" + "FabricIngress.next.set_mcast_group_id" : "node_56", + "nop" : "node_56" }, "default_entry" : { "action_id" : 7, @@ -9324,7 +11750,7 @@ }, { "name" : "tbl_port_counter31", - "id" : 29, + "id" : 32, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 31, @@ -9338,14 +11764,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59], + "action_ids" : [65], "actions" : ["port_counter31"], - "base_default_next" : "node_52", + "base_default_next" : "node_58", "next_tables" : { - "port_counter31" : "node_52" + "port_counter31" : "node_58" }, "default_entry" : { - "action_id" : 59, + "action_id" : 65, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9353,7 +11779,7 @@ }, { "name" : "tbl_port_counter34", - "id" : 30, + "id" : 33, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 34, @@ -9367,18 +11793,96 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [60], + "action_ids" : [66], "actions" : ["port_counter34"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing114", "next_tables" : { - "port_counter34" : null + "port_counter34" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 60, + "action_id" : 66, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing114", + "id" : 34, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [67], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing114" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 67, "action_const" : true, "action_data" : [], "action_entry_const" : true } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 35, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 93, + "column" : 10, + "source_fragment" : "queues" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id25"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc27"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color26"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [32, 33], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], + "base_default_next" : null, + "next_tables" : { + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } } ], "action_profiles" : [ @@ -9397,23 +11901,23 @@ "input" : [ { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_src_addr15"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ipv4_dst_addr16"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._ip_proto12"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_sport13"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata._l4_dport14"] + "value" : ["scalars", "userMetadata._l4_dport22"] } ] } @@ -9421,13 +11925,13 @@ ], "conditionals" : [ { - "name" : "node_2", + "name" : "node_3", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 24, + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, "column" : 12, - "source_fragment" : "hdr.packet_out.isValid()" + "source_fragment" : "hdr.inner_ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -9436,47 +11940,136 @@ "left" : null, "right" : { "type" : "field", - "value" : ["packet_out", "$valid$"] + "value" : ["inner_ipv4", "$valid$"] } } }, - "true_next" : "tbl_packetio25", - "false_next" : "FabricIngress.spgw.interfaces" + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" }, { "name" : "node_5", "id" : 1, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 255, + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" + "source_fragment" : "hdr.inner_tcp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { + "op" : "d2b", + "left" : null, + "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] - }, + "value" : ["inner_tcp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init37", + "false_next" : "node_7" + }, + { + "name" : "node_7", + "id" : 2, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["inner_udp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" + }, + { + "name" : "node_9", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_icmp", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" + }, + { + "name" : "node_11", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_lookup_md_init47", + "false_next" : "node_19" + }, + { + "name" : "node_13", + "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", - "false_next" : "node_7" + "true_next" : "tbl_lookup_md_init52", + "false_next" : "node_15" }, { - "name" : "node_7", - "id" : 2, + "name" : "node_15", + "id" : 6, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 259, - "column" : 16, - "source_fragment" : "hdr.gtpu.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" }, "expression" : { "type" : "expression", @@ -9485,47 +12078,44 @@ "left" : null, "right" : { "type" : "field", - "value" : ["gtpu", "$valid$"] + "value" : ["udp", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.uplink_pdrs", - "false_next" : "FabricIngress.spgw.downlink_pdrs" + "true_next" : "tbl_lookup_md_init55", + "false_next" : "node_17" }, { - "name" : "node_10", - "id" : 3, + "name" : "node_17", + "id" : 7, "source_info" : { - "filename" : "include/control/spgw.p4", - "line" : 264, - "column" : 16, - "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "!=", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._spgw_src_iface26"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x03" + "type" : "field", + "value" : ["icmp", "$valid$"] } } }, - "true_next" : "tbl_spgw265", - "false_next" : "node_12" + "true_next" : "tbl_lookup_md_init58", + "false_next" : "node_19" }, { - "name" : "node_12", - "id" : 4, + "name" : "node_19", + "id" : 8, "source_info" : { - "filename" : "fabric.p4", - "line" : 68, - "column" : 24, - "source_fragment" : "fabric_metadata" + "filename" : "include/control/packetio.p4", + "line" : 24, + "column" : 12, + "source_fragment" : "hdr.packet_out.isValid()" }, "expression" : { "type" : "expression", @@ -9534,16 +12124,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"] + "value" : ["packet_out", "$valid$"] } } }, - "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", - "false_next" : "FabricIngress.spgw.fars" + "true_next" : "tbl_packetio25", + "false_next" : "FabricIngress.slice_tc_classifier.classifier" }, { - "name" : "node_16", - "id" : 5, + "name" : "node_22", + "id" : 9, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 112, @@ -9562,11 +12152,11 @@ } }, "true_next" : "tbl_filtering113", - "false_next" : "node_18" + "false_next" : "node_24" }, { - "name" : "node_18", - "id" : 6, + "name" : "node_24", + "id" : 10, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 124, @@ -9595,11 +12185,11 @@ "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { - "name" : "node_22", - "id" : 7, + "name" : "node_28", + "id" : 11, "source_info" : { "filename" : "fabric.p4", - "line" : 71, + "line" : 76, "column" : 12, "source_fragment" : "fabric_metadata.skip_forwarding" }, @@ -9615,23 +12205,23 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_forwarding6"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] } } } } }, - "true_next" : "node_23", - "false_next" : "node_29" + "true_next" : "FabricIngress.spgw.interfaces", + "false_next" : "node_41" }, { - "name" : "node_23", - "id" : 8, + "name" : "node_30", + "id" : 12, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 150, - "column" : 12, - "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + "filename" : "include/control/spgw.p4", + "line" : 267, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface == SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", @@ -9639,123 +12229,103 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, "right" : { "type" : "hexstr", - "value" : "0x00" + "value" : "0x03" } } }, - "true_next" : "FabricIngress.forwarding.bridging", - "false_next" : "node_25" + "true_next" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_gtpu", + "false_next" : "node_32" }, { - "name" : "node_25", - "id" : 9, + "name" : "node_32", + "id" : 13, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 151, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + "filename" : "include/control/spgw.p4", + "line" : 271, + "column" : 16, + "source_fragment" : "hdr.gtpu.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["gtpu", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.mpls", - "false_next" : "node_27" + "true_next" : "FabricIngress.spgw.uplink_pdrs", + "false_next" : "FabricIngress.spgw.downlink_pdrs" }, { - "name" : "node_27", - "id" : 10, + "name" : "node_35", + "id" : 14, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 152, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + "filename" : "include/control/spgw.p4", + "line" : 276, + "column" : 16, + "source_fragment" : "fabric_md.spgw.src_iface != SPGW_IFACE_FROM_DBUF" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", + "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._spgw_src_iface38"] }, "right" : { "type" : "hexstr", - "value" : "0x02" + "value" : "0x03" } } }, - "true_next" : "FabricIngress.forwarding.routing_v4", - "false_next" : "node_29" + "true_next" : "tbl_spgw277", + "false_next" : "node_37" }, { - "name" : "node_29", - "id" : 11, + "name" : "node_37", + "id" : 15, "source_info" : { "filename" : "fabric.p4", - "line" : 74, - "column" : 12, - "source_fragment" : "fabric_metadata.skip_next" + "line" : 77, + "column" : 28, + "source_fragment" : "fabric_metadata" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] - } - } + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap43"] } } }, - "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" + "true_next" : "FabricIngress.spgw.decap_gtpu.decap_gtpu", + "false_next" : "FabricIngress.spgw.fars" }, { - "name" : "node_33", - "id" : 12, + "name" : "node_41", + "id" : 16, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, + "filename" : "fabric.p4", + "line" : 80, "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" + "source_fragment" : "fabric_metadata.skip_forwarding" }, "expression" : { "type" : "expression", "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } - }, + "op" : "not", + "left" : null, "right" : { "type" : "expression", "value" : { @@ -9763,136 +12333,129 @@ "left" : null, "right" : { "type" : "field", - "value" : ["inner_ipv4", "$valid$"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] } } } } }, - "true_next" : "tbl_acl98", - "false_next" : "node_39" + "true_next" : "node_42", + "false_next" : "node_48" }, { - "name" : "node_35", - "id" : 13, + "name" : "node_42", + "id" : 17, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 150, + "column" : 12, + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["inner_tcp", "$valid$"] - } - } - }, - "true_next" : "tbl_acl102", - "false_next" : "node_37" - }, - { - "name" : "node_37", - "id" : 14, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, + "value" : ["scalars", "userMetadata._fwd_type16"] + }, "right" : { - "type" : "field", - "value" : ["inner_udp", "$valid$"] + "type" : "hexstr", + "value" : "0x00" } } }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_44" }, { - "name" : "node_39", - "id" : 15, + "name" : "node_44", + "id" : 18, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 151, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["ipv4", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type16"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" } } }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_46" }, { - "name" : "node_41", - "id" : 16, + "name" : "node_46", + "id" : 19, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["tcp", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type16"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" } } }, - "true_next" : "tbl_acl113", - "false_next" : "node_43" + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "node_48" }, { - "name" : "node_43", - "id" : 17, + "name" : "node_48", + "id" : 20, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" + "filename" : "fabric.p4", + "line" : 83, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_next" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_next15"] + } + } } } }, - "true_next" : "tbl_acl116", + "true_next" : "FabricIngress.pre_next.next_mpls", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_46", - "id" : 18, + "name" : "node_52", + "id" : 21, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -9908,18 +12471,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._skip_next7"] + "value" : ["scalars", "userMetadata._skip_next15"] } } } } }, - "false_next" : null, - "true_next" : "FabricIngress.next.xconnect" + "true_next" : "FabricIngress.next.xconnect", + "false_next" : "tbl_slicing114" }, { - "name" : "node_50", - "id" : 19, + "name" : "node_56", + "id" : 22, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -9941,11 +12504,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_52" + "false_next" : "node_58" }, { - "name" : "node_52", - "id" : 20, + "name" : "node_58", + "id" : 23, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -9966,8 +12529,8 @@ } } }, - "false_next" : null, - "true_next" : "tbl_port_counter34" + "true_next" : "tbl_port_counter34", + "false_next" : "tbl_slicing114" } ] }, @@ -9976,15 +12539,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_56", + "init_table" : "node_64", "tables" : [ { "name" : "tbl_packetio41", - "id" : 31, + "id" : 36, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -9998,14 +12561,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [67], + "action_ids" : [78], "actions" : ["packetio41"], - "base_default_next" : "node_58", + "base_default_next" : "node_66", "next_tables" : { - "packetio41" : "node_58" + "packetio41" : "node_66" }, "default_entry" : { - "action_id" : 67, + "action_id" : 78, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10013,7 +12576,7 @@ }, { "name" : "tbl_packetio44", - "id" : 32, + "id" : 37, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -10027,14 +12590,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [68], + "action_ids" : [79], "actions" : ["packetio44"], - "base_default_next" : "node_60", + "base_default_next" : "node_68", "next_tables" : { - "packetio44" : "node_60" + "packetio44" : "node_68" }, "default_entry" : { - "action_id" : 68, + "action_id" : 79, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10042,7 +12605,7 @@ }, { "name" : "tbl_next283", - "id" : 33, + "id" : 38, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -10056,14 +12619,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [69], + "action_ids" : [80], "actions" : ["next283"], - "base_default_next" : "node_62", + "base_default_next" : "node_70", "next_tables" : { - "next283" : "node_62" + "next283" : "node_70" }, "default_entry" : { - "action_id" : 69, + "action_id" : 80, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10071,7 +12634,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 34, + "id" : 39, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -10085,14 +12648,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61], + "action_ids" : [69], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 61, + "action_id" : 69, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10100,7 +12663,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 35, + "id" : 40, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -10114,14 +12677,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], + "action_ids" : [70], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 62, + "action_id" : 70, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10129,7 +12692,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 36, + "id" : 41, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -10140,7 +12703,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata._vlan_id1"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -10156,16 +12719,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63, 64, 65], + "action_ids" : [71, 72, 73], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_67", + "base_default_next" : "node_75", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_67", - "FabricEgress.egress_next.pop_vlan" : "node_67", - "FabricEgress.egress_next.drop" : "node_67" + "FabricEgress.egress_next.push_vlan" : "node_75", + "FabricEgress.egress_next.pop_vlan" : "node_75", + "FabricEgress.egress_next.drop" : "node_75" }, "default_entry" : { - "action_id" : 65, + "action_id" : 73, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10173,7 +12736,7 @@ }, { "name" : "tbl_next309", - "id" : 37, + "id" : 42, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -10187,14 +12750,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [71], + "action_ids" : [82], "actions" : ["next309"], - "base_default_next" : "node_69", + "base_default_next" : "node_77", "next_tables" : { - "next309" : "node_69" + "next309" : "node_77" }, "default_entry" : { - "action_id" : 71, + "action_id" : 82, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10202,7 +12765,7 @@ }, { "name" : "tbl_next310", - "id" : 38, + "id" : 43, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -10216,14 +12779,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [70], + "action_ids" : [81], "actions" : ["next310"], - "base_default_next" : "node_75", + "base_default_next" : "node_83", "next_tables" : { - "next310" : "node_75" + "next310" : "node_83" }, "default_entry" : { - "action_id" : 70, + "action_id" : 81, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10231,7 +12794,7 @@ }, { "name" : "tbl_next313", - "id" : 39, + "id" : 44, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -10245,14 +12808,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [73], + "action_ids" : [84], "actions" : ["next313"], - "base_default_next" : "node_73", + "base_default_next" : "node_81", "next_tables" : { - "next313" : "node_73" + "next313" : "node_81" }, "default_entry" : { - "action_id" : 73, + "action_id" : 84, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10260,7 +12823,7 @@ }, { "name" : "tbl_next314", - "id" : 40, + "id" : 45, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -10274,14 +12837,43 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [72], + "action_ids" : [83], "actions" : ["next314"], - "base_default_next" : "node_75", + "base_default_next" : "node_83", + "next_tables" : { + "next314" : "node_83" + }, + "default_entry" : { + "action_id" : 83, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_spgw_gtpu_encap_qfi", + "id" : 46, + "source_info" : { + "filename" : "include/control/spgw.p4", + "line" : 371, + "column" : 20, + "source_fragment" : "gtpu_encap_qfi()" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [77], + "actions" : ["FabricEgress.spgw.gtpu_encap_qfi"], + "base_default_next" : "node_88", "next_tables" : { - "next314" : "node_75" + "FabricEgress.spgw.gtpu_encap_qfi" : "node_88" }, "default_entry" : { - "action_id" : 72, + "action_id" : 77, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10289,11 +12881,11 @@ }, { "name" : "tbl_spgw_gtpu_encap", - "id" : 41, + "id" : 47, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 339, - "column" : 16, + "line" : 373, + "column" : 20, "source_fragment" : "gtpu_encap()" }, "key" : [], @@ -10303,25 +12895,25 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [66], + "action_ids" : [76], "actions" : ["FabricEgress.spgw.gtpu_encap"], - "base_default_next" : "node_78", + "base_default_next" : "node_88", "next_tables" : { - "FabricEgress.spgw.gtpu_encap" : "node_78" + "FabricEgress.spgw.gtpu_encap" : "node_88" }, "default_entry" : { - "action_id" : 66, + "action_id" : 76, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_spgw342", - "id" : 42, + "name" : "tbl_spgw377", + "id" : 48, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 342, + "line" : 377, "column" : 16, "source_fragment" : "pdr_counter.count(fabric_md.spgw.ctr_id)" }, @@ -10332,14 +12924,138 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [74], - "actions" : ["spgw342"], + "action_ids" : [85], + "actions" : ["spgw377"], + "base_default_next" : "tbl_slicing126", + "next_tables" : { + "spgw377" : "tbl_slicing126" + }, + "default_entry" : { + "action_id" : 85, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing126", + "id" : 49, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [88], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 88, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 50, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 138, + "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" : [74, 75, 68], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], + "base_default_next" : null, + "next_tables" : { + "__MISS__" : null, + "__HIT__" : "node_92" + }, + "default_entry" : { + "action_id" : 68, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing155", + "id" : 51, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 155, + "column" : 30, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [86], + "actions" : ["slicing155"], + "base_default_next" : null, + "next_tables" : { + "slicing155" : null + }, + "default_entry" : { + "action_id" : 86, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing159", + "id" : 52, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [87], + "actions" : ["slicing159"], "base_default_next" : null, "next_tables" : { - "spgw342" : null + "slicing159" : null }, "default_entry" : { - "action_id" : 74, + "action_id" : 87, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10349,11 +13065,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_56", - "id" : 21, + "name" : "node_64", + "id" : 24, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 118, "column" : 33, "source_fragment" : "fabric_metadata" }, @@ -10364,16 +13080,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_controller_packet_out11"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_58" + "false_next" : "node_66" }, { - "name" : "node_58", - "id" : 22, + "name" : "node_66", + "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -10395,11 +13111,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_60" + "false_next" : "node_68" }, { - "name" : "node_60", - "id" : 23, + "name" : "node_68", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -10417,7 +13133,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._is_multicast10"] + "value" : ["scalars", "userMetadata._is_multicast18"] } } }, @@ -10438,11 +13154,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_62" + "false_next" : "node_70" }, { - "name" : "node_62", - "id" : 24, + "name" : "node_70", + "id" : 27, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -10455,7 +13171,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._mpls_label4"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, "right" : { "type" : "hexstr", @@ -10463,12 +13179,12 @@ } } }, - "true_next" : "node_63", + "true_next" : "node_71", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_63", - "id" : 25, + "name" : "node_71", + "id" : 28, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -10490,8 +13206,8 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_67", - "id" : 26, + "name" : "node_75", + "id" : 29, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -10510,11 +13226,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_71" + "false_next" : "node_79" }, { - "name" : "node_69", - "id" : 27, + "name" : "node_77", + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -10536,11 +13252,11 @@ } }, "true_next" : "tbl_next310", - "false_next" : "node_75" + "false_next" : "node_83" }, { - "name" : "node_71", - "id" : 28, + "name" : "node_79", + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -10568,7 +13284,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata._fwd_type8"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -10579,11 +13295,11 @@ } }, "true_next" : "tbl_next313", - "false_next" : "node_75" + "false_next" : "node_83" }, { - "name" : "node_73", - "id" : 29, + "name" : "node_81", + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -10605,14 +13321,14 @@ } }, "true_next" : "tbl_next314", - "false_next" : "node_75" + "false_next" : "node_83" }, { - "name" : "node_75", - "id" : 30, + "name" : "node_83", + "id" : 33, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 337, + "line" : 368, "column" : 12, "source_fragment" : "fabric_md.spgw.skip_spgw" }, @@ -10628,21 +13344,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_spgw27"] + "value" : ["scalars", "userMetadata._spgw_skip_spgw40"] } } } } }, - "false_next" : null, - "true_next" : "node_76" + "true_next" : "node_84", + "false_next" : "tbl_slicing126" }, { - "name" : "node_76", - "id" : 31, + "name" : "node_84", + "id" : 34, "source_info" : { "filename" : "fabric.p4", - "line" : 111, + "line" : 121, "column" : 24, "source_fragment" : "fabric_metadata" }, @@ -10653,19 +13369,42 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap29"] + "value" : ["scalars", "userMetadata._spgw_needs_gtpu_encap42"] } } }, - "true_next" : "tbl_spgw_gtpu_encap", - "false_next" : "node_78" + "true_next" : "node_85", + "false_next" : "node_88" }, { - "name" : "node_78", - "id" : 32, + "name" : "node_85", + "id" : 35, + "source_info" : { + "filename" : "fabric.p4", + "line" : 121, + "column" : 24, + "source_fragment" : "fabric_metadata" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._spgw_needs_qfi_push45"] + } + } + }, + "true_next" : "tbl_spgw_gtpu_encap_qfi", + "false_next" : "tbl_spgw_gtpu_encap" + }, + { + "name" : "node_88", + "id" : 36, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 341, + "line" : 376, "column" : 16, "source_fragment" : "fabric_md.spgw.skip_egress_pdr_ctr" }, @@ -10681,14 +13420,60 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr31"] + "value" : ["scalars", "userMetadata._spgw_skip_egress_pdr_ctr44"] } } } } }, + "true_next" : "tbl_spgw377", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_92", + "id" : 37, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 154, + "column" : 16, + "source_fragment" : "hdr.gtpu_ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu_ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_slicing155", + "false_next" : "node_94" + }, + { + "name" : "node_94", + "id" : 38, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, "false_next" : null, - "true_next" : "tbl_spgw342" + "true_next" : "tbl_slicing159" } ] } @@ -10725,7 +13510,7 @@ "id" : 1, "source_info" : { "filename" : "include/control/spgw.p4", - "line" : 358, + "line" : 393, "column" : 8, "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." }, diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt index 31906c765fa..1934060570e 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt @@ -390,6 +390,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 36113154 @@ -462,6 +548,18 @@ tables { bitwidth: 32 match_type: EXACT } + match_fields { + id: 3 + name: "has_qfi" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "qfi" + bitwidth: 6 + match_type: EXACT + } action_refs { id: 18504550 } @@ -532,6 +630,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -777,6 +901,49 @@ actions { bitwidth: 16 } } +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: 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: 18186268 @@ -788,6 +955,11 @@ actions { name: "src_iface" bitwidth: 8 } + params { + id: 2 + name: "slice_id" + bitwidth: 4 + } } actions { preamble { @@ -817,6 +989,11 @@ actions { name: "needs_gtpu_decap" bitwidth: 1 } + params { + id: 4 + name: "tc" + bitwidth: 2 + } } actions { preamble { @@ -841,8 +1018,18 @@ actions { } params { id: 4 - name: "qid" - bitwidth: 5 + name: "needs_qfi_push" + bitwidth: 1 + } + params { + id: 5 + name: "qfi" + bitwidth: 6 + } + params { + id: 6 + name: "tc" + bitwidth: 2 } } actions { @@ -957,6 +1144,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -1122,6 +1323,28 @@ direct_counters { } 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: 318892680 @@ -1133,6 +1356,17 @@ direct_counters { } direct_table_id: 49262446 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index 0b921cb3603..f6a130fbef5 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -7,6 +7,7 @@ ["tmp_0", 1, false], ["tmp_2", 3, false], ["tmp_4", 8, false], + ["gtpu_ext_len_0", 8, false], ["tmp_1", 16, false], ["tmp_3", 16, false], ["tmp_5", 4, false], @@ -14,30 +15,39 @@ ["tmp_7", 64, false], ["tmp_8", 32, false], ["tmp_9", 32, false], - ["acl_ipv4_src", 32, false], - ["acl_ipv4_dst", 32, false], - ["acl_ip_proto", 8, false], - ["acl_l4_sport", 16, false], - ["acl_l4_dport", 16, false], - ["userMetadata.ip_eth_type", 16, false], - ["userMetadata.vlan_id", 12, false], - ["userMetadata.vlan_pri", 3, false], - ["userMetadata.vlan_cfi", 1, false], - ["userMetadata.mpls_label", 20, false], - ["userMetadata.mpls_ttl", 8, false], - ["userMetadata.skip_forwarding", 1, false], - ["userMetadata.skip_next", 1, false], - ["userMetadata.fwd_type", 3, false], - ["userMetadata.next_id", 32, false], - ["userMetadata.is_multicast", 1, false], - ["userMetadata.is_controller_packet_out", 1, false], - ["userMetadata.ip_proto", 8, false], - ["userMetadata.l4_sport", 16, false], - ["userMetadata.l4_dport", 16, false], - ["userMetadata.ipv4_src_addr", 32, false], - ["userMetadata.ipv4_dst_addr", 32, false], - ["userMetadata.port_type", 2, false], - ["_padding_0", 3, false] + ["tmp_10", 32, false], + ["dscp_rewriter_tmp_dscp", 6, false], + ["userMetadata._lkp_is_ipv40", 1, false], + ["userMetadata._lkp_ipv4_src1", 32, false], + ["userMetadata._lkp_ipv4_dst2", 32, false], + ["userMetadata._lkp_ip_proto3", 8, false], + ["userMetadata._lkp_l4_sport4", 16, false], + ["userMetadata._lkp_l4_dport5", 16, false], + ["userMetadata._lkp_icmp_type6", 8, false], + ["userMetadata._lkp_icmp_code7", 8, false], + ["userMetadata._ip_eth_type8", 16, false], + ["userMetadata._vlan_id9", 12, false], + ["userMetadata._vlan_pri10", 3, false], + ["userMetadata._vlan_cfi11", 1, false], + ["userMetadata._mpls_label12", 20, false], + ["userMetadata._mpls_ttl13", 8, false], + ["userMetadata._skip_forwarding14", 1, false], + ["userMetadata._skip_next15", 1, false], + ["userMetadata._fwd_type16", 3, false], + ["userMetadata._next_id17", 32, false], + ["userMetadata._is_multicast18", 1, false], + ["userMetadata._is_controller_packet_out19", 1, false], + ["userMetadata._ip_proto20", 8, false], + ["userMetadata._l4_sport21", 16, false], + ["userMetadata._l4_dport22", 16, false], + ["userMetadata._ipv4_src_addr23", 32, false], + ["userMetadata._ipv4_dst_addr24", 32, false], + ["userMetadata._slice_id25", 4, false], + ["userMetadata._packet_color26", 2, false], + ["userMetadata._tc27", 2, false], + ["userMetadata._dscp28", 6, false], + ["userMetadata._port_type29", 2, false], + ["_padding_0", 6, false] ] }, { @@ -123,8 +133,30 @@ ] }, { - "name" : "ipv4_t", + "name" : "gtpu_options_t", "id" : 8, + "fields" : [ + ["seq_num", 16, false], + ["n_pdu_num", 8, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "gtpu_ext_psc_t", + "id" : 9, + "fields" : [ + ["len", 8, false], + ["type", 4, false], + ["spare0", 4, false], + ["ppp", 1, false], + ["rqi", 1, false], + ["qfi", 6, false], + ["next_ext", 8, false] + ] + }, + { + "name" : "ipv4_t", + "id" : 10, "fields" : [ ["version", 4, false], ["ihl", 4, false], @@ -143,7 +175,7 @@ }, { "name" : "udp_t", - "id" : 9, + "id" : 11, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -153,7 +185,7 @@ }, { "name" : "tcp_t", - "id" : 10, + "id" : 12, "fields" : [ ["sport", 16, false], ["dport", 16, false], @@ -170,7 +202,7 @@ }, { "name" : "icmp_t", - "id" : 11, + "id" : 13, "fields" : [ ["icmp_type", 8, false], ["icmp_code", 8, false], @@ -182,7 +214,7 @@ }, { "name" : "packet_in_header_t", - "id" : 12, + "id" : 14, "fields" : [ ["ingress_port", 9, false], ["_pad", 7, false] @@ -261,71 +293,85 @@ "pi_omit" : true }, { - "name" : "inner_ipv4", + "name" : "gtpu_options", "id" : 10, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ext_psc", + "id" : 11, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_ipv4", + "id" : 12, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_udp", - "id" : 11, + "id" : 13, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_tcp", - "id" : 12, + "id" : 14, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "inner_icmp", - "id" : 13, + "id" : 15, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "ipv4", - "id" : 14, + "id" : 16, "header_type" : "ipv4_t", "metadata" : false, "pi_omit" : true }, { "name" : "tcp", - "id" : 15, + "id" : 17, "header_type" : "tcp_t", "metadata" : false, "pi_omit" : true }, { "name" : "udp", - "id" : 16, + "id" : 18, "header_type" : "udp_t", "metadata" : false, "pi_omit" : true }, { "name" : "icmp", - "id" : 17, + "id" : 19, "header_type" : "icmp_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_out", - "id" : 18, + "id" : 20, "header_type" : "packet_out_header_t", "metadata" : false, "pi_omit" : true }, { "name" : "packet_in", - "id" : 19, + "id" : 21, "header_type" : "packet_in_header_t", "metadata" : false, "pi_omit" : true @@ -341,7 +387,7 @@ "name" : "fl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 40, "source_fragment" : "{standard_metadata.ingress_port}" }, @@ -676,7 +722,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_id"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "hexstr", @@ -862,7 +908,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_label"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "field", @@ -875,7 +921,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_ttl"] + "value" : ["scalars", "userMetadata._mpls_ttl13"] }, { "type" : "field", @@ -936,7 +982,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.ip_proto"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", @@ -949,7 +995,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.ip_eth_type"] + "value" : ["scalars", "userMetadata._ip_eth_type8"] }, { "type" : "hexstr", @@ -962,7 +1008,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.ipv4_src_addr"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", @@ -975,7 +1021,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.ipv4_dst_addr"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", @@ -1035,7 +1081,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.l4_sport"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1048,7 +1094,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.l4_dport"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1085,7 +1131,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.l4_sport"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", @@ -1098,7 +1144,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.l4_dport"] + "value" : ["scalars", "userMetadata._l4_dport22"] }, { "type" : "field", @@ -1686,7 +1732,128 @@ } ], "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x000000", + "mask" : null, + "next_state" : "parse_inner_ipv4" + }, + { + "type" : "default", + "value" : null, + "mask" : null, + "next_state" : "parse_gtpu_options" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + } + ] + }, + { + "name" : "parse_gtpu_options", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_options" + } + ], + "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" : ["gtpu_options", "next_ext"] + }, + { + "type" : "field", + "value" : ["scalars", "gtpu_ext_len_0"] + } + ] + }, + { + "name" : "parse_gtpu_ext_psc", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu_ext_psc" + } + ], + "op" : "extract" + } + ], + "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" : ["gtpu_ext_psc", "next_ext"] + } + ] + }, + { + "name" : "parse_inner_ipv4", + "id" : 16, + "parser_ops" : [ { "parameters" : [ { @@ -1732,7 +1899,7 @@ }, { "name" : "parse_inner_udp", - "id" : 14, + "id" : 17, "parser_ops" : [ { "parameters" : [ @@ -1756,7 +1923,7 @@ }, { "name" : "parse_inner_tcp", - "id" : 15, + "id" : 18, "parser_ops" : [ { "parameters" : [ @@ -1780,7 +1947,7 @@ }, { "name" : "parse_inner_icmp", - "id" : 16, + "id" : 19, "parser_ops" : [ { "parameters" : [ @@ -1812,15 +1979,30 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 285, + "line" : 308, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], + "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "eth_type", "mpls", "ipv4", "tcp", "udp", "icmp", "gtpu", "gtpu_options", "gtpu_ext_psc", "inner_ipv4", "inner_tcp", "inner_udp", "inner_icmp"], "primitives" : [] } ], - "meter_arrays" : [], + "meter_arrays" : [ + { + "name" : "FabricIngress.qos.slice_tc_meter", + "id" : 0, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 78, + "column" : 41, + "source_fragment" : "slice_tc_meter" + }, + "is_direct" : false, + "size" : 64, + "rate_count" : 2, + "type" : "bytes" + } + ], "counter_arrays" : [ { "name" : "FabricIngress.filtering.ingress_port_vlan_counter", @@ -1901,7 +2083,7 @@ "binding" : "FabricIngress.acl.acl", "source_info" : { "filename" : "include/control/acl.p4", - "line" : 36, + "line" : 29, "column" : 50, "source_fragment" : "acl_counter" } @@ -1943,8 +2125,32 @@ } }, { - "name" : "FabricIngress.port_counters_control.egress_port_counter", + "name" : "FabricIngress.slice_tc_classifier.classifier_stats", "id" : 10, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 32, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 80, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 12, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 26, @@ -1956,7 +2162,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 11, + "id" : 13, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 27, @@ -1968,7 +2174,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 12, + "id" : 14, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan", "source_info" : { @@ -2164,7 +2370,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.skip_forwarding"] + "value" : ["scalars", "userMetadata._skip_forwarding14"] }, { "type" : "expression", @@ -2184,8 +2390,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 36, - "column" : 8, - "source_fragment" : "fabric_metadata.skip_forwarding = true" + "column" : 40, + "source_fragment" : "= true; ..." } }, { @@ -2193,7 +2399,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.skip_next"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2213,8 +2419,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 37, - "column" : 8, - "source_fragment" : "fabric_metadata.skip_next = true" + "column" : 34, + "source_fragment" : "= true; ..." } }, { @@ -2222,7 +2428,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.port_type"] + "value" : ["scalars", "userMetadata._port_type29"] }, { "type" : "hexstr", @@ -2231,7 +2437,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 136, "column" : 38, "source_fragment" : "0x0; ..." } @@ -2253,7 +2459,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.port_type"] + "value" : ["scalars", "userMetadata._port_type29"] }, { "type" : "runtime_data", @@ -2263,8 +2469,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 44, - "column" : 8, - "source_fragment" : "fabric_metadata.port_type = port_type" + "column" : 34, + "source_fragment" : "= port_type; ..." } } ] @@ -2288,7 +2494,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_id"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2298,8 +2504,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 49, - "column" : 8, - "source_fragment" : "fabric_metadata.vlan_id = vlan_id" + "column" : 32, + "source_fragment" : "= vlan_id; ..." } }, { @@ -2307,7 +2513,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.port_type"] + "value" : ["scalars", "userMetadata._port_type29"] }, { "type" : "runtime_data", @@ -2317,8 +2523,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 44, - "column" : 8, - "source_fragment" : "fabric_metadata.port_type = port_type; ..." + "column" : 34, + "source_fragment" : "= port_type; ..." } } ] @@ -2338,7 +2544,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.fwd_type"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, { "type" : "runtime_data", @@ -2348,8 +2554,8 @@ "source_info" : { "filename" : "include/control/filtering.p4", "line" : 90, - "column" : 8, - "source_fragment" : "fabric_metadata.fwd_type = fwd_type" + "column" : 33, + "source_fragment" : "= fwd_type; ..." } } ] @@ -2369,7 +2575,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.next_id"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2379,8 +2585,8 @@ "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 30, - "column" : 8, - "source_fragment" : "fabric_metadata.next_id = next_id; ..." + "column" : 32, + "source_fragment" : "= next_id; ..." } } ] @@ -2400,7 +2606,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_label"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "hexstr", @@ -2410,8 +2616,8 @@ "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 66, - "column" : 8, - "source_fragment" : "fabric_metadata.mpls_label = 0" + "column" : 35, + "source_fragment" : "= 0; ..." } }, { @@ -2419,7 +2625,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.next_id"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2429,8 +2635,8 @@ "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 30, - "column" : 8, - "source_fragment" : "fabric_metadata.next_id = next_id; ..." + "column" : 32, + "source_fragment" : "= next_id; ..." } } ] @@ -2450,7 +2656,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.next_id"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2460,8 +2666,8 @@ "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 30, - "column" : 8, - "source_fragment" : "fabric_metadata.next_id = next_id; ..." + "column" : 32, + "source_fragment" : "= next_id; ..." } } ] @@ -2487,7 +2693,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_label"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, { "type" : "runtime_data", @@ -2497,8 +2703,8 @@ "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 32, - "column" : 8, - "source_fragment" : "fabric_metadata.mpls_label = label" + "column" : 35, + "source_fragment" : "= label; ..." } } ] @@ -2518,7 +2724,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_id"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "runtime_data", @@ -2528,8 +2734,8 @@ "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 57, - "column" : 8, - "source_fragment" : "fabric_metadata.vlan_id = vlan_id" + "column" : 32, + "source_fragment" : "= vlan_id; ..." } } ] @@ -2549,7 +2755,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.next_id"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2558,9 +2764,9 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 39, - "column" : 8, - "source_fragment" : "fabric_metadata.next_id = next_id" + "line" : 32, + "column" : 26, + "source_fragment" : "= next_id; ..." } } ] @@ -2584,7 +2790,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 45, + "line" : 38, "column" : 8, "source_fragment" : "standard_metadata.egress_spec = 255" } @@ -2594,7 +2800,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.skip_next"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2613,9 +2819,9 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 46, - "column" : 8, - "source_fragment" : "fabric_metadata.skip_next = true" + "line" : 39, + "column" : 28, + "source_fragment" : "= true; ..." } } ] @@ -2644,7 +2850,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 52, + "line" : 45, "column" : 8, "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})" } @@ -2666,7 +2872,7 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 57, + "line" : 50, "column" : 8, "source_fragment" : "mark_to_drop(standard_metadata)" } @@ -2676,7 +2882,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.skip_next"] + "value" : ["scalars", "userMetadata._skip_next15"] }, { "type" : "expression", @@ -2695,9 +2901,9 @@ ], "source_info" : { "filename" : "include/control/acl.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "fabric_metadata.skip_next = true" + "line" : 51, + "column" : 28, + "source_fragment" : "= true; ..." } } ] @@ -2754,7 +2960,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.next_id"] + "value" : ["scalars", "userMetadata._next_id17"] }, { "type" : "runtime_data", @@ -2764,8 +2970,8 @@ "source_info" : { "filename" : "include/control/next.p4", "line" : 64, - "column" : 8, - "source_fragment" : "fabric_metadata.next_id = next_id" + "column" : 32, + "source_fragment" : "= next_id; ..." } } ] @@ -2912,7 +3118,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.is_multicast"] + "value" : ["scalars", "userMetadata._is_multicast18"] }, { "type" : "expression", @@ -2932,185 +3138,238 @@ "source_info" : { "filename" : "include/control/next.p4", "line" : 167, - "column" : 8, - "source_fragment" : "fabric_metadata.is_multicast = true" + "column" : 37, + "source_fragment" : "= true; ..." } } ] }, { - "name" : "packetio25", + "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc", "id" : 28, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + }, + { + "name" : "tc", + "bitwidth" : 2 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["standard_metadata", "egress_spec"] + "value" : ["scalars", "userMetadata._slice_id25"] }, { - "type" : "field", - "value" : ["packet_out", "egress_port"] + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 12, - "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + "filename" : "include/control/slicing.p4", + "line" : 35, + "column" : 27, + "source_fragment" : "= slice_id; ..." } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "packet_out" + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + { + "type" : "runtime_data", + "value" : 1 } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 26, - "column" : 12, - "source_fragment" : "hdr.packet_out.setInvalid()" + "filename" : "include/control/slicing.p4", + "line" : 36, + "column" : 21, + "source_fragment" : "= tc; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 29, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.is_controller_packet_out"] + "value" : ["scalars", "userMetadata._slice_id25"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "b2d", - "left" : null, + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, "right" : { - "type" : "bool", - "value" : true + "type" : "hexstr", + "value" : "0x0f" } } } } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 27, - "column" : 12, - "source_fragment" : "fabric_metadata.is_controller_packet_out = true" + "filename" : "include/control/slicing.p4", + "line" : 44, + "column" : 27, + "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..." } }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 29, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "filtering113", - "id" : 29, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_id"] + "value" : ["scalars", "userMetadata._tc27"] }, { - "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + } } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 113, - "column" : 12, - "source_fragment" : "fabric_metadata.vlan_id = hdr.vlan_tag.vlan_id" + "filename" : "include/control/slicing.p4", + "line" : 45, + "column" : 21, + "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..." } - }, + } + ] + }, + { + "name" : "FabricIngress.qos.set_queue", + "id" : 30, + "runtime_data" : [ { - "op" : "assign", + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 31, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", "parameters" : [ { - "type" : "field", - "value" : ["scalars", "userMetadata.vlan_pri"] - }, - { - "type" : "field", - "value" : ["vlan_tag", "pri"] + "type" : "header", + "value" : "standard_metadata" } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 114, - "column" : 12, - "source_fragment" : "fabric_metadata.vlan_pri = hdr.vlan_tag.pri" + "filename" : "include/control/slicing.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" } - }, + } + ] + }, + { + "name" : "lookup_md_init37", + "id" : 32, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_cfi"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["inner_tcp", "sport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 115, - "column" : 12, - "source_fragment" : "fabric_metadata.vlan_cfi = hdr.vlan_tag.cfi" + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.sport; ..." } - } - ] - }, - { - "name" : "filtering129", - "id" : 30, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_ttl"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { - "type" : "hexstr", - "value" : "0x41" + "type" : "field", + "value" : ["inner_tcp", "dport"] } ], "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 129, - "column" : 12, - "source_fragment" : "fabric_metadata.mpls_ttl = DEFAULT_MPLS_TTL + 1" + "filename" : "include/control/lookup_md_init.p4", + "line" : 38, + "column" : 32, + "source_fragment" : "= hdr.inner_tcp.dport; ..." } } ] }, { - "name" : "acl102", - "id" : 31, + "name" : "lookup_md_init40", + "id" : 33, "runtime_data" : [], "primitives" : [ { @@ -3118,18 +3377,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", - "value" : ["inner_tcp", "sport"] + "value" : ["inner_udp", "sport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.sport; ..." } }, { @@ -3137,25 +3396,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", - "value" : ["inner_tcp", "dport"] + "value" : ["inner_udp", "dport"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 103, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 41, + "column" : 32, + "source_fragment" : "= hdr.inner_udp.dport; ..." } } ] }, { - "name" : "acl105", - "id" : 32, + "name" : "lookup_md_init43", + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -3163,18 +3422,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["inner_udp", "sport"] + "value" : ["inner_icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 16, - "source_fragment" : "l4_sport = hdr.inner_udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_type; ..." } }, { @@ -3182,25 +3441,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["inner_udp", "dport"] + "value" : ["inner_icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 106, - "column" : 16, - "source_fragment" : "l4_dport = hdr.inner_udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 44, + "column" : 33, + "source_fragment" : "= hdr.inner_icmp.icmp_code; ..." } } ] }, { - "name" : "acl98", - "id" : 33, + "name" : "lookup_md_init32", + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3208,7 +3467,36 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "column" : 27, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { "type" : "field", @@ -3216,10 +3504,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 33, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." } }, { @@ -3227,7 +3515,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, { "type" : "field", @@ -3235,10 +3523,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 99, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 34, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." } }, { @@ -3246,7 +3534,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { "type" : "field", @@ -3254,17 +3542,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 100, - "column" : 12, - "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 35, + "column" : 28, + "source_fragment" : "= hdr.inner_ipv4.protocol; ..." } } ] }, { - "name" : "acl113", - "id" : 34, + "name" : "lookup_md_init52", + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3272,7 +3560,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3280,10 +3568,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 16, - "source_fragment" : "l4_sport = hdr.tcp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "column" : 32, + "source_fragment" : "= hdr.tcp.sport; ..." } }, { @@ -3291,7 +3579,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3299,17 +3587,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 114, - "column" : 16, - "source_fragment" : "l4_dport = hdr.tcp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 53, + "column" : 32, + "source_fragment" : "= hdr.tcp.dport; ..." } } ] }, { - "name" : "acl116", - "id" : 35, + "name" : "lookup_md_init55", + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3317,7 +3605,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { "type" : "field", @@ -3325,10 +3613,10 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 16, - "source_fragment" : "l4_sport = hdr.udp.sport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "column" : 32, + "source_fragment" : "= hdr.udp.sport; ..." } }, { @@ -3336,7 +3624,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "field", @@ -3344,17 +3632,17 @@ } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 117, - "column" : 16, - "source_fragment" : "l4_dport = hdr.udp.dport" + "filename" : "include/control/lookup_md_init.p4", + "line" : 56, + "column" : 32, + "source_fragment" : "= hdr.udp.dport; ..." } } ] }, { - "name" : "acl109", - "id" : 36, + "name" : "lookup_md_init58", + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -3362,18 +3650,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "field", - "value" : ["ipv4", "src_addr"] + "value" : ["icmp", "icmp_type"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 12, - "source_fragment" : "ipv4_src = hdr.ipv4.src_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_type; ..." } }, { @@ -3381,63 +3669,73 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { "type" : "field", - "value" : ["ipv4", "dst_addr"] + "value" : ["icmp", "icmp_code"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 110, - "column" : 12, - "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr" + "filename" : "include/control/lookup_md_init.p4", + "line" : 59, + "column" : 33, + "source_fragment" : "= hdr.icmp.icmp_code; ..." } - }, + } + ] + }, + { + "name" : "lookup_md_init47", + "id" : 39, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { - "type" : "field", - "value" : ["ipv4", "protocol"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 111, - "column" : 12, - "source_fragment" : "ip_proto = hdr.ipv4.protocol" + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "column" : 27, + "source_fragment" : "= true; ..." } - } - ] - }, - { - "name" : "acl27", - "id" : 37, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_src"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { - "type" : "hexstr", - "value" : "0x00000000" + "type" : "field", + "value" : ["ipv4", "src_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 48, + "column" : 28, + "source_fragment" : "= hdr.ipv4.src_addr; ..." } }, { @@ -3445,37 +3743,18 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ipv4_dst"] + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 28, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_dst = 0;" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_ip_proto"] - }, - { - "type" : "hexstr", - "value" : "0x00" + "value" : ["ipv4", "dst_addr"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 29, - "column" : 4, - "source_fragment" : "bit<8> ip_proto = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 49, + "column" : 28, + "source_fragment" : "= hdr.ipv4.dst_addr; ..." } }, { @@ -3483,44 +3762,25 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_sport"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 30, - "column" : 4, - "source_fragment" : "l4_port_t l4_sport = 0;" - } - }, - { - "op" : "assign", - "parameters" : [ { "type" : "field", - "value" : ["scalars", "acl_l4_dport"] - }, - { - "type" : "hexstr", - "value" : "0x0000" + "value" : ["ipv4", "protocol"] } ], "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 31, - "column" : 4, - "source_fragment" : "l4_port_t l4_dport = 0;" + "filename" : "include/control/lookup_md_init.p4", + "line" : 50, + "column" : 28, + "source_fragment" : "= hdr.ipv4.protocol; ..." } } ] }, { - "name" : "port_counter31", - "id" : 38, + "name" : "lookup_md_init23", + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -3528,130 +3788,66 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_8"] + "value" : ["scalars", "userMetadata._lkp_is_ipv40"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_spec"] - }, + "op" : "b2d", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0xffffffff" + "type" : "bool", + "value" : false } } } } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 38, - "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "column" : 23, + "source_fragment" : "= false; ..." } }, - { - "op" : "count", - "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.egress_port_counter" - }, - { - "type" : "field", - "value" : ["scalars", "tmp_8"] - } - ], - "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" - } - } - ] - }, - { - "name" : "port_counter34", - "id" : 39, - "runtime_data" : [], - "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_9"] + "value" : ["scalars", "userMetadata._lkp_ipv4_src1"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 39, - "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + "filename" : "include/control/lookup_md_init.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { - "op" : "count", + "op" : "assign", "parameters" : [ - { - "type" : "counter_array", - "value" : "FabricIngress.port_counters_control.ingress_port_counter" - }, { "type" : "field", - "value" : ["scalars", "tmp_9"] - } - ], - "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" - } - } - ] - }, - { - "name" : "FabricEgress.egress_next.pop_mpls_if_present", - "id" : 40, - "runtime_data" : [], - "primitives" : [ - { - "op" : "remove_header", - "parameters" : [ + "value" : ["scalars", "userMetadata._lkp_ipv4_dst2"] + }, { - "type" : "header", - "value" : "mpls" + "type" : "hexstr", + "value" : "0x00000000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 204, - "column" : 8, - "source_fragment" : "hdr.mpls.setInvalid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 25, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3659,40 +3855,18 @@ "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["scalars", "userMetadata._lkp_ip_proto3"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata.ip_eth_type"] - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 206, - "column" : 8, - "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type" - } - } - ] - }, - { - "name" : "FabricEgress.egress_next.set_mpls", - "id" : 41, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "mpls" + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 211, - "column" : 8, - "source_fragment" : "hdr.mpls.setValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 26, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3700,18 +3874,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "label"] + "value" : ["scalars", "userMetadata._lkp_l4_sport4"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata.mpls_label"] + "type" : "hexstr", + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 212, - "column" : 8, - "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label" + "filename" : "include/control/lookup_md_init.p4", + "line" : 27, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3719,18 +3893,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "tc"] + "value" : ["scalars", "userMetadata._lkp_l4_dport5"] }, { "type" : "hexstr", - "value" : "0x00" + "value" : "0x0000" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 213, - "column" : 8, - "source_fragment" : "hdr.mpls.tc = 3w0" + "filename" : "include/control/lookup_md_init.p4", + "line" : 28, + "column" : 24, + "source_fragment" : "= 0; ..." } }, { @@ -3738,18 +3912,18 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "bos"] + "value" : ["scalars", "userMetadata._lkp_icmp_type6"] }, { "type" : "hexstr", - "value" : "0x01" + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 214, - "column" : 8, - "source_fragment" : "hdr.mpls.bos = 1w1" + "filename" : "include/control/lookup_md_init.p4", + "line" : 29, + "column" : 25, + "source_fragment" : "= 0; ..." } }, { @@ -3757,59 +3931,59 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["scalars", "userMetadata._lkp_icmp_code7"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata.mpls_ttl"] + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 215, - "column" : 8, - "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl" + "filename" : "include/control/lookup_md_init.p4", + "line" : 30, + "column" : 25, + "source_fragment" : "= 0; ..." } - }, + } + ] + }, + { + "name" : "packetio25", + "id" : 41, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["eth_type", "value"] + "value" : ["standard_metadata", "egress_spec"] }, { - "type" : "hexstr", - "value" : "0x8847" + "type" : "field", + "value" : ["packet_out", "egress_port"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 130, - "column" : 31, - "source_fragment" : "0x8847; ..." + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" } - } - ] - }, - { - "name" : "FabricEgress.egress_next.push_vlan", - "id" : 42, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "add_header", + "op" : "remove_header", "parameters" : [ { "type" : "header", - "value" : "vlan_tag" + "value" : "packet_out" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 223, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.setValid()" + "filename" : "include/control/packetio.p4", + "line" : 26, + "column" : 12, + "source_fragment" : "hdr.packet_out.setInvalid()" } }, { @@ -3817,37 +3991,64 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "cfi"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] }, { - "type" : "field", - "value" : ["scalars", "userMetadata.vlan_cfi"] + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 224, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi" + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 53, + "source_fragment" : "= true; ..." } }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 29, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "filtering113", + "id" : 42, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "pri"] + "value" : ["scalars", "userMetadata._vlan_id9"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_pri"] + "value" : ["vlan_tag", "vlan_id"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 225, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri" + "filename" : "include/control/filtering.p4", + "line" : 113, + "column" : 36, + "source_fragment" : "= hdr.vlan_tag.vlan_id; ..." } }, { @@ -3855,18 +4056,18 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "eth_type"] + "value" : ["scalars", "userMetadata._vlan_pri10"] }, { - "type" : "hexstr", - "value" : "0x8100" + "type" : "field", + "value" : ["vlan_tag", "pri"] } ], "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 129, - "column" : 31, - "source_fragment" : "0x8100; ..." + "filename" : "include/control/filtering.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.pri; ..." } }, { @@ -3874,181 +4075,167 @@ "parameters" : [ { "type" : "field", - "value" : ["vlan_tag", "vlan_id"] + "value" : ["scalars", "userMetadata._vlan_cfi11"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.vlan_id"] + "value" : ["vlan_tag", "cfi"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 227, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id" + "filename" : "include/control/filtering.p4", + "line" : 115, + "column" : 37, + "source_fragment" : "= hdr.vlan_tag.cfi; ..." } } ] }, { - "name" : "FabricEgress.egress_next.pop_vlan", + "name" : "filtering129", "id" : 43, "runtime_data" : [], "primitives" : [ { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "vlan_tag" + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] + }, + { + "type" : "hexstr", + "value" : "0x41" } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 256, - "column" : 8, - "source_fragment" : "hdr.vlan_tag.setInvalid()" + "filename" : "include/control/filtering.p4", + "line" : 129, + "column" : 37, + "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..." } } ] }, { - "name" : "FabricEgress.egress_next.drop", + "name" : "port_counter31", "id" : 44, "runtime_data" : [], "primitives" : [ { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" - } - ], - "source_info" : { - "filename" : "include/control/next.p4", - "line" : 261, - "column" : 8, - "source_fragment" : "mark_to_drop(standard_metadata)" - } - } - ] - }, - { - "name" : "packetio41", - "id" : 45, - "runtime_data" : [], - "primitives" : [ - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 41, - "column" : 12, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "packetio44", - "id" : 46, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ + "type" : "field", + "value" : ["scalars", "tmp_8"] + }, { - "type" : "header", - "value" : "packet_in" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 44, - "column" : 12, - "source_fragment" : "hdr.packet_in.setValid()" + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" } }, { - "op" : "assign", + "op" : "count", "parameters" : [ { - "type" : "field", - "value" : ["packet_in", "ingress_port"] + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.egress_port_counter" }, { "type" : "field", - "value" : ["standard_metadata", "ingress_port"] + "value" : ["scalars", "tmp_8"] } ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 45, - "column" : 12, - "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" - } - }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 47, + "filename" : "include/control/port_counter.p4", + "line" : 31, "column" : 12, - "source_fragment" : "exit" + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" } } ] }, { - "name" : "next283", - "id" : 47, + "name" : "port_counter34", + "id" : 45, "runtime_data" : [], "primitives" : [ { - "op" : "mark_to_drop", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "field", + "value" : ["scalars", "tmp_9"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 283, - "column" : 12, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" } - } - ] - }, - { - "name" : "next310", - "id" : 48, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "count", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_9"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 310, - "column" : 35, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" } } ] }, { - "name" : "next309", - "id" : 49, + "name" : "slicing114", + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -4056,7 +4243,7 @@ "parameters" : [ { "type" : "field", - "value" : ["mpls", "ttl"] + "value" : ["scalars", "tmp_10"] }, { "type" : "expression", @@ -4067,150 +4254,1184 @@ "left" : { "type" : "expression", "value" : { - "op" : "+", + "op" : "|", "left" : { - "type" : "field", - "value" : ["mpls", "ttl"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + "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._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } } } } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 309, - "column" : 12, - "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 37, + "source_fragment" : "(bit<32>) slice_tc" } - } - ] - }, - { - "name" : "next314", - "id" : 50, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "mark_to_drop", + "op" : "execute_meter", "parameters" : [ { - "type" : "header", - "value" : "standard_metadata" + "type" : "meter_array", + "value" : "FabricIngress.qos.slice_tc_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_10"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._packet_color26"] } ], "source_info" : { - "filename" : "include/control/next.p4", - "line" : 314, - "column" : 39, - "source_fragment" : "mark_to_drop(standard_metadata)" + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color)" } - } - ] - }, - { - "name" : "next313", - "id" : 51, - "runtime_data" : [], - "primitives" : [ + }, { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["ipv4", "ttl"] + "value" : ["scalars", "userMetadata._dscp28"] }, { "type" : "expression", "value" : { "type" : "expression", "value" : { - "op" : "&", + "op" : "|", "left" : { "type" : "expression", "value" : { - "op" : "+", + "op" : "&", "left" : { - "type" : "field", - "value" : ["ipv4", "ttl"] + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._slice_id25"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x2" + } + } }, "right" : { "type" : "hexstr", - "value" : "0xff" + "value" : "0x3f" } } }, "right" : { - "type" : "hexstr", - "value" : "0xff" + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "userMetadata._tc27"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x07" + } + } } } } } ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 110, + "column" : 26, + "source_fragment" : "fabric_md.slice_id++fabric_md.tc; ..." + } + } + ] + }, + { + "name" : "nop", + "id" : 47, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.egress_next.pop_mpls_if_present", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], "source_info" : { "filename" : "include/control/next.p4", - "line" : 313, - "column" : 16, - "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + "line" : 204, + "column" : 8, + "source_fragment" : "hdr.mpls.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["eth_type", "value"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ip_eth_type8"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 206, + "column" : 8, + "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..." } } ] - } - ], - "pipelines" : [ + }, { - "name" : "ingress", - "id" : 0, - "source_info" : { - "filename" : "fabric.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "FabricIngress" - }, - "init_table" : "node_2", - "tables" : [ + "name" : "FabricEgress.egress_next.set_mpls", + "id" : 49, + "runtime_data" : [], + "primitives" : [ { - "name" : "tbl_packetio25", - "id" : 0, + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 25, - "column" : 42, - "source_fragment" : "= hdr.packet_out.egress_port; ..." - }, - "key" : [], - "match_type" : "exact", + "filename" : "include/control/next.p4", + "line" : 211, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_label12"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 212, + "column" : 8, + "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 213, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = 3w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 214, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._mpls_ttl13"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 215, + "column" : 8, + "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["eth_type", "value"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 147, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 50, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 223, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_cfi11"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 224, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_pri10"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 225, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 146, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._vlan_id9"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 227, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 51, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 256, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.drop", + "id" : 52, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 261, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 53, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 54, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 135, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, + { + "name" : "packetio41", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio44", + "id" : 56, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 45, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 47, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "next283", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 283, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next310", + "id" : 58, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 310, + "column" : 35, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next309", + "id" : 59, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 309, + "column" : 12, + "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1" + } + } + ] + }, + { + "name" : "next314", + "id" : 60, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 314, + "column" : 39, + "source_fragment" : "mark_to_drop(standard_metadata)" + } + } + ] + }, + { + "name" : "next313", + "id" : 61, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 313, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "slicing159", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 16, + "source_fragment" : "hdr.inner_ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing126", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._dscp28"] + } + ], + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp; ..." + } + } + ] + } + ], + "pipelines" : [ + { + "name" : "ingress", + "id" : 0, + "source_info" : { + "filename" : "fabric.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "FabricIngress" + }, + "init_table" : "tbl_lookup_md_init23", + "tables" : [ + { + "name" : "tbl_lookup_md_init23", + "id" : 0, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 23, + "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" : [40], + "actions" : ["lookup_md_init23"], + "base_default_next" : "node_3", + "next_tables" : { + "lookup_md_init23" : "node_3" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init32", + "id" : 1, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 32, + "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" : [35], + "actions" : ["lookup_md_init32"], + "base_default_next" : "node_5", + "next_tables" : { + "lookup_md_init32" : "node_5" + }, + "default_entry" : { + "action_id" : 35, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init37", + "id" : 2, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 37, + "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" : [32], + "actions" : ["lookup_md_init37"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init37" : "node_19" + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init40", + "id" : 3, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 40, + "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" : [33], + "actions" : ["lookup_md_init40"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init40" : "node_19" + }, + "default_entry" : { + "action_id" : 33, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init43", + "id" : 4, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 43, + "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" : [34], + "actions" : ["lookup_md_init43"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init43" : "node_19" + }, + "default_entry" : { + "action_id" : 34, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init47", + "id" : 5, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 47, + "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" : [39], + "actions" : ["lookup_md_init47"], + "base_default_next" : "node_13", + "next_tables" : { + "lookup_md_init47" : "node_13" + }, + "default_entry" : { + "action_id" : 39, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init52", + "id" : 6, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 52, + "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" : [36], + "actions" : ["lookup_md_init52"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init52" : "node_19" + }, + "default_entry" : { + "action_id" : 36, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init55", + "id" : 7, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 55, + "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" : [37], + "actions" : ["lookup_md_init55"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init55" : "node_19" + }, + "default_entry" : { + "action_id" : 37, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init58", + "id" : 8, + "source_info" : { + "filename" : "include/control/lookup_md_init.p4", + "line" : 58, + "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" : [38], + "actions" : ["lookup_md_init58"], + "base_default_next" : "node_19", + "next_tables" : { + "lookup_md_init58" : "node_19" + }, + "default_entry" : { + "action_id" : 38, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_packetio25", + "id" : 9, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 42, + "source_fragment" : "= hdr.packet_out.egress_port; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [41], + "actions" : ["packetio25"], + "base_default_next" : "FabricIngress.slice_tc_classifier.classifier", + "next_tables" : { + "packetio25" : "FabricIngress.slice_tc_classifier.classifier" + }, + "default_entry" : { + "action_id" : 41, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 10, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 49, + "column" : 10, + "source_fragment" : "classifier" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "ig_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_src", + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ipv4_dst", + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "ip_proto", + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_sport", + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "l4_dport", + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 512, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [28], - "actions" : ["packetio25"], - "base_default_next" : "node_4", + "action_ids" : [28, 29], + "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp"], + "base_default_next" : "node_22", "next_tables" : { - "packetio25" : "node_4" + "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "node_22", + "FabricIngress.slice_tc_classifier.trust_dscp" : "node_22" }, "default_entry" : { "action_id" : 28, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0", "0x0"], "action_entry_const" : true } }, { "name" : "tbl_filtering113", - "id" : 1, + "id" : 11, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 113, @@ -4224,14 +5445,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [29], + "action_ids" : [42], "actions" : ["filtering113"], - "base_default_next" : "node_6", + "base_default_next" : "node_24", "next_tables" : { - "filtering113" : "node_6" + "filtering113" : "node_24" }, "default_entry" : { - "action_id" : 29, + "action_id" : 42, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -4239,7 +5460,7 @@ }, { "name" : "tbl_filtering129", - "id" : 2, + "id" : 12, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 129, @@ -4253,14 +5474,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [30], + "action_ids" : [43], "actions" : ["filtering129"], "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", "next_tables" : { "filtering129" : "FabricIngress.filtering.ingress_port_vlan" }, "default_entry" : { - "action_id" : 30, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -4268,7 +5489,7 @@ }, { "name" : "FabricIngress.filtering.ingress_port_vlan", - "id" : 3, + "id" : 13, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 55, @@ -4318,7 +5539,7 @@ }, { "name" : "FabricIngress.filtering.fwd_classifier", - "id" : 4, + "id" : 14, "source_info" : { "filename" : "include/control/filtering.p4", "line" : 94, @@ -4347,7 +5568,7 @@ { "match_type" : "exact", "name" : "ip_eth_type", - "target" : ["scalars", "userMetadata.ip_eth_type"], + "target" : ["scalars", "userMetadata._ip_eth_type8"], "mask" : null } ], @@ -4359,9 +5580,9 @@ "direct_meters" : null, "action_ids" : [11], "actions" : ["FabricIngress.filtering.set_forwarding_type"], - "base_default_next" : "node_10", + "base_default_next" : "node_28", "next_tables" : { - "FabricIngress.filtering.set_forwarding_type" : "node_10" + "FabricIngress.filtering.set_forwarding_type" : "node_28" }, "default_entry" : { "action_id" : 11, @@ -4372,7 +5593,7 @@ }, { "name" : "FabricIngress.forwarding.bridging", - "id" : 5, + "id" : 15, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 46, @@ -4383,7 +5604,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata.vlan_id"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -4401,10 +5622,10 @@ "direct_meters" : null, "action_ids" : [12, 0], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_bridging" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.set_next_id_bridging" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 0, @@ -4415,7 +5636,7 @@ }, { "name" : "FabricIngress.forwarding.mpls", - "id" : 6, + "id" : 16, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 71, @@ -4426,7 +5647,7 @@ { "match_type" : "exact", "name" : "mpls_label", - "target" : ["scalars", "userMetadata.mpls_label"], + "target" : ["scalars", "userMetadata._mpls_label12"], "mask" : null } ], @@ -4438,10 +5659,10 @@ "direct_meters" : null, "action_ids" : [13, 1], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.pop_mpls_and_next" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.pop_mpls_and_next" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 1, @@ -4452,7 +5673,7 @@ }, { "name" : "FabricIngress.forwarding.routing_v4", - "id" : 7, + "id" : 17, "source_info" : { "filename" : "include/control/forwarding.p4", "line" : 108, @@ -4463,7 +5684,7 @@ { "match_type" : "lpm", "name" : "ipv4_dst", - "target" : ["scalars", "userMetadata.ipv4_dst_addr"], + "target" : ["scalars", "userMetadata._ipv4_dst_addr24"], "mask" : null } ], @@ -4475,11 +5696,11 @@ "direct_meters" : null, "action_ids" : [14, 15, 2], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"], - "base_default_next" : "node_17", + "base_default_next" : "node_35", "next_tables" : { - "FabricIngress.forwarding.set_next_id_routing_v4" : "node_17", - "FabricIngress.forwarding.nop_routing_v4" : "node_17", - "nop" : "node_17" + "FabricIngress.forwarding.set_next_id_routing_v4" : "node_35", + "FabricIngress.forwarding.nop_routing_v4" : "node_35", + "nop" : "node_35" }, "default_entry" : { "action_id" : 2, @@ -4490,7 +5711,7 @@ }, { "name" : "FabricIngress.pre_next.next_mpls", - "id" : 8, + "id" : 18, "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 36, @@ -4501,7 +5722,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata.next_id"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -4527,7 +5748,7 @@ }, { "name" : "FabricIngress.pre_next.next_vlan", - "id" : 9, + "id" : 19, "source_info" : { "filename" : "include/control/pre_next.p4", "line" : 73, @@ -4538,7 +5759,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata.next_id"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -4550,216 +5771,13 @@ "direct_meters" : null, "action_ids" : [17, 4], "actions" : ["FabricIngress.pre_next.set_vlan", "nop"], - "base_default_next" : "tbl_acl27", - "next_tables" : { - "FabricIngress.pre_next.set_vlan" : "tbl_acl27", - "nop" : "tbl_acl27" - }, - "default_entry" : { - "action_id" : 4, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl27", - "id" : 10, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 27, - "column" : 4, - "source_fragment" : "ipv4_addr_t ipv4_src = 0; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [37], - "actions" : ["acl27"], - "base_default_next" : "node_21", - "next_tables" : { - "acl27" : "node_21" - }, - "default_entry" : { - "action_id" : 37, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl98", - "id" : 11, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 98, - "column" : 21, - "source_fragment" : "= hdr.inner_ipv4.src_addr; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [33], - "actions" : ["acl98"], - "base_default_next" : "node_23", - "next_tables" : { - "acl98" : "node_23" - }, - "default_entry" : { - "action_id" : 33, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl102", - "id" : 12, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 102, - "column" : 25, - "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" : [31], - "actions" : ["acl102"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl102" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 31, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl105", - "id" : 13, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 105, - "column" : 25, - "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" : [32], - "actions" : ["acl105"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl105" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 32, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl109", - "id" : 14, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 109, - "column" : 21, - "source_fragment" : "= hdr.ipv4.src_addr; ..." - }, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [36], - "actions" : ["acl109"], - "base_default_next" : "node_29", - "next_tables" : { - "acl109" : "node_29" - }, - "default_entry" : { - "action_id" : 36, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl113", - "id" : 15, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 113, - "column" : 25, - "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" : [34], - "actions" : ["acl113"], - "base_default_next" : "FabricIngress.acl.acl", - "next_tables" : { - "acl113" : "FabricIngress.acl.acl" - }, - "default_entry" : { - "action_id" : 34, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_acl116", - "id" : 16, - "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 116, - "column" : 25, - "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" : [35], - "actions" : ["acl116"], "base_default_next" : "FabricIngress.acl.acl", "next_tables" : { - "acl116" : "FabricIngress.acl.acl" + "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl", + "nop" : "FabricIngress.acl.acl" }, "default_entry" : { - "action_id" : 35, + "action_id" : 4, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -4767,10 +5785,10 @@ }, { "name" : "FabricIngress.acl.acl", - "id" : 17, + "id" : 20, "source_info" : { "filename" : "include/control/acl.p4", - "line" : 66, + "line" : 59, "column" : 10, "source_fragment" : "acl" }, @@ -4808,19 +5826,19 @@ { "match_type" : "ternary", "name" : "ipv4_src", - "target" : ["scalars", "acl_ipv4_src"], + "target" : ["scalars", "userMetadata._lkp_ipv4_src1"], "mask" : null }, { "match_type" : "ternary", "name" : "ipv4_dst", - "target" : ["scalars", "acl_ipv4_dst"], + "target" : ["scalars", "userMetadata._lkp_ipv4_dst2"], "mask" : null }, { "match_type" : "ternary", "name" : "ip_proto", - "target" : ["scalars", "acl_ip_proto"], + "target" : ["scalars", "userMetadata._lkp_ip_proto3"], "mask" : null }, { @@ -4838,19 +5856,19 @@ { "match_type" : "ternary", "name" : "l4_sport", - "target" : ["scalars", "acl_l4_sport"], + "target" : ["scalars", "userMetadata._lkp_l4_sport4"], "mask" : null }, { "match_type" : "ternary", "name" : "l4_dport", - "target" : ["scalars", "acl_l4_dport"], + "target" : ["scalars", "userMetadata._lkp_l4_dport5"], "mask" : null }, { "match_type" : "ternary", "name" : "port_type", - "target" : ["scalars", "userMetadata.port_type"], + "target" : ["scalars", "userMetadata._port_type29"], "mask" : null } ], @@ -4862,13 +5880,13 @@ "direct_meters" : null, "action_ids" : [18, 19, 20, 21, 22], "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"], - "base_default_next" : "node_34", + "base_default_next" : "node_39", "next_tables" : { - "FabricIngress.acl.set_next_id_acl" : "node_34", - "FabricIngress.acl.punt_to_cpu" : "node_34", - "FabricIngress.acl.set_clone_session_id" : "node_34", - "FabricIngress.acl.drop" : "node_34", - "FabricIngress.acl.nop_acl" : "node_34" + "FabricIngress.acl.set_next_id_acl" : "node_39", + "FabricIngress.acl.punt_to_cpu" : "node_39", + "FabricIngress.acl.set_clone_session_id" : "node_39", + "FabricIngress.acl.drop" : "node_39", + "FabricIngress.acl.nop_acl" : "node_39" }, "default_entry" : { "action_id" : 22, @@ -4879,7 +5897,7 @@ }, { "name" : "FabricIngress.next.xconnect", - "id" : 18, + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", "line" : 68, @@ -4896,7 +5914,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata.next_id"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -4923,7 +5941,7 @@ }, { "name" : "FabricIngress.next.hashed", - "id" : 19, + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", "line" : 138, @@ -4934,7 +5952,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata.next_id"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -4956,7 +5974,7 @@ }, { "name" : "FabricIngress.next.multicast", - "id" : 20, + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", "line" : 171, @@ -4967,7 +5985,7 @@ { "match_type" : "exact", "name" : "next_id", - "target" : ["scalars", "userMetadata.next_id"], + "target" : ["scalars", "userMetadata._next_id17"], "mask" : null } ], @@ -4979,26 +5997,84 @@ "direct_meters" : null, "action_ids" : [27, 7], "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"], - "base_default_next" : "node_38", + "base_default_next" : "node_43", + "next_tables" : { + "FabricIngress.next.set_mcast_group_id" : "node_43", + "nop" : "node_43" + }, + "default_entry" : { + "action_id" : 7, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_port_counter31", + "id" : 24, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [44], + "actions" : ["port_counter31"], + "base_default_next" : "node_45", + "next_tables" : { + "port_counter31" : "node_45" + }, + "default_entry" : { + "action_id" : 44, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_port_counter34", + "id" : 25, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45], + "actions" : ["port_counter34"], + "base_default_next" : "tbl_slicing114", "next_tables" : { - "FabricIngress.next.set_mcast_group_id" : "node_38", - "nop" : "node_38" + "port_counter34" : "tbl_slicing114" }, "default_entry" : { - "action_id" : 7, + "action_id" : 45, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_port_counter31", - "id" : 21, + "name" : "tbl_slicing114", + "id" : 26, "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 31, - "column" : 12, - "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + "filename" : "include/control/slicing.p4", + "line" : 114, + "column" : 8, + "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) slice_tc, fabric_md.packet_color); ..." }, "key" : [], "match_type" : "exact", @@ -5007,45 +6083,65 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], - "actions" : ["port_counter31"], - "base_default_next" : "node_40", + "action_ids" : [46], + "actions" : ["slicing114"], + "base_default_next" : "FabricIngress.qos.queues", "next_tables" : { - "port_counter31" : "node_40" + "slicing114" : "FabricIngress.qos.queues" }, "default_entry" : { - "action_id" : 38, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_port_counter34", - "id" : 22, + "name" : "FabricIngress.qos.queues", + "id" : 27, "source_info" : { - "filename" : "include/control/port_counter.p4", - "line" : 34, - "column" : 12, - "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + "filename" : "include/control/slicing.p4", + "line" : 93, + "column" : 10, + "source_fragment" : "queues" }, - "key" : [], - "match_type" : "exact", + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._slice_id25"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "tc", + "target" : ["scalars", "userMetadata._tc27"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "color", + "target" : ["scalars", "userMetadata._packet_color26"], + "mask" : null + } + ], + "match_type" : "ternary", "type" : "simple", - "max_size" : 1024, - "with_counters" : false, + "max_size" : 128, + "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39], - "actions" : ["port_counter34"], + "action_ids" : [30, 31], + "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"], "base_default_next" : null, "next_tables" : { - "port_counter34" : null + "FabricIngress.qos.set_queue" : null, + "FabricIngress.qos.meter_drop" : null }, "default_entry" : { - "action_id" : 39, + "action_id" : 30, "action_const" : true, - "action_data" : [], + "action_data" : ["0x0"], "action_entry_const" : true } } @@ -5066,23 +6162,23 @@ "input" : [ { "type" : "field", - "value" : ["scalars", "userMetadata.ipv4_src_addr"] + "value" : ["scalars", "userMetadata._ipv4_src_addr23"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.ipv4_dst_addr"] + "value" : ["scalars", "userMetadata._ipv4_dst_addr24"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.ip_proto"] + "value" : ["scalars", "userMetadata._ip_proto20"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.l4_sport"] + "value" : ["scalars", "userMetadata._l4_sport21"] }, { "type" : "field", - "value" : ["scalars", "userMetadata.l4_dport"] + "value" : ["scalars", "userMetadata._l4_dport22"] } ] } @@ -5090,13 +6186,13 @@ ], "conditionals" : [ { - "name" : "node_2", + "name" : "node_3", "id" : 0, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 24, + "filename" : "include/control/lookup_md_init.p4", + "line" : 31, "column" : 12, - "source_fragment" : "hdr.packet_out.isValid()" + "source_fragment" : "hdr.inner_ipv4.isValid()" }, "expression" : { "type" : "expression", @@ -5105,21 +6201,21 @@ "left" : null, "right" : { "type" : "field", - "value" : ["packet_out", "$valid$"] + "value" : ["inner_ipv4", "$valid$"] } } }, - "true_next" : "tbl_packetio25", - "false_next" : "node_4" + "true_next" : "tbl_lookup_md_init32", + "false_next" : "node_11" }, { - "name" : "node_4", + "name" : "node_5", "id" : 1, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 112, - "column" : 12, - "source_fragment" : "hdr.vlan_tag.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 36, + "column" : 16, + "source_fragment" : "hdr.inner_tcp.isValid()" }, "expression" : { "type" : "expression", @@ -5128,205 +6224,211 @@ "left" : null, "right" : { "type" : "field", - "value" : ["vlan_tag", "$valid$"] + "value" : ["inner_tcp", "$valid$"] } } }, - "true_next" : "tbl_filtering113", - "false_next" : "node_6" + "true_next" : "tbl_lookup_md_init37", + "false_next" : "node_7" }, { - "name" : "node_6", + "name" : "node_7", "id" : 2, "source_info" : { - "filename" : "include/control/filtering.p4", - "line" : 124, - "column" : 12, - "source_fragment" : "!hdr.mpls.isValid()" + "filename" : "include/control/lookup_md_init.p4", + "line" : 39, + "column" : 23, + "source_fragment" : "hdr.inner_udp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["mpls", "$valid$"] - } - } + "type" : "field", + "value" : ["inner_udp", "$valid$"] } } }, - "true_next" : "tbl_filtering129", - "false_next" : "FabricIngress.filtering.ingress_port_vlan" + "true_next" : "tbl_lookup_md_init40", + "false_next" : "node_9" }, { - "name" : "node_10", + "name" : "node_9", "id" : 3, "source_info" : { - "filename" : "fabric.p4", - "line" : 71, - "column" : 12, - "source_fragment" : "fabric_metadata.skip_forwarding" + "filename" : "include/control/lookup_md_init.p4", + "line" : 42, + "column" : 23, + "source_fragment" : "hdr.inner_icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata.skip_forwarding"] - } - } + "type" : "field", + "value" : ["inner_icmp", "$valid$"] } } }, - "true_next" : "node_11", - "false_next" : "node_17" + "true_next" : "tbl_lookup_md_init43", + "false_next" : "node_19" }, { "name" : "node_11", "id" : 4, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 150, - "column" : 12, - "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + "filename" : "include/control/lookup_md_init.p4", + "line" : 46, + "column" : 19, + "source_fragment" : "hdr.ipv4.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata.fwd_type"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x00" + "type" : "field", + "value" : ["ipv4", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.bridging", - "false_next" : "node_13" + "true_next" : "tbl_lookup_md_init47", + "false_next" : "node_19" }, { "name" : "node_13", "id" : 5, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 151, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + "filename" : "include/control/lookup_md_init.p4", + "line" : 51, + "column" : 16, + "source_fragment" : "hdr.tcp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata.fwd_type"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "field", + "value" : ["tcp", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.mpls", + "true_next" : "tbl_lookup_md_init52", "false_next" : "node_15" }, { "name" : "node_15", "id" : 6, "source_info" : { - "filename" : "include/control/forwarding.p4", - "line" : 152, - "column" : 17, - "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + "filename" : "include/control/lookup_md_init.p4", + "line" : 54, + "column" : 23, + "source_fragment" : "hdr.udp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["scalars", "userMetadata.fwd_type"] - }, + "op" : "d2b", + "left" : null, "right" : { - "type" : "hexstr", - "value" : "0x02" + "type" : "field", + "value" : ["udp", "$valid$"] } } }, - "true_next" : "FabricIngress.forwarding.routing_v4", + "true_next" : "tbl_lookup_md_init55", "false_next" : "node_17" }, { "name" : "node_17", "id" : 7, "source_info" : { - "filename" : "fabric.p4", - "line" : 74, - "column" : 12, - "source_fragment" : "fabric_metadata.skip_next" + "filename" : "include/control/lookup_md_init.p4", + "line" : 57, + "column" : 23, + "source_fragment" : "hdr.icmp.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "not", + "op" : "d2b", "left" : null, "right" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["scalars", "userMetadata.skip_next"] - } - } + "type" : "field", + "value" : ["icmp", "$valid$"] } } }, - "true_next" : "FabricIngress.pre_next.next_mpls", - "false_next" : "tbl_acl27" + "true_next" : "tbl_lookup_md_init58", + "false_next" : "node_19" }, { - "name" : "node_21", + "name" : "node_19", "id" : 8, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 97, + "filename" : "include/control/packetio.p4", + "line" : 24, "column" : 12, - "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()" + "source_fragment" : "hdr.packet_out.isValid()" }, "expression" : { "type" : "expression", "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["gtpu", "$valid$"] - } - } - }, + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["packet_out", "$valid$"] + } + } + }, + "true_next" : "tbl_packetio25", + "false_next" : "FabricIngress.slice_tc_classifier.classifier" + }, + { + "name" : "node_22", + "id" : 9, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 112, + "column" : 12, + "source_fragment" : "hdr.vlan_tag.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["vlan_tag", "$valid$"] + } + } + }, + "true_next" : "tbl_filtering113", + "false_next" : "node_24" + }, + { + "name" : "node_24", + "id" : 10, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 124, + "column" : 12, + "source_fragment" : "!hdr.mpls.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, "right" : { "type" : "expression", "value" : { @@ -5334,136 +6436,159 @@ "left" : null, "right" : { "type" : "field", - "value" : ["inner_ipv4", "$valid$"] + "value" : ["mpls", "$valid$"] } } } } }, - "true_next" : "tbl_acl98", - "false_next" : "node_27" + "true_next" : "tbl_filtering129", + "false_next" : "FabricIngress.filtering.ingress_port_vlan" }, { - "name" : "node_23", - "id" : 9, + "name" : "node_28", + "id" : 11, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 101, - "column" : 16, - "source_fragment" : "hdr.inner_tcp.isValid()" + "filename" : "fabric.p4", + "line" : 80, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_forwarding" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["inner_tcp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_forwarding14"] + } + } } } }, - "true_next" : "tbl_acl102", - "false_next" : "node_25" + "true_next" : "node_29", + "false_next" : "node_35" }, { - "name" : "node_25", - "id" : 10, + "name" : "node_29", + "id" : 12, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 104, - "column" : 23, - "source_fragment" : "hdr.inner_udp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 150, + "column" : 12, + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["inner_udp", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type16"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" } } }, - "true_next" : "tbl_acl105", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_31" }, { - "name" : "node_27", - "id" : 11, + "name" : "node_31", + "id" : 13, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 108, - "column" : 19, - "source_fragment" : "hdr.ipv4.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 151, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["ipv4", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type16"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" } } }, - "true_next" : "tbl_acl109", - "false_next" : "FabricIngress.acl.acl" + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_33" }, { - "name" : "node_29", - "id" : 12, + "name" : "node_33", + "id" : 14, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 112, - "column" : 16, - "source_fragment" : "hdr.tcp.isValid()" + "filename" : "include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", - "left" : null, - "right" : { + "op" : "==", + "left" : { "type" : "field", - "value" : ["tcp", "$valid$"] + "value" : ["scalars", "userMetadata._fwd_type16"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" } } }, - "true_next" : "tbl_acl113", - "false_next" : "node_31" + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "node_35" }, { - "name" : "node_31", - "id" : 13, + "name" : "node_35", + "id" : 15, "source_info" : { - "filename" : "include/control/acl.p4", - "line" : 115, - "column" : 23, - "source_fragment" : "hdr.udp.isValid()" + "filename" : "fabric.p4", + "line" : 83, + "column" : 12, + "source_fragment" : "fabric_metadata.skip_next" }, "expression" : { "type" : "expression", "value" : { - "op" : "d2b", + "op" : "not", "left" : null, "right" : { - "type" : "field", - "value" : ["udp", "$valid$"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "userMetadata._skip_next15"] + } + } } } }, - "true_next" : "tbl_acl116", + "true_next" : "FabricIngress.pre_next.next_mpls", "false_next" : "FabricIngress.acl.acl" }, { - "name" : "node_34", - "id" : 14, + "name" : "node_39", + "id" : 16, "source_info" : { "filename" : "fabric.p4", - "line" : 78, + "line" : 87, "column" : 12, "source_fragment" : "fabric_metadata.skip_next" }, @@ -5479,18 +6604,18 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata.skip_next"] + "value" : ["scalars", "userMetadata._skip_next15"] } } } } }, - "false_next" : null, - "true_next" : "FabricIngress.next.xconnect" + "true_next" : "FabricIngress.next.xconnect", + "false_next" : "tbl_slicing114" }, { - "name" : "node_38", - "id" : 15, + "name" : "node_43", + "id" : 17, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 30, @@ -5512,11 +6637,11 @@ } }, "true_next" : "tbl_port_counter31", - "false_next" : "node_40" + "false_next" : "node_45" }, { - "name" : "node_40", - "id" : 16, + "name" : "node_45", + "id" : 18, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 33, @@ -5537,8 +6662,8 @@ } } }, - "false_next" : null, - "true_next" : "tbl_port_counter34" + "true_next" : "tbl_port_counter34", + "false_next" : "tbl_slicing114" } ] }, @@ -5547,15 +6672,15 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 96, + "line" : 105, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_44", + "init_table" : "node_51", "tables" : [ { "name" : "tbl_packetio41", - "id" : 23, + "id" : 28, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 41, @@ -5569,14 +6694,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], + "action_ids" : [55], "actions" : ["packetio41"], - "base_default_next" : "node_46", + "base_default_next" : "node_53", "next_tables" : { - "packetio41" : "node_46" + "packetio41" : "node_53" }, "default_entry" : { - "action_id" : 45, + "action_id" : 55, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5584,7 +6709,7 @@ }, { "name" : "tbl_packetio44", - "id" : 24, + "id" : 29, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 44, @@ -5598,14 +6723,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46], + "action_ids" : [56], "actions" : ["packetio44"], - "base_default_next" : "node_48", + "base_default_next" : "node_55", "next_tables" : { - "packetio44" : "node_48" + "packetio44" : "node_55" }, "default_entry" : { - "action_id" : 46, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5613,7 +6738,7 @@ }, { "name" : "tbl_next283", - "id" : 25, + "id" : 30, "source_info" : { "filename" : "include/control/next.p4", "line" : 283, @@ -5627,14 +6752,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], + "action_ids" : [57], "actions" : ["next283"], - "base_default_next" : "node_50", + "base_default_next" : "node_57", "next_tables" : { - "next283" : "node_50" + "next283" : "node_57" }, "default_entry" : { - "action_id" : 47, + "action_id" : 57, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5642,7 +6767,7 @@ }, { "name" : "tbl_egress_next_pop_mpls_if_present", - "id" : 26, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -5656,14 +6781,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], + "action_ids" : [48], "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 40, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5671,7 +6796,7 @@ }, { "name" : "tbl_egress_next_set_mpls", - "id" : 27, + "id" : 32, "source_info" : { "filename" : "include/control/next.p4", "line" : 289, @@ -5685,14 +6810,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], + "action_ids" : [49], "actions" : ["FabricEgress.egress_next.set_mpls"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 41, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5700,7 +6825,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 28, + "id" : 33, "source_info" : { "filename" : "include/control/next.p4", "line" : 265, @@ -5711,7 +6836,7 @@ { "match_type" : "exact", "name" : "vlan_id", - "target" : ["scalars", "userMetadata.vlan_id"], + "target" : ["scalars", "userMetadata._vlan_id9"], "mask" : null }, { @@ -5727,16 +6852,16 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [42, 43, 44], + "action_ids" : [50, 51, 52], "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], - "base_default_next" : "node_55", + "base_default_next" : "node_62", "next_tables" : { - "FabricEgress.egress_next.push_vlan" : "node_55", - "FabricEgress.egress_next.pop_vlan" : "node_55", - "FabricEgress.egress_next.drop" : "node_55" + "FabricEgress.egress_next.push_vlan" : "node_62", + "FabricEgress.egress_next.pop_vlan" : "node_62", + "FabricEgress.egress_next.drop" : "node_62" }, "default_entry" : { - "action_id" : 44, + "action_id" : 52, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5744,7 +6869,7 @@ }, { "name" : "tbl_next309", - "id" : 29, + "id" : 34, "source_info" : { "filename" : "include/control/next.p4", "line" : 309, @@ -5758,14 +6883,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], + "action_ids" : [59], "actions" : ["next309"], - "base_default_next" : "node_57", + "base_default_next" : "node_64", "next_tables" : { - "next309" : "node_57" + "next309" : "node_64" }, "default_entry" : { - "action_id" : 49, + "action_id" : 59, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5773,7 +6898,7 @@ }, { "name" : "tbl_next310", - "id" : 30, + "id" : 35, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -5787,14 +6912,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], + "action_ids" : [58], "actions" : ["next310"], - "base_default_next" : null, + "base_default_next" : "tbl_slicing126", "next_tables" : { - "next310" : null + "next310" : "tbl_slicing126" }, "default_entry" : { - "action_id" : 48, + "action_id" : 58, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5802,7 +6927,7 @@ }, { "name" : "tbl_next313", - "id" : 31, + "id" : 36, "source_info" : { "filename" : "include/control/next.p4", "line" : 313, @@ -5816,14 +6941,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [61], "actions" : ["next313"], - "base_default_next" : "node_61", + "base_default_next" : "node_68", "next_tables" : { - "next313" : "node_61" + "next313" : "node_68" }, "default_entry" : { - "action_id" : 51, + "action_id" : 61, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5831,7 +6956,7 @@ }, { "name" : "tbl_next314", - "id" : 32, + "id" : 37, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -5845,14 +6970,109 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], + "action_ids" : [60], "actions" : ["next314"], + "base_default_next" : "tbl_slicing126", + "next_tables" : { + "next314" : "tbl_slicing126" + }, + "default_entry" : { + "action_id" : 60, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing126", + "id" : 38, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 126, + "column" : 4, + "source_fragment" : "bit<6> tmp_dscp = fabric_md.dscp;" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [63], + "actions" : ["slicing126"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing126" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 63, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 39, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 138, + "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" : [53, 54, 47], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], + "base_default_next" : null, + "next_tables" : { + "__MISS__" : null, + "__HIT__" : "node_72" + }, + "default_entry" : { + "action_id" : 47, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing159", + "id" : 40, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 159, + "column" : 36, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62], + "actions" : ["slicing159"], "base_default_next" : null, "next_tables" : { - "next314" : null + "slicing159" : null }, "default_entry" : { - "action_id" : 50, + "action_id" : 62, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5862,13 +7082,13 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_44", - "id" : 17, + "name" : "node_51", + "id" : 19, "source_info" : { - "filename" : "include/control/packetio.p4", - "line" : 39, - "column" : 12, - "source_fragment" : "fabric_metadata.is_controller_packet_out" + "filename" : "fabric.p4", + "line" : 118, + "column" : 33, + "source_fragment" : "fabric_metadata" }, "expression" : { "type" : "expression", @@ -5877,16 +7097,16 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata.is_controller_packet_out"] + "value" : ["scalars", "userMetadata._is_controller_packet_out19"] } } }, "true_next" : "tbl_packetio41", - "false_next" : "node_46" + "false_next" : "node_53" }, { - "name" : "node_46", - "id" : 18, + "name" : "node_53", + "id" : 20, "source_info" : { "filename" : "include/control/packetio.p4", "line" : 43, @@ -5908,11 +7128,11 @@ } }, "true_next" : "tbl_packetio44", - "false_next" : "node_48" + "false_next" : "node_55" }, { - "name" : "node_48", - "id" : 19, + "name" : "node_55", + "id" : 21, "source_info" : { "filename" : "include/control/next.p4", "line" : 281, @@ -5930,7 +7150,7 @@ "left" : null, "right" : { "type" : "field", - "value" : ["scalars", "userMetadata.is_multicast"] + "value" : ["scalars", "userMetadata._is_multicast18"] } } }, @@ -5951,11 +7171,11 @@ } }, "true_next" : "tbl_next283", - "false_next" : "node_50" + "false_next" : "node_57" }, { - "name" : "node_50", - "id" : 20, + "name" : "node_57", + "id" : 22, "source_info" : { "filename" : "include/control/next.p4", "line" : 286, @@ -5968,7 +7188,7 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata.mpls_label"] + "value" : ["scalars", "userMetadata._mpls_label12"] }, "right" : { "type" : "hexstr", @@ -5976,12 +7196,12 @@ } } }, - "true_next" : "node_51", + "true_next" : "node_58", "false_next" : "tbl_egress_next_set_mpls" }, { - "name" : "node_51", - "id" : 21, + "name" : "node_58", + "id" : 23, "source_info" : { "filename" : "include/control/next.p4", "line" : 287, @@ -6003,8 +7223,8 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_55", - "id" : 22, + "name" : "node_62", + "id" : 24, "source_info" : { "filename" : "include/control/next.p4", "line" : 308, @@ -6023,11 +7243,11 @@ } }, "true_next" : "tbl_next309", - "false_next" : "node_59" + "false_next" : "node_66" }, { - "name" : "node_57", - "id" : 23, + "name" : "node_64", + "id" : 25, "source_info" : { "filename" : "include/control/next.p4", "line" : 310, @@ -6048,12 +7268,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_next310" + "true_next" : "tbl_next310", + "false_next" : "tbl_slicing126" }, { - "name" : "node_59", - "id" : 24, + "name" : "node_66", + "id" : 26, "source_info" : { "filename" : "include/control/next.p4", "line" : 312, @@ -6081,7 +7301,7 @@ "op" : "!=", "left" : { "type" : "field", - "value" : ["scalars", "userMetadata.fwd_type"] + "value" : ["scalars", "userMetadata._fwd_type16"] }, "right" : { "type" : "hexstr", @@ -6091,12 +7311,12 @@ } } }, - "false_next" : null, - "true_next" : "tbl_next313" + "true_next" : "tbl_next313", + "false_next" : "tbl_slicing126" }, { - "name" : "node_61", - "id" : 25, + "name" : "node_68", + "id" : 27, "source_info" : { "filename" : "include/control/next.p4", "line" : 314, @@ -6117,8 +7337,31 @@ } } }, + "true_next" : "tbl_next314", + "false_next" : "tbl_slicing126" + }, + { + "name" : "node_72", + "id" : 28, + "source_info" : { + "filename" : "include/control/slicing.p4", + "line" : 158, + "column" : 16, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, "false_next" : null, - "true_next" : "tbl_next314" + "true_next" : "tbl_slicing159" } ] } diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt index 2765d9f69a5..a21c8cc3266 100644 --- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt +++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt @@ -390,6 +390,92 @@ tables { 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 + } + const_default_action_id: 23786376 + direct_resource_ids: 334706097 + size: 512 +} +tables { + preamble { + id: 36435258 + name: "FabricIngress.qos.queues" + alias: "queues" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "tc" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 3 + 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: 49262446 @@ -423,6 +509,32 @@ tables { 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 +} actions { preamble { id: 28485346 @@ -660,6 +772,49 @@ actions { bitwidth: 16 } } +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: 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: 30307755 @@ -681,6 +836,20 @@ actions { 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" + } +} action_profiles { preamble { id: 291115404 @@ -824,6 +993,28 @@ direct_counters { } 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: 318892680 @@ -835,6 +1026,17 @@ direct_counters { } direct_table_id: 49262446 } +meters { + preamble { + id: 348573637 + name: "FabricIngress.qos.slice_tc_meter" + alias: "slice_tc_meter" + } + spec { + unit: BYTES + } + size: 64 +} controller_packet_metadata { preamble { id: 81826293 diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java index e4905728da6..a07826d6b74 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java @@ -32,60 +32,49 @@ public class FabricUpfTranslatorTest { @Test public void fabricEntryToUplinkPdrTest() { - PacketDetectionRule expectedPdr = TestUpfConstants.UPLINK_PDR; - PacketDetectionRule translatedPdr; - try { - translatedPdr = upfTranslator.fabricEntryToPdr(TestUpfConstants.FABRIC_UPLINK_PDR); - } catch (UpfProgrammableException e) { - assertThat("Fabric uplink PDR should translate to abstract PDR without error.", false); - return; - } - assertThat("Translated PDR should be uplink.", translatedPdr.matchesEncapped()); - assertThat(translatedPdr, equalTo(expectedPdr)); + fabricToPdrUplink(TestUpfConstants.UPLINK_PDR, TestUpfConstants.FABRIC_UPLINK_PDR); } @Test - public void fabricEntryToUplinkPriorityPdrTest() { - PacketDetectionRule expectedPdr = TestUpfConstants.UPLINK_PRIORITY_PDR; + public void fabricEntryToUplinkQosPdrTest() { + fabricToPdrUplink(TestUpfConstants.UPLINK_QOS_PDR, TestUpfConstants.FABRIC_UPLINK_QOS_PDR); + fabricToPdrUplink(TestUpfConstants.UPLINK_QOS_4G_PDR, TestUpfConstants.FABRIC_UPLINK_QOS_4G_PDR); + } + + private void fabricToPdrUplink(PacketDetectionRule expected, FlowRule fabricFlow) { PacketDetectionRule translatedPdr; try { - translatedPdr = upfTranslator.fabricEntryToPdr(TestUpfConstants.FABRIC_UPLINK_PRIORITY_PDR); + translatedPdr = upfTranslator.fabricEntryToPdr(fabricFlow); } catch (UpfProgrammableException e) { assertThat("Fabric uplink PDR should translate to abstract PDR without error.", false); return; } assertThat("Translated PDR should be uplink.", translatedPdr.matchesEncapped()); - assertThat(translatedPdr, equalTo(expectedPdr)); + assertThat(translatedPdr, equalTo(expected)); } @Test public void fabricEntryToDownlinkPdrTest() { - PacketDetectionRule expectedPdr = TestUpfConstants.DOWNLINK_PDR; - PacketDetectionRule translatedPdr; - try { - translatedPdr = upfTranslator.fabricEntryToPdr(TestUpfConstants.FABRIC_DOWNLINK_PDR); - } catch (UpfProgrammableException e) { - assertThat("Fabric downlink PDR should translate to abstract PDR without error.", false); - return; - } - - assertThat("Translated PDR should be downlink.", translatedPdr.matchesUnencapped()); - assertThat(translatedPdr, equalTo(expectedPdr)); + fabricToPdrDownlink(TestUpfConstants.DOWNLINK_PDR, TestUpfConstants.FABRIC_DOWNLINK_PDR); } @Test - public void fabricEntryToDownlinkPriorityPdrTest() { - PacketDetectionRule expectedPdr = TestUpfConstants.DOWNLINK_PRIORITY_PDR; + public void fabricEntryToDownlinkQosPdrTest() { + fabricToPdrDownlink(TestUpfConstants.DOWNLINK_QOS_PDR, TestUpfConstants.FABRIC_DOWNLINK_QOS_PDR); + fabricToPdrDownlink(TestUpfConstants.DOWNLINK_QOS_4G_PDR, TestUpfConstants.FABRIC_DOWNLINK_QOS_4G_PDR); + } + + private void fabricToPdrDownlink(PacketDetectionRule expected, FlowRule fabricFlow) { PacketDetectionRule translatedPdr; try { - translatedPdr = upfTranslator.fabricEntryToPdr(TestUpfConstants.FABRIC_DOWNLINK_PRIORITY_PDR); + translatedPdr = upfTranslator.fabricEntryToPdr(fabricFlow); } catch (UpfProgrammableException e) { assertThat("Fabric downlink PDR should translate to abstract PDR without error.", false); return; } assertThat("Translated PDR should be downlink.", translatedPdr.matchesUnencapped()); - assertThat(translatedPdr, equalTo(expectedPdr)); + assertThat(translatedPdr, equalTo(expected)); } @Test @@ -184,27 +173,19 @@ public void downlinkInterfaceToFabricEntryTest() { @Test public void downlinkPdrToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_DOWNLINK_PDR; - try { - translatedRule = upfTranslator.pdrToFabricEntry(TestUpfConstants.DOWNLINK_PDR, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract downlink PDR should correctly translate to Fabric PDR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); + pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_PDR, TestUpfConstants.DOWNLINK_PDR); } @Test - public void downlinkPdrToFabricPriorityEntryTest() { + public void downlinkPdrToFabricQosEntryTest() { + pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_QOS_PDR, TestUpfConstants.DOWNLINK_QOS_PDR); + pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_QOS_4G_PDR, TestUpfConstants.DOWNLINK_QOS_4G_PDR); + } + + private void pdrToFabricDownlink(FlowRule expected, PacketDetectionRule pdr) { FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_DOWNLINK_PRIORITY_PDR; try { - translatedRule = upfTranslator.pdrToFabricEntry(TestUpfConstants.DOWNLINK_PRIORITY_PDR, + translatedRule = upfTranslator.pdrToFabricEntry(pdr, TestUpfConstants.DEVICE_ID, TestUpfConstants.APP_ID, TestUpfConstants.DEFAULT_PRIORITY); @@ -213,7 +194,7 @@ public void downlinkPdrToFabricPriorityEntryTest() { false); return; } - assertThat(translatedRule, equalTo(expectedRule)); + assertThat(translatedRule, equalTo(expected)); } @Test @@ -235,27 +216,19 @@ public void uplinkFarToFabricEntryTest() { @Test public void uplinkPdrToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_UPLINK_PDR; - try { - translatedRule = upfTranslator.pdrToFabricEntry(TestUpfConstants.UPLINK_PDR, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract uplink PDR should correctly translate to Fabric PDR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); + pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_PDR, TestUpfConstants.UPLINK_PDR); } @Test - public void uplinkPriorityPdrToFabricEntryTest() { + public void uplinkQosPdrToFabricEntryTest() { + pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_QOS_PDR, TestUpfConstants.UPLINK_QOS_PDR); + pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_QOS_4G_PDR, TestUpfConstants.UPLINK_QOS_4G_PDR); + } + + private void pdrToFabricUplink(FlowRule expected, PacketDetectionRule pdr) { FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_UPLINK_PRIORITY_PDR; try { - translatedRule = upfTranslator.pdrToFabricEntry(TestUpfConstants.UPLINK_PRIORITY_PDR, + translatedRule = upfTranslator.pdrToFabricEntry(pdr, TestUpfConstants.DEVICE_ID, TestUpfConstants.APP_ID, TestUpfConstants.DEFAULT_PRIORITY); @@ -264,7 +237,7 @@ public void uplinkPriorityPdrToFabricEntryTest() { false); return; } - assertThat(translatedRule, equalTo(expectedRule)); + assertThat(translatedRule, equalTo(expected)); } @Test diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java index 6fee2444413..71c72121607 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java @@ -50,18 +50,28 @@ import static org.onosproject.pipelines.fabric.FabricConstants.FAR_ID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; +import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_GTPU_DECAP; +import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_QFI_PUSH; import static org.onosproject.pipelines.fabric.FabricConstants.NOTIFY_CP; -import static org.onosproject.pipelines.fabric.FabricConstants.QID; +import static org.onosproject.pipelines.fabric.FabricConstants.QFI; +import static org.onosproject.pipelines.fabric.FabricConstants.SLICE_ID; import static org.onosproject.pipelines.fabric.FabricConstants.SRC_IFACE; +import static org.onosproject.pipelines.fabric.FabricConstants.TC; import static org.onosproject.pipelines.fabric.FabricConstants.TEID; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_DST_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_ADDR; import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_SLICE_ID; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_TC; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; import static org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfTranslator.INTERFACE_ACCESS; import static org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfTranslator.INTERFACE_CORE; @@ -90,11 +100,8 @@ public final class TestUpfConstants { .hash() .asInt(); - public static final int UPLINK_PRIORITY = 9; - public static final int DOWNLINK_PRIORITY = 1; - public static final int UPLINK_QID = 1; - public static final int DOWNLINK_QID = 5; - public static final int DEFAULT_SCHEDULING_PRIORITY = 0; + public static final byte UPLINK_QFI = 1; + public static final byte DOWNLINK_QFI = 5; public static final ImmutableByteSequence TEID_VALUE = ImmutableByteSequence.copyFrom(0xff); public static final Ip4Address UE_ADDR = Ip4Address.valueOf("17.0.0.1"); @@ -116,7 +123,6 @@ public final class TestUpfConstants { .withLocalFarId(UPLINK_FAR_ID) .withSessionId(SESSION_ID) .withCounterId(UPLINK_COUNTER_CELL_ID) - .withSchedulingPriority(DEFAULT_SCHEDULING_PRIORITY) .build(); public static final PacketDetectionRule DOWNLINK_PDR = PacketDetectionRule.builder() @@ -124,24 +130,42 @@ public final class TestUpfConstants { .withLocalFarId(DOWNLINK_FAR_ID) .withSessionId(SESSION_ID) .withCounterId(DOWNLINK_COUNTER_CELL_ID) - .withSchedulingPriority(DEFAULT_SCHEDULING_PRIORITY) .build(); - public static final PacketDetectionRule UPLINK_PRIORITY_PDR = PacketDetectionRule.builder() + public static final PacketDetectionRule UPLINK_QOS_PDR = PacketDetectionRule.builder() .withTunnelDst(S1U_ADDR) .withTeid(TEID_VALUE) .withLocalFarId(UPLINK_FAR_ID) .withSessionId(SESSION_ID) .withCounterId(UPLINK_COUNTER_CELL_ID) - .withSchedulingPriority(UPLINK_PRIORITY) + .withQfi(UPLINK_QFI) + .withQfiMatch() .build(); - public static final PacketDetectionRule DOWNLINK_PRIORITY_PDR = PacketDetectionRule.builder() + public static final PacketDetectionRule UPLINK_QOS_4G_PDR = PacketDetectionRule.builder() + .withTunnelDst(S1U_ADDR) + .withTeid(TEID_VALUE) + .withLocalFarId(UPLINK_FAR_ID) + .withSessionId(SESSION_ID) + .withCounterId(UPLINK_COUNTER_CELL_ID) + .withQfi(UPLINK_QFI) + .build(); + + public static final PacketDetectionRule DOWNLINK_QOS_PDR = PacketDetectionRule.builder() + .withUeAddr(UE_ADDR) + .withLocalFarId(DOWNLINK_FAR_ID) + .withSessionId(SESSION_ID) + .withCounterId(DOWNLINK_COUNTER_CELL_ID) + .withQfi(DOWNLINK_QFI) + .withQfiPush() + .build(); + + public static final PacketDetectionRule DOWNLINK_QOS_4G_PDR = PacketDetectionRule.builder() .withUeAddr(UE_ADDR) .withLocalFarId(DOWNLINK_FAR_ID) .withSessionId(SESSION_ID) .withCounterId(DOWNLINK_COUNTER_CELL_ID) - .withSchedulingPriority(DOWNLINK_PRIORITY) + .withQfi(DOWNLINK_QFI) .build(); public static final ForwardingActionRule UPLINK_FAR = ForwardingActionRule.builder() @@ -158,13 +182,38 @@ public final class TestUpfConstants { public static final UpfInterface DOWNLINK_INTERFACE = UpfInterface.createUePoolFrom(UE_POOL); - public static final FlowRule FABRIC_UPLINK_PRIORITY_PDR = DefaultFlowRule.builder() + public static final FlowRule FABRIC_UPLINK_QOS_PDR = DefaultFlowRule.builder() .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() .forTable(FABRIC_INGRESS_SPGW_UPLINK_PDRS) .withSelector(DefaultTrafficSelector.builder() .matchPi(PiCriterion.builder() .matchExact(HDR_TEID, TEID_VALUE.asArray()) .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) + .matchExact(HDR_HAS_QFI, TRUE) + .matchExact(HDR_QFI, UPLINK_QFI) + .build()).build()) + .withTreatment(DefaultTrafficTreatment.builder() + .piTableAction(PiAction.builder() + .withId(FABRIC_INGRESS_SPGW_LOAD_PDR) + .withParameters(Arrays.asList( + new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), + new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), + new PiActionParam(NEEDS_GTPU_DECAP, TRUE), + new PiActionParam(TC, DEFAULT_TC) + )) + .build()).build()) + .withPriority(DEFAULT_PRIORITY) + .build(); + + public static final FlowRule FABRIC_UPLINK_QOS_4G_PDR = DefaultFlowRule.builder() + .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() + .forTable(FABRIC_INGRESS_SPGW_UPLINK_PDRS) + .withSelector(DefaultTrafficSelector.builder() + .matchPi(PiCriterion.builder() + .matchExact(HDR_TEID, TEID_VALUE.asArray()) + .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) + .matchExact(HDR_HAS_QFI, FALSE) + .matchExact(HDR_QFI, DEFAULT_QFI) .build()).build()) .withTreatment(DefaultTrafficTreatment.builder() .piTableAction(PiAction.builder() @@ -172,14 +221,39 @@ public final class TestUpfConstants { .withParameters(Arrays.asList( new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, 1), - new PiActionParam(QID, UPLINK_QID) + new PiActionParam(NEEDS_GTPU_DECAP, TRUE), + new PiActionParam(NEEDS_QFI_PUSH, FALSE), + new PiActionParam(QFI, + UPLINK_QFI), + new PiActionParam(TC, DEFAULT_TC) + )) + .build()).build()) + .withPriority(DEFAULT_PRIORITY) + .build(); + + public static final FlowRule FABRIC_DOWNLINK_QOS_PDR = DefaultFlowRule.builder() + .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() + .forTable(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS) + .withSelector(DefaultTrafficSelector.builder() + .matchPi(PiCriterion.builder() + .matchExact(HDR_UE_ADDR, UE_ADDR.toInt()) + .build()).build()) + .withTreatment(DefaultTrafficTreatment.builder() + .piTableAction(PiAction.builder() + .withId(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS) + .withParameters(Arrays.asList( + new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), + new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), + new PiActionParam(QFI, DOWNLINK_QFI), + new PiActionParam(NEEDS_GTPU_DECAP, FALSE), + new PiActionParam(NEEDS_QFI_PUSH, TRUE), + new PiActionParam(TC, DEFAULT_TC) )) .build()).build()) .withPriority(DEFAULT_PRIORITY) .build(); - public static final FlowRule FABRIC_DOWNLINK_PRIORITY_PDR = DefaultFlowRule.builder() + public static final FlowRule FABRIC_DOWNLINK_QOS_4G_PDR = DefaultFlowRule.builder() .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() .forTable(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS) .withSelector(DefaultTrafficSelector.builder() @@ -192,8 +266,10 @@ public final class TestUpfConstants { .withParameters(Arrays.asList( new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, 0), - new PiActionParam(QID, DOWNLINK_QID) + new PiActionParam(QFI, DOWNLINK_QFI), + new PiActionParam(NEEDS_GTPU_DECAP, FALSE), + new PiActionParam(NEEDS_QFI_PUSH, FALSE), + new PiActionParam(TC, DEFAULT_TC) )) .build()).build()) .withPriority(DEFAULT_PRIORITY) @@ -206,6 +282,8 @@ public final class TestUpfConstants { .matchPi(PiCriterion.builder() .matchExact(HDR_TEID, TEID_VALUE.asArray()) .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) + .matchExact(HDR_HAS_QFI, FALSE) + .matchExact(HDR_QFI, DEFAULT_QFI) .build()).build()) .withTreatment(DefaultTrafficTreatment.builder() .piTableAction(PiAction.builder() @@ -213,7 +291,8 @@ public final class TestUpfConstants { .withParameters(Arrays.asList( new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, 1) + new PiActionParam(NEEDS_GTPU_DECAP, TRUE), + new PiActionParam(TC, DEFAULT_TC) )) .build()).build()) .withPriority(DEFAULT_PRIORITY) @@ -232,7 +311,8 @@ public final class TestUpfConstants { .withParameters(Arrays.asList( new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, 0) + new PiActionParam(NEEDS_GTPU_DECAP, FALSE), + new PiActionParam(TC, DEFAULT_TC) )) .build()).build()) .withPriority(DEFAULT_PRIORITY) @@ -293,6 +373,7 @@ public final class TestUpfConstants { PiAction.builder() .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) .withParameter(new PiActionParam(SRC_IFACE, INTERFACE_ACCESS)) + .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) .build()).build()) .withPriority(DEFAULT_PRIORITY) .build(); @@ -311,6 +392,7 @@ public final class TestUpfConstants { .piTableAction(PiAction.builder() .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) .withParameter(new PiActionParam(SRC_IFACE, INTERFACE_CORE)) + .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) .build()).build()) .withPriority(DEFAULT_PRIORITY) .build(); From 94015dee30b6d98e2658e6ff1ba557f5ad5010b5 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 9 Aug 2021 20:01:59 -0700 Subject: [PATCH 113/235] Fix wrong arguments in load_pdr action According to fabric.p4, needs_qfi_push can only be present when using load_pdr_qos, but not load_pdr. Change-Id: I63b74762f56acc7e8a703a32ea368eb423ece41a --- .../fabric/impl/behaviour/upf/FabricUpfTranslator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java index 179e7931c42..f2e7584aee6 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java @@ -368,11 +368,10 @@ public FlowRule pdrToFabricEntry(PacketDetectionRule pdr, DeviceId deviceId, App tableId = FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; matchBuilder.matchExact(HDR_UE_ADDR, pdr.ueAddress().toInt()); if (pdr.hasQfi()) { - actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())); + actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())) + .withParameter(new PiActionParam(NEEDS_QFI_PUSH, pdr.pushQfi() ? TRUE : FALSE)); actionId = FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; } - actionBuilder.withParameter( - new PiActionParam(NEEDS_QFI_PUSH, pdr.pushQfi() ? TRUE : FALSE)); } else { throw new UpfProgrammableException("Flexible PDRs not yet supported! Cannot translate " + pdr); } From fa3b3287e724a387e4c59542c0aa6c6316ff9075 Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Sun, 22 Aug 2021 19:35:34 +0800 Subject: [PATCH 114/235] [SDFAB-355] Revisit MeterService and north abstractions Change-Id: I685cb90d53f8aa61017ecda9fa7ff842e58e2940 --- .../impl/VirtualNetworkMeterManager.java | 13 ++- .../onosproject/net/meter/DefaultMeter.java | 18 +++-- .../net/meter/DefaultMeterRequest.java | 50 +++++++++--- .../java/org/onosproject/net/meter/Meter.java | 10 ++- .../onosproject/net/meter/MeterRequest.java | 30 +++++++ .../onosproject/net/meter/MeterService.java | 21 +++++ .../org/onosproject/net/meter/MeterState.java | 5 -- .../net/meter/MeterServiceAdapter.java | 10 +++ .../net/meter/impl/MeterManager.java | 79 +++++++++++-------- .../proto/net/meter/MeterEnumsProto.proto | 10 +-- .../net/meter/MeterEnumsProtoTranslator.java | 6 +- .../meter/impl/DistributedMeterStore.java | 4 +- 12 files changed, 190 insertions(+), 66 deletions(-) diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java index 9ec530b8aaf..9d4f7e4427a 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java @@ -30,6 +30,7 @@ import org.onosproject.net.DeviceId; import org.onosproject.net.meter.DefaultMeter; import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterEvent; import org.onosproject.net.meter.MeterFailReason; import org.onosproject.net.meter.MeterFeatures; @@ -139,11 +140,16 @@ public Meter submit(MeterRequest request) { @Override public void withdraw(MeterRequest request, MeterId meterId) { + withdraw(request, (MeterCellId) meterId); + } + + @Override + public void withdraw(MeterRequest request, MeterCellId meterCellId) { Meter.Builder mBuilder = DefaultMeter.builder() .forDevice(request.deviceId()) .fromApp(request.appId()) .withBands(request.bands()) - .withId(meterId) + .withCellId(meterCellId) .withUnit(request.unit()); if (request.isBurst()) { @@ -158,6 +164,11 @@ public void withdraw(MeterRequest request, MeterId meterId) { @Override public Meter getMeter(DeviceId deviceId, MeterId id) { + return getMeter(deviceId, (MeterCellId) id); + } + + @Override + public Meter getMeter(DeviceId deviceId, MeterCellId id) { MeterKey key = MeterKey.key(deviceId, id); return store.getMeter(networkId(), key); } diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java index 681846fff08..f3e29feb8f2 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java @@ -23,6 +23,7 @@ import org.onosproject.net.DeviceId; import java.util.Collection; +import java.util.Optional; import static com.google.common.base.MoreObjects.toStringHelper; import static com.google.common.base.Preconditions.checkArgument; @@ -36,7 +37,7 @@ public final class DefaultMeter extends AbstractAnnotated implements Meter, Mete private final MeterCellId cellId; - private final ApplicationId appId; + private final Optional appId; private final Unit unit; private final boolean burst; private final Collection bands; @@ -48,8 +49,9 @@ public final class DefaultMeter extends AbstractAnnotated implements Meter, Mete private long packets; private long bytes; - private DefaultMeter(DeviceId deviceId, MeterCellId cellId, ApplicationId appId, - Unit unit, boolean burst, Collection bands, + private DefaultMeter(DeviceId deviceId, MeterCellId cellId, + Optional appId, Unit unit, + boolean burst, Collection bands, Annotations... annotations) { super(annotations); this.deviceId = deviceId; @@ -81,7 +83,8 @@ public MeterCellId meterCellId() { @Override public ApplicationId appId() { - return appId; + return appId.orElse(null); + // TODO: Deprecate this API because AppId becomes optional in Meter } @Override @@ -158,7 +161,7 @@ public String toString() { return toStringHelper(this) .add("device", deviceId) .add("cellId", cellId) - .add("appId", appId.name()) + .add("appId", appId.orElse(null)) .add("unit", unit) .add("isBurst", burst) .add("state", state) @@ -190,7 +193,7 @@ public int hashCode() { public static final class Builder implements Meter.Builder { private MeterCellId cellId; - private ApplicationId appId; + private Optional appId = Optional.empty(); private Unit unit = Unit.KB_PER_SEC; private boolean burst = false; private Collection bands; @@ -217,7 +220,7 @@ public Meter.Builder withCellId(MeterCellId cellId) { @Override public Meter.Builder fromApp(ApplicationId appId) { - this.appId = appId; + this.appId = Optional.ofNullable(appId); return this; } @@ -250,7 +253,6 @@ public DefaultMeter build() { checkNotNull(deviceId, "Must specify a device"); checkNotNull(bands, "Must have bands."); checkArgument(!bands.isEmpty(), "Must have at least one band."); - checkNotNull(appId, "Must have an application id"); checkArgument(cellId != null, "Must specify a cell id."); return new DefaultMeter(deviceId, cellId, appId, unit, burst, bands, annotations); diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java index e6e2d1be79f..0dbd4f7a608 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java @@ -42,11 +42,14 @@ public final class DefaultMeterRequest extends AbstractAnnotated implements Mete private final DeviceId deviceId; private final Optional context; private final Type op; + private final MeterScope scope; + private final Optional index; private DefaultMeterRequest(DeviceId deviceId, ApplicationId appId, Meter.Unit unit, boolean burst, Collection bands, MeterContext context, - Type op, Annotations... annotations) { + Type op, MeterScope scope, Optional index, + Annotations... annotations) { super(annotations); this.deviceId = deviceId; this.appId = appId; @@ -55,6 +58,8 @@ private DefaultMeterRequest(DeviceId deviceId, ApplicationId appId, this.bands = bands; this.context = Optional.ofNullable(context); this.op = op; + this.scope = scope; + this.index = index; } @Override @@ -88,7 +93,15 @@ public Optional context() { return context; } + @Override + public MeterScope scope() { + return scope; + } + @Override + public Optional index() { + return index; + } public static Builder builder() { return new Builder(); @@ -102,6 +115,8 @@ public String toString() { .add("unit", unit) .add("isBurst", burst) .add("bands", bands) + .add("scope", scope) + .add("desired index", index.orElse(null)) .add("annotations", annotations()) .toString(); } @@ -114,9 +129,9 @@ public static final class Builder implements MeterRequest.Builder { private Collection bands; private DeviceId deviceId; private MeterContext context; - private Optional desiredId = Optional.empty(); private Annotations annotations; - + private MeterScope scope = MeterScope.globalScope(); + private Optional desiredIndex = Optional.empty(); @Override public MeterRequest.Builder forDevice(DeviceId deviceId) { @@ -131,19 +146,19 @@ public MeterRequest.Builder fromApp(ApplicationId appId) { } @Override - public MeterRequest.Builder withUnit(Meter.Unit unit) { + public MeterRequest.Builder withUnit(Meter.Unit unit) { this.unit = unit; return this; } @Override - public MeterRequest.Builder burst() { + public MeterRequest.Builder burst() { this.burst = true; return this; } @Override - public MeterRequest.Builder withBands(Collection bands) { + public MeterRequest.Builder withBands(Collection bands) { this.bands = ImmutableSet.copyOf(bands); return this; } @@ -160,18 +175,30 @@ public MeterRequest.Builder withAnnotations(Annotations annotations) { return this; } + @Override + public MeterRequest.Builder withScope(MeterScope scope) { + this.scope = scope; + return this; + } + + @Override + public MeterRequest.Builder withIndex(Long index) { + this.desiredIndex = Optional.ofNullable(index); + return this; + } + @Override public MeterRequest add() { validate(); - return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, - context, Type.ADD, annotations); + return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, context, + Type.ADD, scope, desiredIndex, annotations); } @Override public MeterRequest remove() { validate(); - return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, - context, Type.REMOVE, annotations); + return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, context, + Type.REMOVE, scope, desiredIndex, annotations); } private void validate() { @@ -179,6 +206,9 @@ private void validate() { checkNotNull(bands, "Must have bands."); checkArgument(!bands.isEmpty(), "Must have at least one band."); checkNotNull(appId, "Must have an application id"); + if (desiredIndex.isPresent()) { + checkArgument(desiredIndex.get() >= 0, "Desired index cannot be negative"); + } } diff --git a/core/api/src/main/java/org/onosproject/net/meter/Meter.java b/core/api/src/main/java/org/onosproject/net/meter/Meter.java index 63b6db33fd4..64379d33909 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/Meter.java +++ b/core/api/src/main/java/org/onosproject/net/meter/Meter.java @@ -37,7 +37,12 @@ enum Unit { /** * Kilo bits per second. */ - KB_PER_SEC + KB_PER_SEC, + + /** + * Bytes per second. + */ + BYTES_PER_SEC } /** @@ -65,10 +70,13 @@ enum Unit { /** * The id of the application which created this meter. + * Could be null if the meter is read from the controller southbound. * * @return an application id */ ApplicationId appId(); + // TODO: Deprecate this and create a new method returns an Optional ApplicationId + // TODO: Or introduce MeterEntry on south and keep this method /** * The unit used within this meter. diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java b/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java index a2be1ceca18..e156fd4a61d 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java @@ -76,6 +76,20 @@ enum Type { */ Optional context(); + /** + * Returns the scope of this meter request. + * + * @return a meter scope + */ + MeterScope scope(); + + /** + * Returns the desired meter index of this meter request. + * + * @return an optional long index + */ + Optional index(); + /** * A meter builder. */ @@ -138,6 +152,22 @@ interface Builder { */ Builder withAnnotations(Annotations annotations); + /** + * Sets the scope. + * + * @param scope a meter scope + * @return this + */ + Builder withScope(MeterScope scope); + + /** + * Sets the index. + * + * @param index an optional index + * @return this + */ + Builder withIndex(Long index); + /** * Requests the addition of a meter. * diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java index 6339101ae47..5b3ca3bd9d8 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java @@ -42,18 +42,39 @@ public interface MeterService * * @param meter a meter to remove * @param meterId the meter id of the meter to remove. + * @deprecated in onos-2.5, replace MeterId with MeterCellId */ + @Deprecated void withdraw(MeterRequest meter, MeterId meterId); + /** + * Remove a meter from the system and the dataplane. + * + * @param meter a meter to remove + * @param meterCellId the meter cell id of the meter to remove. + */ + void withdraw(MeterRequest meter, MeterCellId meterCellId); + /** * Fetch the meter by the meter id. * * @param deviceId a device id * @param id a meter id * @return a meter + * @deprecated in onos-2.5, Replace MeterId with MeterCellId */ + @Deprecated Meter getMeter(DeviceId deviceId, MeterId id); + /** + * Fetch the meter by the meter id. + * + * @param deviceId a device id + * @param id a meter cell id + * @return a meter + */ + Meter getMeter(DeviceId deviceId, MeterCellId id); + /** * Fetches all the meters. * diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterState.java b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java index 78fdd90f890..c098d91dd56 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterState.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java @@ -35,9 +35,4 @@ public enum MeterState { */ PENDING_REMOVE, - /** - * The meter has been removed. - */ - REMOVED, - } diff --git a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java index 7148c06593f..2a298b44f5c 100644 --- a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java @@ -35,11 +35,21 @@ public void withdraw(MeterRequest meter, MeterId meterId) { } + @Override + public void withdraw(MeterRequest meter, MeterCellId meterCellId) { + + } + @Override public Meter getMeter(DeviceId deviceId, MeterId id) { return null; } + @Override + public Meter getMeter(DeviceId deviceId, MeterCellId meterCellId) { + return null; + } + @Override public Collection getAllMeters() { return null; diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java index 805009dfc81..9b786e50c8f 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java @@ -34,7 +34,7 @@ import org.onosproject.net.driver.DriverService; import org.onosproject.net.meter.DefaultMeter; import org.onosproject.net.meter.Meter; -import org.onosproject.net.meter.MeterCellId.MeterCellType; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterEvent; import org.onosproject.net.meter.MeterFailReason; import org.onosproject.net.meter.MeterFeatures; @@ -46,6 +46,7 @@ import org.onosproject.net.meter.MeterProviderRegistry; import org.onosproject.net.meter.MeterProviderService; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; import org.onosproject.net.meter.MeterState; import org.onosproject.net.meter.MeterStore; @@ -53,6 +54,8 @@ import org.onosproject.net.meter.MeterStoreResult; import org.onosproject.net.provider.AbstractListenerProviderRegistry; import org.onosproject.net.provider.AbstractProviderService; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -252,13 +255,24 @@ protected MeterProviderService createProviderService(MeterProvider provider) { @Override public Meter submit(MeterRequest request) { checkNotNull(request, "request cannot be null."); - // Allocate an id and then submit the request - MeterId id = allocateMeterId(request.deviceId()); + MeterCellId cellId; + if (request.index().isPresent()) { + // User provides index + if (request.scope().isGlobal()) { + cellId = MeterId.meterId(request.index().get()); + } else { + cellId = PiMeterCellId.ofIndirect( + PiMeterId.of(request.scope().id()), request.index().get()); + } + } else { + // Allocate an id + cellId = allocateMeterId(request.deviceId(), request.scope()); + } Meter.Builder mBuilder = DefaultMeter.builder() .forDevice(request.deviceId()) .fromApp(request.appId()) .withBands(request.bands()) - .withCellId(id) + .withCellId(cellId) .withUnit(request.unit()); if (request.isBurst()) { mBuilder.burst(); @@ -277,12 +291,17 @@ public Meter submit(MeterRequest request) { @Override public void withdraw(MeterRequest request, MeterId meterId) { + withdraw(request, (MeterCellId) meterId); + } + + @Override + public void withdraw(MeterRequest request, MeterCellId meterCellId) { checkNotNull(request, "request cannot be null."); Meter.Builder mBuilder = DefaultMeter.builder() .forDevice(request.deviceId()) .fromApp(request.appId()) .withBands(request.bands()) - .withCellId(meterId) + .withCellId(meterCellId) .withUnit(request.unit()); if (request.isBurst()) { @@ -299,6 +318,11 @@ public void withdraw(MeterRequest request, MeterId meterId) { @Override public Meter getMeter(DeviceId deviceId, MeterId id) { + return getMeter(deviceId, (MeterCellId) id); + } + + @Override + public Meter getMeter(DeviceId deviceId, MeterCellId id) { MeterKey key = MeterKey.key(deviceId, id); return store.getMeter(key); } @@ -320,6 +344,10 @@ public MeterId allocateMeterId(DeviceId deviceId) { return store.allocateMeterId(deviceId); } + private MeterCellId allocateMeterId(DeviceId deviceId, MeterScope scope) { + return store.allocateMeterId(deviceId, scope); + } + @Override public void freeMeterId(DeviceId deviceId, MeterId meterId) { // We delegate directly to the store @@ -361,14 +389,14 @@ public void pushMeterMetrics(DeviceId deviceId, Collection meterEntries) // Each update on the store is reflected on this collection Collection allMeters = store.getAllMeters(deviceId); - Map meterEntriesMap = meterEntries.stream() - .collect(Collectors.toMap(Meter::id, Meter -> Meter)); + Map meterEntriesMap = meterEntries.stream() + .collect(Collectors.toMap(Meter::meterCellId, Meter -> Meter)); // Look for meters defined in onos and missing in the device (restore) allMeters.stream().forEach(m -> { if ((m.state().equals(MeterState.PENDING_ADD) || m.state().equals(MeterState.ADDED)) && - !meterEntriesMap.containsKey(m.id())) { + !meterEntriesMap.containsKey(m.meterCellId())) { // The meter is missing in the device. Reinstall! log.debug("Adding meter missing in device {} {}", deviceId, m); // offload the task to avoid the overloading of the sb threads @@ -378,27 +406,21 @@ public void pushMeterMetrics(DeviceId deviceId, Collection meterEntries) // Look for meters defined in the device and not in onos (remove) meterEntriesMap.entrySet().stream() - .filter(md -> !allMeters.stream().anyMatch(m -> m.id().equals(md.getKey()))) + .filter(md -> !allMeters.stream().anyMatch(m -> m.meterCellId().equals(md.getKey()))) .forEach(mio -> { Meter meter = mio.getValue(); - // FIXME: Removing a meter is meaningful for OpenFlow, but not for P4Runtime. - // In P4Runtime meter cells cannot be removed. For the - // moment, we make the distinction between OpenFlow and - // P4Runtime by looking at the MeterCellType (always - // INDEX for OpenFlow). - if (meter.meterCellId().type() == MeterCellType.INDEX) { - // The meter is missing in onos. Uninstall! - log.debug("Remove meter in device not in onos {} {}", deviceId, mio.getKey()); - // offload the task to avoid the overloading of the sb threads - meterInstallers.execute(new MeterInstaller(deviceId, meter, MeterOperation.Type.REMOVE)); - } + // The meter is missing in onos. Uninstall! + log.debug("Remove meter in device not in onos {} {}", deviceId, mio.getKey()); + // offload the task to avoid the overloading of the sb threads + meterInstallers.execute(new MeterInstaller(deviceId, meter, MeterOperation.Type.REMOVE)); }); // Update the meter stats in the store (first time move the state from pending to added) Collection addedMeters = Sets.newHashSet(); meterEntries.stream() .filter(m -> allMeters.stream() - .anyMatch(sm -> sm.deviceId().equals(deviceId) && sm.id().equals(m.id()))) + .anyMatch(sm -> sm.deviceId().equals(deviceId) && + sm.meterCellId().equals(m.meterCellId()))) .forEach(m -> { Meter updatedMeter = store.updateMeterState(m); if (updatedMeter != null && updatedMeter.state() == MeterState.ADDED) { @@ -409,20 +431,13 @@ public void pushMeterMetrics(DeviceId deviceId, Collection meterEntries) newAllMeters.removeAll(addedMeters); newAllMeters.forEach(m -> { - // FIXME: Installing a meter is meaningful for OpenFlow, but not for P4Runtime. - // It looks like this flow is used only for p4runtime to emulate the installation - // since meters are already instantiated - we need just modify the params. - if (m.state() == MeterState.PENDING_ADD && m.meterCellId().type() != MeterCellType.INDEX) { - // offload the task to avoid the overloading of the sb threads - log.debug("Modify meter {} in device {}", m.id(), deviceId); - meterInstallers.execute(new MeterInstaller(m.deviceId(), m, MeterOperation.Type.MODIFY)); // Remove workflow. Regarding OpenFlow, meters have been removed from // the device but they are still in the store, we will purge them definitely. // Instead, P4Runtime devices will not remove the meter. The first workaround // for P4Runtime will avoid to send a remove op. Then, we reach this point // and we purge the meter from the store - } else if (m.state() == MeterState.PENDING_REMOVE) { - log.debug("Delete meter {} now in store", m.id()); + if (m.state() == MeterState.PENDING_REMOVE) { + log.debug("Delete meter {} now in store", m.meterCellId()); store.purgeMeter(m); } }); @@ -498,7 +513,7 @@ public void run() { NodeId master = mastershipService.getMasterFor(meter.deviceId()); if (!Objects.equals(local, master)) { log.trace("Not the master of device {}, skipping installation of the meter {}", - meter.deviceId(), meter.id()); + meter.deviceId(), meter.meterCellId()); return; } MeterProvider p = getProvider(this.deviceId); @@ -511,7 +526,7 @@ public void run() { @Override public int hint() { - return meter.id().hashCode(); + return meter.meterCellId().hashCode(); } } diff --git a/core/protobuf/models/proto/net/meter/MeterEnumsProto.proto b/core/protobuf/models/proto/net/meter/MeterEnumsProto.proto index 1b0bbf5cc5b..63a35b6e768 100644 --- a/core/protobuf/models/proto/net/meter/MeterEnumsProto.proto +++ b/core/protobuf/models/proto/net/meter/MeterEnumsProto.proto @@ -28,6 +28,11 @@ enum MeterUnitProto { * Kilo bits per second. */ KB_PER_SEC = 1; + + /** + * Bytes per second. + */ + BYTES_PER_SEC = 2; } enum MeterStateProto { @@ -45,11 +50,6 @@ enum MeterStateProto { * The meter is in the process of being removed. */ PENDING_REMOVE = 2; - - /** - * The meter has been removed. - */ - REMOVED = 3; } enum MeterRequestTypeProto { diff --git a/core/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java b/core/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java index b73117c0c59..bb416de84f8 100644 --- a/core/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java +++ b/core/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/meter/MeterEnumsProtoTranslator.java @@ -42,6 +42,8 @@ public static Optional translate(MeterEnumsProto.MeterUnitProto unit return Optional.of(Meter.Unit.PKTS_PER_SEC); case KB_PER_SEC: return Optional.of(Meter.Unit.KB_PER_SEC); + case BYTES_PER_SEC: + return Optional.of(Meter.Unit.BYTES_PER_SEC); default: log.warn("Unrecognized MeterUnit gRPC message: {}", unit); return Optional.empty(); @@ -60,6 +62,8 @@ public static MeterEnumsProto.MeterUnitProto translate(Meter.Unit unit) { return MeterEnumsProto.MeterUnitProto.PKTS_PER_SEC; case KB_PER_SEC: return MeterEnumsProto.MeterUnitProto.KB_PER_SEC; + case BYTES_PER_SEC: + return MeterEnumsProto.MeterUnitProto.BYTES_PER_SEC; default: log.warn("Unrecognized MeterUnit ONOS message: {}", unit); return MeterEnumsProto.MeterUnitProto.UNRECOGNIZED; @@ -80,8 +84,6 @@ public static MeterEnumsProto.MeterStateProto translate(MeterState meterState) { return MeterEnumsProto.MeterStateProto.ADDED; case PENDING_REMOVE: return MeterEnumsProto.MeterStateProto.PENDING_REMOVE; - case REMOVED: - return MeterEnumsProto.MeterStateProto.REMOVED; default: log.warn("Unrecognized MeterState ONOS message: {}", meterState); return MeterEnumsProto.MeterStateProto.UNRECOGNIZED; diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index b2034dc10a7..7f7873c05c3 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -614,7 +614,7 @@ public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { // Get a new value // If the value is smaller than the start index, get another one do { - id = meterIdGenerators.incrementAndGet(meterTableKey); + id = meterIdGenerators.getAndIncrement(meterTableKey); } while (id < startIndex); // Check with the end index, and if the value is bigger, cannot proceed if (id > endIndex) { @@ -649,7 +649,7 @@ private void freeMeterId(MeterTableKey meterTableKey, MeterCellId meterCellId) { return; } // Avoid to free meter not allocated - if (meterIdGenerators.get(meterTableKey) < index) { + if (meterIdGenerators.get(meterTableKey) <= index) { return; } // Update the availability From 8ebb793c721538e845f23296fd2a5424970e61aa Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Sun, 22 Aug 2021 19:40:13 +0800 Subject: [PATCH 115/235] [SDFAB-354] Improve P4RTMeterProgrammable Change-Id: I65a325f90a49853c6c4a1cfb8212a016a8ec2b2d --- .../net/pi/runtime/PiMeterCellConfig.java | 8 +- .../p4runtime/P4RuntimeMeterProgrammable.java | 197 +++++++++++++----- .../p4runtime/ctl/codec/MeterEntryCodec.java | 8 +- 3 files changed, 150 insertions(+), 63 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java index e62482b077b..d3da3407fa7 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java @@ -69,19 +69,21 @@ public Collection meterBands() { /** * Check if the config represents a modify operation. + * Or it is a non-default config read from south bound. * * @return true if there are exactly 2 bands */ - public boolean isModify() { + public boolean isModifyConfig() { return piMeterBands.size() == 2; } /** * Check if the config represents a reset operation. + * Or it is a default config read from south bound. * - * @return true if there is no band. + * @return true if there is no band */ - public boolean isReset() { + public boolean isDefaultConfig() { return piMeterBands.isEmpty(); } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index caaa751a479..a7dbadde549 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -16,11 +16,11 @@ package org.onosproject.drivers.p4runtime; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.google.common.util.concurrent.Striped; import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMeterMirror; +import org.onosproject.drivers.p4runtime.mirror.TimedEntry; import org.onosproject.net.DeviceId; import org.onosproject.net.meter.Band; import org.onosproject.net.meter.DefaultBand; @@ -39,38 +39,33 @@ import org.onosproject.net.pi.runtime.PiMeterCellHandle; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.service.PiMeterTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; import org.onosproject.net.pi.service.PiTranslationException; +import org.onosproject.p4runtime.api.P4RuntimeWriteClient.WriteRequest; +import org.onosproject.p4runtime.api.P4RuntimeWriteClient.WriteResponse; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; import static org.onosproject.net.meter.MeterOperation.Type.ADD; import static org.onosproject.net.meter.MeterOperation.Type.MODIFY; import static org.onosproject.net.meter.MeterOperation.Type.REMOVE; +import static org.onosproject.p4runtime.api.P4RuntimeWriteClient.UpdateType; /** * Implementation of MeterProgrammable behaviour for P4Runtime. */ public class P4RuntimeMeterProgrammable extends AbstractP4RuntimeHandlerBehaviour implements MeterProgrammable { - private static final int METER_LOCK_EXPIRE_TIME_IN_MIN = 10; - private static final LoadingCache - ENTRY_LOCKS = CacheBuilder.newBuilder() - .expireAfterAccess(METER_LOCK_EXPIRE_TIME_IN_MIN, TimeUnit.MINUTES) - .build(new CacheLoader() { - @Override - public Lock load(PiMeterCellHandle handle) { - return new ReentrantLock(); - } - }); + private static final Striped WRITE_LOCKS = Striped.lock(30); private PiMeterTranslator translator; private P4RuntimeMeterMirror meterMirror; @@ -100,37 +95,47 @@ public CompletableFuture performMeterOperation(MeterOperation meterOp) private boolean processMeterOp(MeterOperation meterOp) { PiMeterCellConfig piMeterCellConfig; - switch (meterOp.type()) { - case ADD: - case MODIFY: - // Create a config for modify operation - try { - piMeterCellConfig = translator.translate(meterOp.meter(), pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable translate meter, aborting meter operation {}: {}", meterOp.type(), e.getMessage()); - log.debug("exception", e); + final PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, + (PiMeterCellId) meterOp.meter().meterCellId()); + boolean result = true; + WRITE_LOCKS.get(deviceId).lock(); + try { + switch (meterOp.type()) { + case ADD: + case MODIFY: + // Create a config for modify operation + try { + piMeterCellConfig = translator.translate(meterOp.meter(), pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable translate meter, aborting meter operation {}: {}", + meterOp.type(), e.getMessage()); + log.debug("exception", e); + return false; + } + translator.learn(handle, new PiTranslatedEntity<>(meterOp.meter(), piMeterCellConfig, handle)); + break; + case REMOVE: + // Create a empty config for reset operation + PiMeterCellId piMeterCellId = (PiMeterCellId) meterOp.meter().meterCellId(); + piMeterCellConfig = PiMeterCellConfig.reset(piMeterCellId); + translator.forget(handle); + break; + default: + log.warn("Meter Operation type {} not supported", meterOp.type()); return false; - } - break; - case REMOVE: - // Create a empty config for reset operation - PiMeterCellId piMeterCellId = (PiMeterCellId) meterOp.meter().meterCellId(); - piMeterCellConfig = PiMeterCellConfig.reset(piMeterCellId); - break; - default: - log.warn("Meter Operation type {} not supported", meterOp.type()); - return false; - } + } - final PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, piMeterCellConfig); - ENTRY_LOCKS.getUnchecked(handle).lock(); - final boolean result = client.write(p4DeviceId, pipeconf) - .modify(piMeterCellConfig).submitSync().isSuccess(); - if (result) { - meterMirror.put(handle, piMeterCellConfig); + WriteRequest request = client.write(p4DeviceId, pipeconf); + appendEntryToWriteRequestOrSkip(request, handle, piMeterCellConfig); + if (!request.pendingUpdates().isEmpty()) { + result = request.submitSync().isSuccess(); + if (result) { + meterMirror.applyWriteRequest(request); + } + } + } finally { + WRITE_LOCKS.get(deviceId).unlock(); } - ENTRY_LOCKS.getUnchecked(handle).unlock(); - return result; } @@ -151,19 +156,38 @@ public CompletableFuture> getMeters() { piMeterCellConfigs = client.read(p4DeviceId, pipeconf) .meterCells(meterIds).submitSync().all(PiMeterCellConfig.class); - Collection meters = piMeterCellConfigs.stream() - .map(p -> { - DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() - .withBands(p.meterBands().stream().map(b -> DefaultBand.builder() - .withRate(b.rate()) - .burstSize(b.burst()) - .ofType(Band.Type.NONE) - .build()).collect(Collectors.toList())) - .withCellId(p.cellId()).build(); - meter.setState(MeterState.ADDED); - return meter; - }) - .collect(Collectors.toList()); + meterMirror.sync(deviceId, piMeterCellConfigs); + + if (piMeterCellConfigs.isEmpty()) { + return CompletableFuture.completedFuture(Collections.emptyList()); + } + + List inconsistentOrDefaultCells = Lists.newArrayList(); + List meters = Lists.newArrayList(); + + // Check the consistency of meter config + for (PiMeterCellConfig config : piMeterCellConfigs) { + PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, config); + DefaultMeter meter = (DefaultMeter) forgeMeter(config, handle); + if (meter == null) { + // A default config cannot be used to forge meter + // because meter has at least 1 band while default config has no band + inconsistentOrDefaultCells.add(config.cellId()); + } else { + meters.add(meter); + } + } + + // Reset all inconsistent meter cells to default state + if (!inconsistentOrDefaultCells.isEmpty()) { + WriteRequest request = client.write(p4DeviceId, pipeconf); + for (PiMeterCellId cellId : inconsistentOrDefaultCells) { + PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, cellId); + appendEntryToWriteRequestOrSkip(request, handle, PiMeterCellConfig.reset(cellId)); + } + WriteResponse response = request.submitSync(); + meterMirror.applyWriteResponse(response); + } return CompletableFuture.completedFuture(meters); } @@ -182,6 +206,67 @@ public CompletableFuture> getMeterFeatures() { return CompletableFuture.completedFuture(meterFeatures); } + private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { + final Optional> + translatedEntity = translator.lookup(handle); + final TimedEntry timedEntry = meterMirror.get(handle); + + // A meter cell config might not be present in the translation store if it + // is default configuration. + if (translatedEntity.isEmpty()) { + if (!config.isDefaultConfig()) { + log.warn("Meter Cell Config obtained from device {} is different from " + + "one in in translation store: device={}, store=Default", deviceId, config); + } else { + log.debug("Configs obtained from device: {} and present in the store are default, " + + "skipping the forge section"); + } + return null; + } + // The config is not consistent + if (!translatedEntity.get().translated().equals(config)) { + log.warn("Meter Cell Config obtained from device {} is different from " + + "one in in translation store: device={}, store={}", + deviceId, config, translatedEntity.get().translated()); + return null; + } + if (timedEntry == null) { + log.warn("Meter entry handle not found in device mirror: {}", handle); + return null; + } + + // Forge a meter with MeterCellId, Bands and DeviceId + // Other values are not required because we cannot retrieve them from the south + DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() + .withBands(config.meterBands().stream().map(b -> DefaultBand.builder() + .withRate(b.rate()) + .burstSize(b.burst()) + .ofType(Band.Type.NONE) + .build()).collect(Collectors.toList())) + .withCellId(config.cellId()) + .forDevice(deviceId) + .build(); + meter.setState(MeterState.ADDED); + return meter; + } + + private boolean appendEntryToWriteRequestOrSkip( + final WriteRequest writeRequest, + final PiMeterCellHandle handle, + PiMeterCellConfig configToModify) { + + final TimedEntry configOnDevice = meterMirror.get(handle); + + if (configOnDevice != null && configOnDevice.entry().equals(configToModify)) { + log.debug("Ignoring re-apply of existing entry: {}", configToModify); + return true; + } + + writeRequest.entity(configToModify, UpdateType.MODIFY); + + return false; + } + /** * P4 meter features builder. */ diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java index 2da12d161a7..f5e0f414f08 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java @@ -34,12 +34,12 @@ public final class MeterEntryCodec static P4RuntimeOuterClass.MeterConfig getP4Config(PiMeterCellConfig piConfig) throws CodecException { - // A reset config has no band - if (piConfig.isReset()) { + // The config has no band, we don't have to create a P4RT meter config + if (piConfig.isDefaultConfig()) { return null; } - // A modify config has exactly 2 bands - if (!piConfig.isModify()) { + // If it is not a reset operation, the config must be a modify config and has exactly 2 bands + if (!piConfig.isModifyConfig()) { throw new CodecException("Number of meter bands should be 2 (Modify) or 0 (Reset)"); } final PiMeterBand[] bands = piConfig.meterBands().toArray(new PiMeterBand[0]); From f8522bb2a1b2a245cc573259fd9bb842f69bfe57 Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Sun, 22 Aug 2021 19:44:56 +0800 Subject: [PATCH 116/235] [SDFAB-453] Add a field check to MeterEntryCodec Change-Id: I4c59c9d45f3128a7d75661fa432bfb33336965aa --- .../ctl/codec/DirectMeterEntryCodec.java | 22 +++++++------- .../p4runtime/ctl/codec/MeterEntryCodec.java | 30 ++++++++++++++----- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java index 0f3241759e6..3be0244a82d 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java @@ -17,7 +17,6 @@ package org.onosproject.p4runtime.ctl.codec; import org.onosproject.net.pi.model.PiPipeconf; -import org.onosproject.net.pi.runtime.PiMeterBand; import org.onosproject.net.pi.runtime.PiMeterCellConfig; import org.onosproject.net.pi.runtime.PiMeterCellHandle; import org.onosproject.net.pi.runtime.PiMeterCellId; @@ -79,14 +78,17 @@ protected PiMeterCellConfig decode( P4RuntimeOuterClass.DirectMeterEntry message, Object ignored, PiPipeconf pipeconf, P4InfoBrowser browser) throws CodecException { - return PiMeterCellConfig.builder() - .withMeterCellId(PiMeterCellId.ofDirect( - CODECS.tableEntry().decode( - message.getTableEntry(), null, pipeconf))) - .withMeterBand(new PiMeterBand(message.getConfig().getCir(), - message.getConfig().getCburst())) - .withMeterBand(new PiMeterBand(message.getConfig().getPir(), - message.getConfig().getPburst())) - .build(); + PiMeterCellId cellId = + PiMeterCellId.ofDirect( + CODECS.tableEntry().decode( + message.getTableEntry(), null, pipeconf)); + // When a field is unset, gRPC (P4RT) will return a default value + // So, if the meter config is unset, the value of rate and burst will be 0, + // while 0 is a meaningful value and not equals to UNSET in P4RT. + // We cannot extract the values directly. + P4RuntimeOuterClass.MeterConfig p4Config = + message.hasConfig() ? message.getConfig() : null; + + return MeterEntryCodec.getPiMeterCellConfig(cellId, p4Config); } } diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java index f5e0f414f08..88f0639a56c 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java @@ -122,13 +122,27 @@ protected PiMeterCellConfig decode( .getById(message.getMeterId()) .getPreamble() .getName(); - return PiMeterCellConfig.builder() - .withMeterCellId(PiMeterCellId.ofIndirect( - PiMeterId.of(meterName), message.getIndex().getIndex())) - .withMeterBand(new PiMeterBand(message.getConfig().getCir(), - message.getConfig().getCburst())) - .withMeterBand(new PiMeterBand(message.getConfig().getPir(), - message.getConfig().getPburst())) - .build(); + PiMeterCellId cellId = + PiMeterCellId.ofIndirect(PiMeterId.of(meterName), message.getIndex().getIndex()); + // When a field is unset, gRPC (P4RT) will return a default value + // So, if the meter config is unset, the value of rate and burst will be 0, + // while 0 is a meaningful value and not equals to UNSET in P4RT. + // We cannot extract the values directly. + P4RuntimeOuterClass.MeterConfig p4Config = + message.hasConfig() ? message.getConfig() : null; + + return getPiMeterCellConfig(cellId, p4Config); + } + + public static PiMeterCellConfig getPiMeterCellConfig( + PiMeterCellId cellId, P4RuntimeOuterClass.MeterConfig p4Config) { + PiMeterCellConfig.Builder builder = + PiMeterCellConfig.builder().withMeterCellId(cellId); + if (p4Config != null) { + builder = builder + .withMeterBand(new PiMeterBand(p4Config.getCir(), p4Config.getCburst())) + .withMeterBand(new PiMeterBand(p4Config.getPir(), p4Config.getPburst())); + } + return builder.build(); } } From b8ca2adda94fee3f8e4666326ebdc6efc85dbc1c Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 18 Aug 2021 09:40:14 +0200 Subject: [PATCH 117/235] [SDFAB-500][SDFAB-499] Implement user defined index mode for the meter service - Introduce a boolean to control the meter service modes - User defined mode does not provide any coordination to the apps - Only one mode can be active at time - In addition some sanity checks are peformed by the meter service - Update existing unit tests and add new ones to test the new behaviors - Initial clean up of the meters subsystems Change-Id: I61500b794f27e94abd11637c84bce0dbb2e073f3 --- .../org/onosproject/net/meter/MeterStore.java | 30 +- .../net/OsgiPropertyConstants.java | 3 + .../net/meter/impl/MeterManager.java | 14 + .../net/meter/impl/MeterManagerTest.java | 274 +++++++++++++++++- .../meter/impl/DistributedMeterStore.java | 132 +++++---- .../meter/impl/DistributedMeterStoreTest.java | 197 +++++++++++-- 6 files changed, 550 insertions(+), 100 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 811b4188c36..7f4de4b7273 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -85,16 +85,6 @@ public interface MeterStore extends Store { */ MeterStoreResult deleteMeterFeatures(Collection meterfeatures); - /** - * Updates a meter whose meter id is the same as the passed meter. - * - * @param meter a new meter - * @return a future indicating the result of the store operation - * @deprecated in onos-2.5 replaced by {@link #addOrUpdateMeter(Meter)} - */ - @Deprecated - CompletableFuture updateMeter(Meter meter); - /** * Updates a given meter's state with the provided state. * @@ -200,9 +190,19 @@ public interface MeterStore extends Store { * This API is typically used when the device is offline. * * @param deviceId the device id + * @deprecated in onos-2.5, replaced by {@link #purgeMeters(DeviceId)} */ + @Deprecated void purgeMeter(DeviceId deviceId); + /** + * Removes all meters of given device from store. + * This API is typically used when the device is offline. + * + * @param deviceId the device id + */ + void purgeMeters(DeviceId deviceId); + /** * Removes all meters of given device and for the given application from store. * This API is typically used when the device is offline. @@ -212,4 +212,14 @@ public interface MeterStore extends Store { */ void purgeMeters(DeviceId deviceId, ApplicationId appId); + /** + * Enables/disables user defined index mode for the store. In this mode users + * can provide an index for the meter. Store may reject switching mode requests + * at run time if meters were already allocated. + * + * @param enable to enable/disable the user defined index mode. + * @return true if user defined index mode is enabled. False otherwise. + */ + boolean userDefinedIndexMode(boolean enable); + } diff --git a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java index 64b3cc2a837..ab3096f0399 100644 --- a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java +++ b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java @@ -125,6 +125,9 @@ private OsgiPropertyConstants() { public static final String MM_PURGE_ON_DISCONNECTION = "purgeOnDisconnection"; public static final boolean MM_PURGE_ON_DISCONNECTION_DEFAULT = false; + public static final String MM_USER_DEFINED_INDEX = "userDefinedIndex"; + public static final boolean MM_USER_DEFINED_INDEX_DEFAULT = false; + public static final String NRM_ARP_ENABLED = "arpEnabled"; public static final boolean NRM_ARP_ENABLED_DEFAULT = true; diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java index 9b786e50c8f..b2e6730fb28 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java @@ -71,6 +71,7 @@ import java.util.Objects; import java.util.stream.Collectors; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.isNullOrEmpty; import static org.onlab.util.PredictableExecutor.newPredictableExecutor; @@ -82,6 +83,8 @@ import static org.onosproject.net.OsgiPropertyConstants.MM_NUM_THREADS_DEFAULT; import static org.onosproject.net.OsgiPropertyConstants.MM_PURGE_ON_DISCONNECTION; import static org.onosproject.net.OsgiPropertyConstants.MM_PURGE_ON_DISCONNECTION_DEFAULT; +import static org.onosproject.net.OsgiPropertyConstants.MM_USER_DEFINED_INDEX; +import static org.onosproject.net.OsgiPropertyConstants.MM_USER_DEFINED_INDEX_DEFAULT; import static org.slf4j.LoggerFactory.getLogger; /** @@ -97,6 +100,7 @@ MM_NUM_THREADS + ":Integer=" + MM_NUM_THREADS_DEFAULT, MM_FALLBACK_METER_POLL_FREQUENCY + ":Integer=" + MM_FALLBACK_METER_POLL_FREQUENCY_DEFAULT, MM_PURGE_ON_DISCONNECTION + ":Boolean=" + MM_PURGE_ON_DISCONNECTION_DEFAULT, + MM_USER_DEFINED_INDEX + ":Boolean=" + MM_USER_DEFINED_INDEX_DEFAULT, } ) public class MeterManager @@ -142,6 +146,9 @@ public class MeterManager /** Purge entries associated with a device when the device goes offline. */ private boolean purgeOnDisconnection = MM_PURGE_ON_DISCONNECTION_DEFAULT; + /** Enable user defined index mode. Users can provide their own meter index. */ + protected boolean userDefinedIndex = MM_USER_DEFINED_INDEX_DEFAULT; + // Action triggered when the futures related to submit and withdrawal complete private TriConsumer onComplete; @@ -221,6 +228,11 @@ private void readComponentConfiguration(ComponentContext context) { purgeOnDisconnection ? "enabled" : "disabled"); } + flag = Tools.isPropertyEnabled(properties, MM_USER_DEFINED_INDEX); + boolean enable = flag == null ? userDefinedIndex : flag; + userDefinedIndex = store.userDefinedIndexMode(enable); + log.info("UserDefinedIndex is {}", userDefinedIndex ? "enabled" : "disabled"); + String s = get(properties, MM_FALLBACK_METER_POLL_FREQUENCY); try { fallbackMeterPollFrequency = isNullOrEmpty(s) ? @@ -257,6 +269,7 @@ public Meter submit(MeterRequest request) { checkNotNull(request, "request cannot be null."); MeterCellId cellId; if (request.index().isPresent()) { + checkArgument(userDefinedIndex, "Index cannot be provided when userDefinedIndex mode is disabled"); // User provides index if (request.scope().isGlobal()) { cellId = MeterId.meterId(request.index().get()); @@ -265,6 +278,7 @@ public Meter submit(MeterRequest request) { PiMeterId.of(request.scope().id()), request.index().get()); } } else { + checkArgument(!userDefinedIndex, "Index cannot be allocated when userDefinedIndex mode is enabled"); // Allocate an id cellId = allocateMeterId(request.deviceId(), request.scope()); } diff --git a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java index 09e97744696..1510e354ede 100644 --- a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java @@ -57,6 +57,7 @@ import org.onosproject.net.meter.DefaultMeterFeatures; import org.onosproject.net.meter.DefaultMeterRequest; import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterFeatures; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterOperation; @@ -66,9 +67,12 @@ import org.onosproject.net.meter.MeterProviderRegistry; import org.onosproject.net.meter.MeterProviderService; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; import org.onosproject.net.meter.MeterState; import org.onosproject.net.pi.PiPipeconfServiceAdapter; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.provider.AbstractProvider; import org.onosproject.net.provider.ProviderId; import org.onosproject.store.meter.impl.DistributedMeterStore; @@ -88,6 +92,7 @@ import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -97,6 +102,7 @@ import static org.onosproject.net.NetTestTools.APP_ID; import static org.onosproject.net.NetTestTools.did; import static org.onosproject.net.NetTestTools.injectEventDispatcher; +import static org.onosproject.net.OsgiPropertyConstants.MM_USER_DEFINED_INDEX; /** * Meter manager tests. @@ -150,6 +156,7 @@ public class MeterManagerTest { // Meter ids used during the tests private MeterId mid1 = MeterId.meterId(1); + private MeterCellId cid0 = PiMeterCellId.ofIndirect(PiMeterId.of("foo"), 0L); // Bands used during the tests private static Band b1 = DefaultBand.builder() @@ -180,6 +187,21 @@ public class MeterManagerTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); + private static Meter mProgrammable2 = DefaultMeter.builder() + .forDevice(PROGRAMMABLE_DID) + .fromApp(APP_ID) + .withId(MeterId.meterId(2)) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + + private static Meter mUserDefined = DefaultMeter.builder() + .forDevice(PROGRAMMABLE_DID) + .fromApp(APP_ID) + .withCellId(PiMeterCellId.ofIndirect(PiMeterId.of("foo"), 0L)) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); // Meter requests used during the tests private MeterRequest.Builder m1Request = DefaultMeterRequest.builder() @@ -198,6 +220,19 @@ public class MeterManagerTest { .fromApp(APP_ID) .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)); + private MeterRequest.Builder mProgrammableRequest2 = DefaultMeterRequest.builder() + .forDevice(PROGRAMMABLE_DID) + .fromApp(APP_ID) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)); + + private MeterRequest.Builder userDefinedRequest = DefaultMeterRequest.builder() + .forDevice(PROGRAMMABLE_DID) + .fromApp(APP_ID) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .withScope(MeterScope.of("foo")) + .withIndex(0L); // Meter features used during the tests private MeterFeatures mef1 = DefaultMeterFeatures.builder().forDevice(did1) @@ -218,7 +253,29 @@ public class MeterManagerTest { .withMaxBands((byte) 0) .withMaxColors((byte) 0) .build(); + private MeterFeatures programmableMef1 = DefaultMeterFeatures.builder().forDevice(PROGRAMMABLE_DID) + .withStartIndex(1) + .withEndIndex(10L) + .withBandTypes(new HashSet<>()) + .withUnits(new HashSet<>()) + .hasStats(false) + .hasBurst(false) + .withMaxBands((byte) 0) + .withMaxColors((byte) 0) + .build(); + private MeterFeatures programmableMef2 = DefaultMeterFeatures.builder().forDevice(PROGRAMMABLE_DID) + .withStartIndex(0) + .withEndIndex(10L) + .withScope(MeterScope.of("foo")) + .withBandTypes(new HashSet<>()) + .withUnits(new HashSet<>()) + .hasStats(false) + .hasBurst(false) + .withMaxBands((byte) 0) + .withMaxColors((byte) 0) + .build(); + private ComponentContext componentContext = EasyMock.createMock(ComponentContext.class); @Before public void setup() { @@ -263,7 +320,6 @@ public void setup() { // Activate the manager Dictionary cfgDict = new Hashtable<>(); - ComponentContext componentContext = EasyMock.createMock(ComponentContext.class); expect(componentContext.getProperties()).andReturn(cfgDict); replay(componentContext); manager.activate(componentContext); @@ -292,26 +348,60 @@ public void tearDown() { meterStore.deactivate(); } + // Store meter features for all the devices private void initMeterStore() { - // Let's store feature for device 1 meterStore.storeMeterFeatures(mef1); - // Let's store feature for device 2 meterStore.storeMeterFeatures(mef2); + meterStore.storeMeterFeatures(programmableMef1); + meterStore.storeMeterFeatures(programmableMef2); } // Emulate metrics coming from the dataplane private void pushMetrics(MeterOperation.Type type, Meter meter) { - // If it is an add operation if (type == MeterOperation.Type.ADD) { - // Update state to added ((DefaultMeter) meter).setState(MeterState.ADDED); - // Push the update in the store providerService.pushMeterMetrics(meter.deviceId(), Collections.singletonList(meter)); } else { providerService.pushMeterMetrics(meter.deviceId(), Collections.emptyList()); } } + /** + * Verify enabling user defined index mode in meter service. + */ + @Test + public void testEnableUserDefinedIndex() { + reset(componentContext); + Dictionary cfgDict = new Hashtable<>(); + cfgDict.put(MM_USER_DEFINED_INDEX, true); + expect(componentContext.getProperties()).andReturn(cfgDict); + replay(componentContext); + + Object returnValue = TestUtils.callMethod(manager, "readComponentConfiguration", + ComponentContext.class, componentContext); + assertNull(returnValue); + assertTrue(manager.userDefinedIndex); + } + + /** + * Verify disabling user defined index mode in meter service. + */ + @Test + public void testDisableUserDefinedIndex() { + testEnableUserDefinedIndex(); + + reset(componentContext); + Dictionary cfgDict = new Hashtable<>(); + cfgDict.put(MM_USER_DEFINED_INDEX, false); + expect(componentContext.getProperties()).andReturn(cfgDict); + replay(componentContext); + + Object returnValue = TestUtils.callMethod(manager, "readComponentConfiguration", + ComponentContext.class, componentContext); + assertNull(returnValue); + assertFalse(manager.userDefinedIndex); + } + /** * Test add meter. */ @@ -340,6 +430,49 @@ public void testAdd() { assertEquals("The meter was not installed", 1, manager.getMeters(did1).size()); } + /** + * Test add meter with user defined index. + */ + @Test + public void testAddWithUserDefinedIndex() { + initMeterStore(); + testEnableUserDefinedIndex(); + + manager.submit(userDefinedRequest.add()); + assertEquals("The meter was not added", 1, manager.getAllMeters().size()); + assertEquals("The meter was not added", 1, manager.getMeters(PROGRAMMABLE_DID).size()); + Meter installingMeter = manager.getMeter(PROGRAMMABLE_DID, cid0); + assertThat(installingMeter, is(mUserDefined)); + assertThat(installingMeter.state(), is(MeterState.PENDING_ADD)); + + pushMetrics(MeterOperation.Type.ADD, installingMeter); + Meter installedMeter = manager.getMeter(PROGRAMMABLE_DID, cid0); + assertThat(installedMeter.state(), is(MeterState.ADDED)); + assertEquals("The meter was not installed", 1, manager.getAllMeters().size()); + assertEquals("The meter was not installed", 1, manager.getMeters(PROGRAMMABLE_DID).size()); + } + + /** + * Test wrong add meter. + */ + @Test(expected = IllegalArgumentException.class) + public void testWrongAdd() { + initMeterStore(); + + manager.submit(userDefinedRequest.add()); + } + + /** + * Test wrong add meter in user defined index mode. + */ + @Test(expected = IllegalArgumentException.class) + public void testWrongAddInUserDefinedIndexMode() { + initMeterStore(); + testEnableUserDefinedIndex(); + + manager.submit(m1Request.add()); + } + /** * Test remove meter. */ @@ -366,7 +499,29 @@ public void testRemove() { } /** - * Test add multiple device. + * Test remove meter in user defined index mode. + */ + @Test + public void testRemoveInUserDefinedIndexMode() { + initMeterStore(); + testEnableUserDefinedIndex(); + + manager.submit(userDefinedRequest.add()); + + manager.withdraw(userDefinedRequest.remove(), cid0); + Meter withdrawingMeter = manager.getMeter(PROGRAMMABLE_DID, cid0); + assertThat(withdrawingMeter.state(), is(MeterState.PENDING_REMOVE)); + assertEquals("The meter was not withdrawn", 1, manager.getAllMeters().size()); + assertEquals("The meter was not withdrawn", 1, manager.getMeters(PROGRAMMABLE_DID).size()); + + pushMetrics(MeterOperation.Type.REMOVE, withdrawingMeter); + assertNull(manager.getMeter(PROGRAMMABLE_DID, cid0)); + assertEquals("The meter was not removed", 0, manager.getAllMeters().size()); + assertEquals("The meter was not removed", 0, manager.getMeters(PROGRAMMABLE_DID).size()); + } + + /** + * Test add multiple devices. */ @Test public void testAddMultipleDevice() { @@ -404,7 +559,7 @@ public void testAddMultipleDevice() { } /** - * Test remove meter. + * Test remove multiple devices. */ @Test public void testRemoveMultipleDevice() { @@ -460,6 +615,9 @@ public void testPurge() { assertEquals("The meter was not purged", 0, manager.getMeters(did1).size()); } + /** + * Test submit for programmable devices. + */ @Test public void testAddFromMeterProgrammable() { // Init store @@ -471,6 +629,9 @@ public void testAddFromMeterProgrammable() { }); } + /** + * Test batch submission for meter programmable. + */ @Test public void testAddBatchFromMeterProgrammable() { // Init store @@ -484,6 +645,9 @@ public void testAddBatchFromMeterProgrammable() { } + /** + * Verify get from meter programmable. + */ @Test public void testGetFromMeterProgrammable() { // Init store @@ -498,6 +662,89 @@ public void testGetFromMeterProgrammable() { }); } + /** + * Verify installation of missing meters when using meter programmable devices. + */ + @Test + public void testMissingFromMeterProgrammable() { + // Workaround when running the tests all together + meterOperations.clear(); + testGetFromMeterProgrammable(); + + assertThat(meterOperations.size(), is(1)); + manager.submit(mProgrammableRequest2.add()); + TestTools.assertAfter(500, () -> { + assertEquals("The meter was not added", 2, manager.getAllMeters().size()); + assertThat(manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)), is(mProgrammable2)); + assertThat(meterOperations.size(), is(2)); + assertThat(meterOperations.get(meterOperations.size() - 1), is(new MeterOperation(mProgrammable2, + MeterOperation.Type.ADD))); + }); + + TestTools.assertAfter(2000, () -> { + assertEquals("The meter was not added", 2, manager.getAllMeters().size()); + Meter pendingMeter = manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)); + assertThat(pendingMeter, is(mProgrammable2)); + assertEquals("incorrect state", MeterState.PENDING_ADD, pendingMeter.state()); + assertThat(meterOperations.size(), is(3)); + assertThat(meterOperations.get(meterOperations.size() - 1), is(new MeterOperation(mProgrammable2, + MeterOperation.Type.ADD))); + }); + } + + /** + * Verify removal of unknown meters when using meter programmable devices. + */ + @Test + public void testUnknownFromMeterProgrammable() { + meterOperations.clear(); + testGetFromMeterProgrammable(); + TestMeterProgrammable.unknownMeter = true; + + assertThat(meterOperations.size(), is(1)); + TestTools.assertAfter(2000, () -> { + assertEquals("The meter was not added", 1, manager.getAllMeters().size()); + Meter pendingMeter = manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)); + assertNull(pendingMeter); + assertThat(meterOperations.size(), is(2)); + assertThat(meterOperations.get(meterOperations.size() - 1), is(new MeterOperation(mProgrammable2, + MeterOperation.Type.REMOVE))); + }); + } + + /** + * Verify removal of meters when using meter programmable devices. + */ + @Test + public void testRemoveFromMeterProgrammable() { + testEnableUserDefinedIndex(); + initMeterStore(); + MeterDriverProvider fallback = (MeterDriverProvider) manager.defaultProvider(); + fallback.init(manager.deviceService, fallback.meterProviderService, manager.mastershipService, 1); + + manager.submit(mProgrammableRequest2.withIndex(2L).add()); + TestTools.assertAfter(500, () -> { + assertEquals("The meter was not added", 1, manager.getAllMeters().size()); + Meter pendingMeter = manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)); + assertThat(pendingMeter, is(mProgrammable2)); + assertEquals("incorrect state", MeterState.PENDING_ADD, pendingMeter.state()); + }); + + manager.withdraw(mProgrammableRequest2.remove(), MeterId.meterId(2)); + TestTools.assertAfter(500, () -> { + assertEquals("The meter was not withdrawn", 1, manager.getAllMeters().size()); + Meter pendingMeter = manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)); + assertThat(pendingMeter, is(mProgrammable2)); + assertEquals("incorrect state", MeterState.PENDING_REMOVE, pendingMeter.state()); + }); + + TestTools.assertAfter(2000, () -> { + assertEquals("The meter was not removed", 0, manager.getAllMeters().size()); + Meter pendingMeter = manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(2)); + assertNull(pendingMeter); + }); + } + // Test cluster service private final class TestClusterService extends ClusterServiceAdapter { @@ -563,6 +810,8 @@ public long getMaxMeters() { public static class TestMeterProgrammable extends AbstractHandlerBehaviour implements MeterProgrammable { + private static boolean unknownMeter; + @Override public CompletableFuture performMeterOperation(MeterOperation meterOp) { return CompletableFuture.completedFuture(meterOperations.add(meterOp)); @@ -571,9 +820,16 @@ public CompletableFuture performMeterOperation(MeterOperation meterOp) @Override public CompletableFuture> getMeters() { //ADD METER + Collection meters = Lists.newArrayList(); DefaultMeter mProgrammableAdded = (DefaultMeter) mProgrammable; mProgrammableAdded.setState(MeterState.ADDED); - return CompletableFuture.completedFuture(ImmutableList.of(mProgrammableAdded)); + meters.add(mProgrammableAdded); + if (unknownMeter) { + DefaultMeter mProgrammable2Added = (DefaultMeter) mProgrammable2; + mProgrammable2Added.setState(MeterState.ADDED); + meters.add(mProgrammable2Added); + } + return CompletableFuture.completedFuture(meters); } @Override diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 7f7873c05c3..afc6d9475f2 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -83,6 +83,7 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import static com.google.common.base.Preconditions.checkArgument; import static org.onosproject.store.meter.impl.DistributedMeterStore.ReuseStrategy.FIRST_FIT; import static org.onosproject.net.meter.MeterFailReason.TIMEOUT; import static org.onosproject.net.meter.MeterCellId.MeterCellType.INDEX; @@ -115,7 +116,7 @@ public class DistributedMeterStore extends AbstractStore> availableMeterIds; + protected ConcurrentMap> availableMeterIds; // Atomic counter map for generation of new identifiers; private static final String METERIDSTORE = "onos-meters-id-store"; private AtomicCounterMap meterIdGenerators; @@ -130,7 +131,12 @@ public class DistributedMeterStore extends AbstractStore> futures = Maps.newConcurrentMap(); + // Control the user defined index mode for the store. + protected boolean userDefinedIndexMode = false; + /** * Defines possible selection strategies to reuse meter ids. */ @@ -170,16 +179,7 @@ public void activate() { metersFeatures = storageService.eventuallyConsistentMapBuilder() .withName(METERFEATURESSTORE) .withTimestampProvider((key, features) -> new WallClockTimestamp()) - .withSerializer(KryoNamespace.newBuilder() - .register(KryoNamespaces.API) - .register(MeterTableKey.class) - .register(MeterFeatures.class) - .register(DefaultMeterFeatures.class) - .register(DefaultBand.class) - .register(Band.Type.class) - .register(Meter.Unit.class) - .register(MeterFailReason.class) - .register(MeterFeaturesFlag.class)).build(); + .withSerializer(APP_KRYO_BUILDER).build(); metersFeatures.addListener(featuresMapListener); // Init the map of the available ids set // Set will be created when a new Meter Features is pushed to the store @@ -190,6 +190,7 @@ public void activate() { .withSerializer(Serializer.using(KryoNamespaces.API, MeterTableKey.class, MeterScope.class)).build(); + log.info("Started"); } @@ -199,15 +200,15 @@ public void deactivate() { metersFeatures.removeListener(featuresMapListener); meters.destroy(); metersFeatures.destroy(); - availableMeterIds.forEach((key, set) -> { - set.destroy(); - }); + availableMeterIds.forEach((key, set) -> set.destroy()); + log.info("Stopped"); } @Override public CompletableFuture addOrUpdateMeter(Meter meter) { - // Init steps + // Verify integrity of the index + checkArgument(validIndex(meter), "Meter index is not valid"); CompletableFuture future = new CompletableFuture<>(); MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); MeterData data = new MeterData(meter, null); @@ -227,23 +228,7 @@ public CompletableFuture addOrUpdateMeter(Meter meter) { @Override public CompletableFuture storeMeter(Meter meter) { - // Init steps - CompletableFuture future = new CompletableFuture<>(); - MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); - // Store the future related to the operation - futures.put(key, future); - // Store the meter data - MeterData data = new MeterData(meter, null); - try { - meters.put(key, data); - } catch (StorageException e) { - log.error("{} thrown a storage exception: {}", e.getStackTrace()[0].getMethodName(), - e.getMessage(), e); - futures.remove(key); - future.completeExceptionally(e); - } - // Done, return the future - return future; + return addOrUpdateMeter(meter); } @Override @@ -309,9 +294,7 @@ public MeterStoreResult deleteMeterFeatures(DeviceId deviceId) { Set keys = metersFeatures.keySet().stream() .filter(key -> key.deviceId().equals(deviceId)) .collect(Collectors.toUnmodifiableSet()); - keys.forEach(k -> { - metersFeatures.remove(k); - }); + keys.forEach(k -> metersFeatures.remove(k)); } catch (StorageException e) { log.error("{} thrown a storage exception: {}", e.getStackTrace()[0].getMethodName(), e.getMessage(), e); @@ -341,27 +324,6 @@ public MeterStoreResult deleteMeterFeatures(Collection meterfeatu return result; } - @Override - // TODO Should we remove it ? We are not using it - public CompletableFuture updateMeter(Meter meter) { - CompletableFuture future = new CompletableFuture<>(); - MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); - futures.put(key, future); - - MeterData data = new MeterData(meter, null); - try { - if (meters.computeIfPresent(key, (k, v) -> data) == null) { - future.complete(MeterStoreResult.fail(MeterFailReason.INVALID_METER)); - } - } catch (StorageException e) { - log.error("{} thrown a storage exception: {}", e.getStackTrace()[0].getMethodName(), - e.getMessage(), e); - futures.remove(key); - future.completeExceptionally(e); - } - return future; - } - @Override public Meter updateMeterState(Meter meter) { // Update meter if present (stats workflow) @@ -405,7 +367,7 @@ public Collection getAllMeters(DeviceId deviceId) { @Override public void failedMeter(MeterOperation op, MeterFailReason reason) { // Meter ops failed (got notification from the sb) - MeterKey key = MeterKey.key(op.meter().deviceId(), op.meter().id()); + MeterKey key = MeterKey.key(op.meter().deviceId(), op.meter().meterCellId()); meters.computeIfPresent(key, (k, v) -> new MeterData(v.meter(), reason)); } @@ -419,7 +381,7 @@ public void deleteMeterNow(Meter m) { public void purgeMeter(Meter m) { // Once we receive the ack from the sb // create the key and remove definitely the meter - MeterKey key = MeterKey.key(m.deviceId(), m.id()); + MeterKey key = MeterKey.key(m.deviceId(), m.meterCellId()); try { if (Versioned.valueOrNull(meters.remove(key)) != null) { // Free the id @@ -441,6 +403,12 @@ public void purgeMeter(Meter m) { @Override public void purgeMeter(DeviceId deviceId) { + // This method is renamed in onos-2.5 + purgeMeters(deviceId); + } + + @Override + public void purgeMeters(DeviceId deviceId) { List> metersPendingRemove = meters.stream() .filter(e -> Objects.equals(e.getKey().deviceId(), deviceId)) .map(Map.Entry::getValue) @@ -456,7 +424,19 @@ public void purgeMeters(DeviceId deviceId, ApplicationId appId) { e.getValue().value().meter().appId().equals(appId)) .map(Map.Entry::getValue) .collect(Collectors.toList()); - metersPendingRemove.forEach(versionedMeterKey -> deleteMeterNow(versionedMeterKey.value().meter())); + metersPendingRemove.forEach(versionedMeterKey + -> purgeMeter(versionedMeterKey.value().meter())); + } + + @Override + public boolean userDefinedIndexMode(boolean enable) { + if (meters.isEmpty() && meterIdGenerators.isEmpty()) { + userDefinedIndexMode = enable; + } else { + log.warn("Unable to {} user defined index mode as store did" + + "already some allocations", enable ? "activate" : "deactivate"); + } + return userDefinedIndexMode; } @Override @@ -473,6 +453,28 @@ private long getMaxMeters(MeterTableKey key) { return features == null ? 0L : features.maxMeter(); } + private boolean validIndex(Meter meter) { + long index; + MeterTableKey key; + + if (meter.meterCellId().type() == PIPELINE_INDEPENDENT) { + PiMeterCellId piMeterCellId = (PiMeterCellId) meter.meterCellId(); + index = piMeterCellId.index(); + key = MeterTableKey.key(meter.deviceId(), MeterScope.of(piMeterCellId.meterId().id())); + } else if (meter.meterCellId().type() == INDEX) { + MeterId meterId = (MeterId) meter.meterCellId(); + index = meterId.id(); + key = MeterTableKey.key(meter.deviceId(), MeterScope.globalScope()); + } else { + return false; + } + + MeterFeatures features = metersFeatures.get(key); + long startIndex = features == null ? -1L : features.startIndex(); + long endIndex = features == null ? -1L : features.endIndex(); + return index >= startIndex && index <= endIndex; + } + private long getStartIndex(MeterTableKey key) { // Leverage the meter features to know the start id // Since we are using index now @@ -556,7 +558,7 @@ private MeterCellId firstReusableMeterId(MeterTableKey meterTableKey) { Set localAvailableMeterIds = keySet.stream() .filter(meterKey -> meterKey.deviceId().equals(meterTableKey.deviceId())) - .map(MeterKey::meterId) + .map(MeterKey::meterCellId) .collect(Collectors.toSet()); // Get next available id MeterCellId meterId = getNextAvailableId(localAvailableMeterIds); @@ -584,6 +586,10 @@ public MeterId allocateMeterId(DeviceId deviceId) { @Override public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { + if (userDefinedIndexMode) { + log.warn("Unable to allocate meter id when user defined index mode is enabled"); + return null; + } MeterTableKey meterTableKey = MeterTableKey.key(deviceId, meterScope); MeterCellId meterCellId; long id; @@ -638,6 +644,10 @@ public void freeMeterId(DeviceId deviceId, MeterId meterId) { } private void freeMeterId(MeterTableKey meterTableKey, MeterCellId meterCellId) { + if (userDefinedIndexMode) { + log.warn("Unable to free meter id when user defined index mode is enabled"); + return; + } long index; if (meterCellId.type() == PIPELINE_INDEPENDENT) { PiMeterCellId piMeterCellId = (PiMeterCellId) meterCellId; diff --git a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java index 05277552986..37ff7b4702c 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java @@ -21,10 +21,8 @@ import org.junit.Before; import org.junit.Test; import org.onlab.junit.TestUtils; -import org.onlab.packet.IpAddress; import org.onlab.util.KryoNamespace; import org.onosproject.TestApplicationId; -import org.onosproject.cluster.NodeId; import org.onosproject.net.DeviceId; import org.onosproject.net.behaviour.MeterQuery; import org.onosproject.net.driver.Behaviour; @@ -37,11 +35,16 @@ import org.onosproject.net.meter.DefaultMeter; import org.onosproject.net.meter.DefaultMeterFeatures; import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterFeatures; import org.onosproject.net.meter.MeterFeaturesKey; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterKey; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterState; +import org.onosproject.net.meter.MeterTableKey; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.store.service.Serializer; import org.onosproject.store.service.TestStorageService; @@ -61,13 +64,6 @@ * Meter store tests. */ public class DistributedMeterStoreTest { - - // Test node id - private static final NodeId NID_LOCAL = new NodeId("local"); - - // Test ip address - private static final IpAddress LOCALHOST = IpAddress.valueOf("127.0.0.1"); - // Store under testing private DistributedMeterStore meterStore; @@ -82,6 +78,10 @@ public class DistributedMeterStoreTest { private MeterId mid2 = MeterId.meterId(2); private MeterId mid3 = MeterId.meterId(3); private MeterId mid10 = MeterId.meterId(10); + private MeterCellId cid4 = PiMeterCellId.ofIndirect( + PiMeterId.of("foo"), 4); + private MeterCellId invalidCid = PiMeterCellId.ofIndirect( + PiMeterId.of("foo"), 11); // Bands used during the tests private Band b1 = DefaultBand.builder() @@ -114,6 +114,14 @@ public class DistributedMeterStoreTest { .withBands(Collections.singletonList(b1)) .build(); + private Meter m4 = DefaultMeter.builder() + .forDevice(did3) + .fromApp(APP_ID) + .withCellId(cid4) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + // Meter features used during the tests private MeterFeatures mef1 = DefaultMeterFeatures.builder().forDevice(did1) .withMaxMeters(3L) @@ -133,6 +141,17 @@ public class DistributedMeterStoreTest { .withMaxBands((byte) 0) .withMaxColors((byte) 0) .build(); + private MeterFeatures mef3 = DefaultMeterFeatures.builder().forDevice(did3) + .withStartIndex(0L) + .withEndIndex(10L) + .withScope(MeterScope.of("foo")) + .withBandTypes(new HashSet<>()) + .withUnits(new HashSet<>()) + .hasStats(false) + .hasBurst(false) + .withMaxBands((byte) 0) + .withMaxColors((byte) 0) + .build(); @Before public void setup() { @@ -158,11 +177,13 @@ public void tearDown() { meterStore.deactivate(); } - private void initMeterStore() { + private void initMeterStore(boolean enableUserDefinedIndex) { + meterStore.userDefinedIndexMode(enableUserDefinedIndex); // Let's store feature for device 1 meterStore.storeMeterFeatures(mef1); // Let's store feature for device 2 meterStore.storeMeterFeatures(mef2); + meterStore.storeMeterFeatures(mef3); } /** @@ -201,7 +222,7 @@ public void testDeleteMeterFeatures() { @Test public void testAllocateId() { // Init the store - initMeterStore(); + initMeterStore(false); // Allocate a meter id and verify is equal to mid1 assertThat(mid1, is(meterStore.allocateMeterId(did1))); // Allocate a meter id and verify is equal to mid2 @@ -214,7 +235,7 @@ public void testAllocateId() { @Test public void testFreeId() { // Init the store - initMeterStore(); + initMeterStore(false); // Allocate a meter id and verify is equal to mid1 assertThat(mid1, is(meterStore.allocateMeterId(did1))); // Free the above id @@ -233,7 +254,7 @@ public void testFreeId() { @Test public void testReuseId() { // Init the store - initMeterStore(); + initMeterStore(false); // Reserve id 1 MeterId meterIdOne = meterStore.allocateMeterId(did2); // Free the above id @@ -291,7 +312,7 @@ public void testReuseId() { @Test public void testQueryMeters() { // Init the store - initMeterStore(); + initMeterStore(false); // Let's test queryMeters assertThat(mid1, is(meterStore.allocateMeterId(did3))); // Let's test queryMeters error @@ -304,7 +325,7 @@ public void testQueryMeters() { @Test public void testMaxMeterError() { // Init the store - initMeterStore(); + initMeterStore(false); // Reserve id 1 assertThat(mid1, is(meterStore.allocateMeterId(did1))); // Reserve id 2 @@ -319,7 +340,7 @@ public void testMaxMeterError() { @Test public void testStoreMeter() { // Init the store - initMeterStore(); + initMeterStore(false); // Simulate the allocation of an id MeterId idOne = meterStore.allocateMeterId(did1); // Verify the allocation @@ -350,7 +371,7 @@ public void testStoreMeter() { @Test public void testDeleteMeter() { // Init the store - initMeterStore(); + initMeterStore(false); // Simulate the allocation of an id MeterId idOne = meterStore.allocateMeterId(did1); // Verify the allocation @@ -396,7 +417,7 @@ public void testDeleteMeter() { @Test public void testNoDeleteMeter() { // Init the store - initMeterStore(); + initMeterStore(false); // Simulate the allocation of an id MeterId idOne = meterStore.allocateMeterId(did1); // Create the key @@ -440,7 +461,7 @@ public void testPurgeMeter() { @Test public void testPurgeMeterDeviceAndApp() { // Init the store - initMeterStore(); + initMeterStore(false); // add the meters ((DefaultMeter) m1).setState(MeterState.PENDING_ADD); ((DefaultMeter) m2).setState(MeterState.PENDING_ADD); @@ -465,7 +486,7 @@ public void testPurgeMeterDeviceAndApp() { @Test public void testGetMetersImmutability() { // Init the store - initMeterStore(); + initMeterStore(false); // Simulate the allocation of an id MeterId idOne = meterStore.allocateMeterId(did1); @@ -513,8 +534,144 @@ public void testGetMetersImmutability() { metersDevice = meterStore.getAllMeters(did1); assertThat(2, is(meters.size())); assertThat(2, is(metersDevice.size())); + } + /** + * Test invalid allocation of a cell id. + */ + @Test(expected = IllegalArgumentException.class) + public void testInvalidCellId() { + initMeterStore(true); + // MF defines an end index equals to 10 + Meter meterBad = DefaultMeter.builder() + .forDevice(did3) + .fromApp(APP_ID) + .withCellId(invalidCid) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + ((DefaultMeter) meterBad).setState(MeterState.PENDING_ADD); + meterStore.storeMeter(meterBad); + } + /** + * Test enabling user defined index mode. + */ + @Test + public void testEnableUserDefinedIndex() { + initMeterStore(false); + assertTrue(meterStore.userDefinedIndexMode(true)); + } + + /** + * Test invalid enabling user defined index mode. + */ + @Test + public void testInvalidEnableUserDefinedIndex() { + testStoreMeter(); + assertFalse(meterStore.userDefinedIndexMode(true)); + } + + /** + * Test disabling user defined index mode. + */ + @Test + public void testDisableUserDefinedIndex() { + initMeterStore(true); + assertFalse(meterStore.userDefinedIndexMode(false)); + } + + /** + * Test store meter in user defined index mode. + */ + @Test + public void testStoreMeterInUserDefinedIndexMode() { + initMeterStore(true); + // Let's create a meter + Meter meterOne = DefaultMeter.builder() + .forDevice(did3) + .fromApp(APP_ID) + .withCellId(cid4) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + // Set the state + ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); + // Store the meter + meterStore.storeMeter(meterOne); + // Let's create meter key + MeterKey meterKey = MeterKey.key(did3, cid4); + // Verify the store + assertThat(1, is(meterStore.getAllMeters().size())); + assertThat(1, is(meterStore.getAllMeters(did3).size())); + assertThat(m4, is(meterStore.getMeter(meterKey))); + } + + /** + * Test invalid disabling user defined index mode. + */ + @Test + public void testInvalidDisableUserDefinedIndex() { + testStoreMeterInUserDefinedIndexMode(); + assertTrue(meterStore.userDefinedIndexMode(false)); + } + + /** + * Test allocation of meter ids in user defined index mode. + */ + @Test + public void testAllocateIdInUserDefinedIndexMode() { + initMeterStore(true); + assertNull(meterStore.allocateMeterId(did1)); + } + + /** + * Test free of meter ids in user defined index mode. + */ + @Test + public void testFreeIdInUserMode() { + initMeterStore(true); + // Free the id and expect not being available + meterStore.freeMeterId(did1, mid1); + MeterTableKey globalKey = MeterTableKey.key(did1, MeterScope.globalScope()); + assertNotNull(meterStore.availableMeterIds.get(globalKey)); + assertTrue(meterStore.availableMeterIds.get(globalKey).isEmpty()); + } + + /** + * Test delete meter in user defined index mode. + */ + @Test + public void testDeleteMeterInUserDefinedIndexMode() { + initMeterStore(true); + Meter meterOne = DefaultMeter.builder() + .forDevice(did3) + .fromApp(APP_ID) + .withCellId(cid4) + .withUnit(Meter.Unit.KB_PER_SEC) + .withBands(Collections.singletonList(b1)) + .build(); + ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); + meterStore.storeMeter(meterOne); + + ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE); + MeterKey meterKey = MeterKey.key(did3, cid4); + meterStore.deleteMeter(meterOne); + CompletableFuture future = CompletableFuture.runAsync( + () -> meterStore.purgeMeter(meterOne) + ); + + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + assertThat(0, is(meterStore.getAllMeters().size())); + assertThat(0, is(meterStore.getAllMeters(did3).size())); + assertNull(meterStore.getMeter(meterKey)); + MeterTableKey globalKey = MeterTableKey.key(did1, MeterScope.globalScope()); + assertNotNull(meterStore.availableMeterIds.get(globalKey)); + assertTrue(meterStore.availableMeterIds.get(globalKey).isEmpty()); } // Test class for driver service. From 78b4d6f3c3060bba748e7b51af615abf796e1e94 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 27 Aug 2021 17:20:00 +0200 Subject: [PATCH 118/235] [SDFAB-522] Fix port type for pair ports Additionally standardize the usage of the 64 bits carried in the metadata instruction. Implements unit tests for different metadata configurations Change-Id: I3382657c81876ec2eb0749f06f0fb9e96b2c0e6e --- .../fabric/impl/behaviour/Constants.java | 61 ++++++++++++ .../fabric/impl/behaviour/FabricUtils.java | 92 +++++++++++++++++ .../FilteringObjectiveTranslator.java | 75 ++++---------- .../ForwardingObjectiveTranslator.java | 18 +++- .../FilteringObjectiveTranslatorTest.java | 98 +++++++++++++++++-- .../ForwardingObjectiveTranslatorTest.java | 6 +- 6 files changed, 281 insertions(+), 69 deletions(-) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java index 6f92cad8629..52675726807 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java @@ -16,6 +16,10 @@ package org.onosproject.pipelines.fabric.impl.behaviour; +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + /** * Constant values. */ @@ -48,6 +52,63 @@ public final class Constants { public static final int DEFAULT_TC = 0; public static final byte DEFAULT_QFI = (byte) 0x00; + ////////////////////////////////////////////////////////////////////////////// + // 64 .... 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 // + // X X X X X X X X X X X X X X X X X X X X X 1 1 1 1 1 // + ////////////////////////////////////////////////////////////////////////////// + // Metadata instruction is used as 8 byte sequence to carry up to 64 metadata + + // FIXME We are assuming SR as the only app programming this meta. + // SDFAB-530 to get rid of this limitation + + /** + * SR is setting this metadata when a double tagged filtering objective is removed + * and no other hosts is sharing the same input port. Thus, termination mac entries + * can be removed together with the vlan table entries. + * + * See org.onosproject.segmentrouting.RoutingRulePopulator#buildDoubleTaggedFilteringObj() + * See org.onosproject.segmentrouting.RoutingRulePopulator#processDoubleTaggedFilter() + */ + public static final long CLEANUP_DOUBLE_TAGGED_HOST_ENTRIES = 1; + + /** + * SR is setting this metadata when an interface config update has been performed + * and thus termination mac entries should not be removed. + * + * See org.onosproject.segmentrouting.RoutingRulePopulator#processSinglePortFiltersInternal + */ + public static final long INTERFACE_CONFIG_UPDATE = 1L << 1; + + /** + * SR is setting this metadata to signal the driver when the config is for the pair port, + * i.e. ports connecting two leaves. + * + * See org.onosproject.segmentrouting.RoutingRulePopulator#portType + */ + public static final long PAIR_PORT = 1L << 2; + + /** + * SR is setting this metadata to signal the driver when the config is for an edge port, + * i.e. ports facing an host. + * + * See org.onosproject.segmentrouting.policy.impl.PolicyManager#trafficMatchFwdObjective + * See org.onosproject.segmentrouting.RoutingRulePopulator#portType + */ + public static final long EDGE_PORT = 1L << 3; + + /** + * SR is setting this metadata to signal the driver when the config is for an infra port, + * i.e. ports connecting a leaf with a spine. + */ + public static final long INFRA_PORT = 1L << 4; + + public static final long METADATA_MASK = 0x1FL; + + public static final Map METADATA_TO_PORT_TYPE = ImmutableMap.builder() + .put(PAIR_PORT, PORT_TYPE_INFRA) + .put(EDGE_PORT, PORT_TYPE_EDGE) + .put(INFRA_PORT, PORT_TYPE_INFRA) + .build(); // hide default constructor private Constants() { diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java index 4496f19073c..5d89f99bf29 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java @@ -20,11 +20,15 @@ import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; +import org.onosproject.net.flow.criteria.MetadataCriterion; import org.onosproject.net.flow.instructions.Instruction; import org.onosproject.net.flow.instructions.Instructions; import org.onosproject.net.flow.instructions.L2ModificationInstruction; import org.onosproject.net.flowobjective.DefaultNextTreatment; +import org.onosproject.net.flowobjective.FilteringObjective; +import org.onosproject.net.flowobjective.ForwardingObjective; import org.onosproject.net.flowobjective.NextTreatment; +import org.onosproject.net.flowobjective.Objective; import org.onosproject.net.pi.model.PiPipelineInterpreter; import org.onosproject.net.pi.model.PiTableId; @@ -34,6 +38,11 @@ import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.String.format; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.EDGE_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.INFRA_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.METADATA_MASK; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.METADATA_TO_PORT_TYPE; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PAIR_PORT; /** * Utility class with methods common to fabric pipeconf operations. @@ -123,4 +132,87 @@ public static void treatmentException( throw new PiPipelineInterpreter.PiInterpreterException(format( "Invalid treatment for table '%s', %s: %s", tableId, explanation, treatment)); } + + /** + * Port type metadata conversion. + * + * @param obj the objective + * @return the port type associated to the metadata, null otherwise + */ + public static Byte portType(Objective obj) { + Byte portType = null; + if (isSrMetadataSet(obj, PAIR_PORT) && METADATA_TO_PORT_TYPE.containsKey(PAIR_PORT)) { + portType = METADATA_TO_PORT_TYPE.get(PAIR_PORT); + } else if (isSrMetadataSet(obj, EDGE_PORT) && METADATA_TO_PORT_TYPE.containsKey(EDGE_PORT)) { + portType = METADATA_TO_PORT_TYPE.get(EDGE_PORT); + } else if (isSrMetadataSet(obj, INFRA_PORT) && METADATA_TO_PORT_TYPE.containsKey(INFRA_PORT)) { + portType = METADATA_TO_PORT_TYPE.get(INFRA_PORT); + } + return portType; + } + + /** + * Check metadata passed from SegmentRouting app. + * + * @param obj the objective containing the metadata + * @return true if the objective contains valid metadata, false otherwise + */ + public static boolean isValidSrMetadata(Objective obj) { + long meta = 0; + if (obj instanceof FilteringObjective) { + FilteringObjective filtObj = (FilteringObjective) obj; + if (filtObj.meta() == null) { + return true; + } + Instructions.MetadataInstruction metaIns = filtObj.meta().writeMetadata(); + if (metaIns == null) { + return true; + } + meta = metaIns.metadata() & metaIns.metadataMask(); + } else if (obj instanceof ForwardingObjective) { + ForwardingObjective fwdObj = (ForwardingObjective) obj; + if (fwdObj.meta() == null) { + return true; + } + MetadataCriterion metaCrit = (MetadataCriterion) fwdObj.meta().getCriterion(Criterion.Type.METADATA); + if (metaCrit == null) { + return true; + } + meta = metaCrit.metadata(); + } + return meta != 0 && ((meta ^ METADATA_MASK) <= METADATA_MASK); + } + + /** + * Verify if a given flag has been set into the metadata. + * + * @param obj the objective containing the metadata + * @param flag the flag to verify + * @return true if the flag is set, false otherwise + */ + public static boolean isSrMetadataSet(Objective obj, long flag) { + long meta = 0; + if (obj instanceof FilteringObjective) { + FilteringObjective filtObj = (FilteringObjective) obj; + if (filtObj.meta() == null) { + return false; + } + Instructions.MetadataInstruction metaIns = filtObj.meta().writeMetadata(); + if (metaIns == null) { + return false; + } + meta = metaIns.metadata() & metaIns.metadataMask(); + } else if (obj instanceof ForwardingObjective) { + ForwardingObjective fwdObj = (ForwardingObjective) obj; + if (fwdObj.meta() == null) { + return false; + } + MetadataCriterion metaCrit = (MetadataCriterion) fwdObj.meta().getCriterion(Criterion.Type.METADATA); + if (metaCrit == null) { + return false; + } + meta = metaCrit.metadata(); + } + return (meta & flag) == flag; + } } diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java index bfdcc2ba197..387230b5f21 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java @@ -32,7 +32,6 @@ import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.PortCriterion; import org.onosproject.net.flow.criteria.VlanIdCriterion; -import org.onosproject.net.flow.instructions.Instructions; import org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType; import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction; import org.onosproject.net.flowobjective.FilteringObjective; @@ -54,21 +53,21 @@ import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID; import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP; import static org.onosproject.net.pi.model.PiPipelineInterpreter.PiInterpreterException; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_VLAN; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_PW_TRANSPORT_VLAN; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.CLEANUP_DOUBLE_TAGGED_HOST_ENTRIES; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ETH_TYPE_EXACT_MASK; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_MPLS; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV4_ROUTING; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV6_ROUTING; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.INTERFACE_CONFIG_UPDATE; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ONE; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ZERO; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.isSrMetadataSet; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.isValidSrMetadata; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.portType; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2InstructionOrFail; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterion; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction; - /** * ObjectiveTranslator implementation for FilteringObjective. */ @@ -79,8 +78,6 @@ class FilteringObjectiveTranslator .withId(FabricConstants.FABRIC_INGRESS_FILTERING_DENY) .build(); - private static final int INTERFACE_CONFIG_UPDATE = 2; - FilteringObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) { super(deviceId, capabilities); } @@ -98,6 +95,12 @@ public ObjectiveTranslation doTranslate(FilteringObjective obj) ObjectiveError.BADPARAMS); } + if (!isValidSrMetadata(obj)) { + throw new FabricPipelinerException( + format("Unsupported metadata configuration: metadata=%s", obj.meta()), + ObjectiveError.BADPARAMS); + } + final PortCriterion inPort = (PortCriterion) obj.key(); final VlanIdCriterion outerVlan = (VlanIdCriterion) criterion( @@ -134,44 +137,9 @@ private boolean shouldModifyFwdClassifierTable(FilteringObjective obj) { // AND it is a port REMOVE event OR // - it refers to double tagged traffic // and SR is triggering the removal of forwarding classifier rules. - return (obj.op() == Objective.Operation.ADD && !isInterfaceConfigUpdate(obj)) || - (!isDoubleTagged(obj) && !isInterfaceConfigUpdate(obj)) || - (isDoubleTagged(obj) && isLastDoubleTaggedForPort(obj)); - } - - /** - * Check if the given filtering objective is triggered by a interface config change. - * - * @param obj Filtering objective to check. - * @return True if SR is signaling to not remove the forwarding classifier rule, - * false otherwise. - */ - private boolean isInterfaceConfigUpdate(FilteringObjective obj) { - if (obj.meta() == null) { - return false; - } - Instructions.MetadataInstruction meta = obj.meta().writeMetadata(); - // SR is setting this metadata when an interface config update has - // been performed and thus fwd classifier rules should not be removed - return (meta != null && (meta.metadata() & meta.metadataMask()) == INTERFACE_CONFIG_UPDATE); - } - - /** - * Check if the given filtering objective is the last filtering objective - * for a double-tagged host for a specific port. - *

- * {@see org.onosproject.segmentrouting.RoutingRulePopulator#buildDoubleTaggedFilteringObj()} - * {@see org.onosproject.segmentrouting.RoutingRulePopulator#processDoubleTaggedFilter()} - * - * @param obj Filtering objective to check. - * @return True if SR is signaling to remove the forwarding classifier rule, - * false otherwise. - */ - private boolean isLastDoubleTaggedForPort(FilteringObjective obj) { - Instructions.MetadataInstruction meta = obj.meta().writeMetadata(); - // SR is setting this metadata when a double tagged filtering objective - // is removed and no other hosts is sharing the same input port. - return (meta != null && (meta.metadata() & meta.metadataMask()) == 1); + return (obj.op() == Objective.Operation.ADD && !isSrMetadataSet(obj, INTERFACE_CONFIG_UPDATE)) || + (!isDoubleTagged(obj) && !isSrMetadataSet(obj, INTERFACE_CONFIG_UPDATE)) || + (isDoubleTagged(obj) && isSrMetadataSet(obj, CLEANUP_DOUBLE_TAGGED_HOST_ENTRIES)); } private boolean isDoubleTagged(FilteringObjective obj) { @@ -218,15 +186,12 @@ private void ingressPortVlanRule( if (obj.type().equals(FilteringObjective.Type.DENY)) { treatmentBuilder.piTableAction(DENY); } else { - byte portType = PORT_TYPE_EDGE; - if (!innerVlanValid && outerVlanValid && - outerVlanCriterion.vlanId().toShort() == DEFAULT_PW_TRANSPORT_VLAN) { - portType = PORT_TYPE_INFRA; - } else if (obj.meta() != null) { - ModVlanIdInstruction modVlanIdInstruction = (ModVlanIdInstruction) l2Instruction(obj.meta(), VLAN_ID); - if (modVlanIdInstruction != null && modVlanIdInstruction.vlanId().toShort() == DEFAULT_VLAN) { - portType = PORT_TYPE_INFRA; - } + // FIXME SDFAB-52 to complete the work on metadata + Byte portType = portType(obj); + if (portType == null) { + throw new FabricPipelinerException( + format("Unsupported port_type configuration: metadata=%s", obj.meta()), + ObjectiveError.BADPARAMS); } try { treatmentBuilder.piTableAction(mapFilteringTreatment(obj.meta(), diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java index d5272286b30..e0c7ec10374 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java @@ -32,7 +32,6 @@ import org.onosproject.net.flow.criteria.Criterion; import org.onosproject.net.flow.criteria.EthCriterion; import org.onosproject.net.flow.criteria.IPCriterion; -import org.onosproject.net.flow.criteria.MetadataCriterion; import org.onosproject.net.flow.criteria.MplsCriterion; import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.VlanIdCriterion; @@ -59,6 +58,10 @@ import static java.lang.String.format; import static org.onosproject.net.group.DefaultGroupBucket.createCloneGroupBucket; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PAIR_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.isSrMetadataSet; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.isValidSrMetadata; +import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.portType; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterionNotNull; import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_MASK; @@ -119,6 +122,13 @@ class ForwardingObjectiveTranslator @Override public ObjectiveTranslation doTranslate(ForwardingObjective obj) throws FabricPipelinerException { + + if (!isValidSrMetadata(obj)) { + throw new FabricPipelinerException( + format("Unsupported metadata configuration: metadata=%s", obj.meta()), + ObjectiveError.BADPARAMS); + } + final ObjectiveTranslation.Builder resultBuilder = ObjectiveTranslation.builder(); switch (obj.flag()) { @@ -299,11 +309,11 @@ private void aclRule(ForwardingObjective obj, } TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder(obj.selector()); // Meta are used to signal the port type which can be edge or infra - if (obj.meta() != null && obj.meta().getCriterion(Criterion.Type.METADATA) != null) { - long portType = ((MetadataCriterion) obj.meta().getCriterion(Criterion.Type.METADATA)).metadata(); + Byte portType = portType(obj); + if (portType != null && !isSrMetadataSet(obj, PAIR_PORT)) { if (portType == PORT_TYPE_EDGE || portType == PORT_TYPE_INFRA) { selectorBuilder.matchPi(PiCriterion.builder() - .matchTernary(FabricConstants.HDR_PORT_TYPE, portType, PORT_TYPE_MASK) + .matchTernary(FabricConstants.HDR_PORT_TYPE, (long) portType, PORT_TYPE_MASK) .build()); } else { throw new FabricPipelinerException(format("Port type '%s' is not allowed for table '%s'", diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java index 73039b53821..5e126cccd9d 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java @@ -46,11 +46,14 @@ import static org.junit.Assert.assertEquals; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_PW_TRANSPORT_VLAN; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_VLAN; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.EDGE_PORT; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ETH_TYPE_EXACT_MASK; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV4_ROUTING; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV6_ROUTING; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_MPLS; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.INFRA_PORT; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ONE; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PAIR_PORT; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ZERO; @@ -75,7 +78,7 @@ public void setup() { */ @Test public void testRouterMacAndVlanFilter() throws FabricPipelinerException { - FilteringObjective filteringObjective = buildFilteringObjective(ROUTER_MAC); + FilteringObjective filteringObjective = buildFilteringObjective(ROUTER_MAC, EDGE_PORT); ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); Collection expectedFlowRules = Lists.newArrayList(); // in port vlan flow rule @@ -137,6 +140,7 @@ public void testIpv4MulticastFwdClass() throws FabricPipelinerException { TrafficTreatment treatment = DefaultTrafficTreatment.builder() .pushVlan() .setVlanId(VLAN_100) + .writeMetadata(EDGE_PORT, 0xffffffffffffffffL) .build(); FilteringObjective filteringObjective = DefaultFilteringObjective.builder() .permit() @@ -182,6 +186,7 @@ public void testIpv6MulticastFwdClass() throws FabricPipelinerException { TrafficTreatment treatment = DefaultTrafficTreatment.builder() .pushVlan() .setVlanId(VLAN_100) + .writeMetadata(EDGE_PORT, 0xffffffffffffffffL) .build(); FilteringObjective filteringObjective = DefaultFilteringObjective.builder() .permit() @@ -223,7 +228,7 @@ public void testIpv6MulticastFwdClass() throws FabricPipelinerException { */ @Test public void testFwdBridging() throws Exception { - FilteringObjective filteringObjective = buildFilteringObjective(null); + FilteringObjective filteringObjective = buildFilteringObjective(null, EDGE_PORT); ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); // in port vlan flow rule @@ -300,8 +305,9 @@ public void testPopVlan() throws FabricPipelinerException { .withPriority(PRIORITY) .fromApp(APP_ID) .withMeta(DefaultTrafficTreatment.builder() - .popVlan() - .build()) + .popVlan() + .writeMetadata(EDGE_PORT, 0xffffffffffffffffL) + .build()) .permit() .add(); ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); @@ -369,7 +375,7 @@ public void testIsPortUpdate() throws FabricPipelinerException { .withPriority(PRIORITY) .fromApp(APP_ID) .withMeta(DefaultTrafficTreatment.builder() - .writeMetadata(2, 0xffffffffffffffffL) + .writeMetadata(10, 0xffffffffffffffffL) .build()) .permit() .add(); @@ -392,7 +398,7 @@ public void testIsPortUpdate() throws FabricPipelinerException { .withMeta(DefaultTrafficTreatment.builder() .pushVlan() .setVlanId(VLAN_200) - .writeMetadata(2, 0xffffffffffffffffL) + .writeMetadata(10, 0xffffffffffffffffL) .build()) .permit() .add(); @@ -418,7 +424,10 @@ public void testNoMorePorts() throws FabricPipelinerException { .addCondition(Criteria.matchVlanId(VLAN_100)) .withPriority(PRIORITY) .fromApp(APP_ID) - .withMeta(DefaultTrafficTreatment.builder().wipeDeferred().build()) + .withMeta(DefaultTrafficTreatment.builder() + .writeMetadata(EDGE_PORT, 0xffffffffffffffffL) + .wipeDeferred() + .build()) .permit() .add(); ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); @@ -464,6 +473,9 @@ public void testIsInfraPort() throws FabricPipelinerException { .addCondition(Criteria.matchEthDst(ROUTER_MAC)) .addCondition(Criteria.matchVlanId(VlanId.vlanId((short) DEFAULT_PW_TRANSPORT_VLAN))) .withPriority(PRIORITY) + .withMeta(DefaultTrafficTreatment.builder() + .writeMetadata(INFRA_PORT, 0xffffffffffffffffL) + .build()) .fromApp(APP_ID) .permit() .add(); @@ -505,6 +517,7 @@ public void testIsInfraPort() throws FabricPipelinerException { .withMeta(DefaultTrafficTreatment.builder() .pushVlan() .setVlanId(VlanId.vlanId((short) DEFAULT_VLAN)) + .writeMetadata(INFRA_PORT, 0xffffffffffffffffL) .build()) .permit() .add(); @@ -536,6 +549,74 @@ public void testIsInfraPort() throws FabricPipelinerException { assertEquals(expectedTranslation, actualTranslation); } + /** + * Test is pair port scenarios for filtering objective. + */ + @Test + public void testIsPairPort() throws FabricPipelinerException { + // Only pair port flag + FilteringObjective filteringObjective = DefaultFilteringObjective.builder() + .withKey(Criteria.matchInPort(PORT_1)) + .addCondition(Criteria.matchEthDst(ROUTER_MAC)) + .addCondition(Criteria.matchVlanId(VLAN_100)) + .withPriority(PRIORITY) + .withMeta(DefaultTrafficTreatment.builder() + .writeMetadata(PAIR_PORT, 0xffffffffffffffffL) + .build()) + .fromApp(APP_ID) + .permit() + .add(); + ObjectiveTranslation actualTranslation = translator.translate(filteringObjective); + + Collection expectedFlowRules = Lists.newArrayList(); + expectedFlowRules.add(buildExpectedVlanInPortRule( + PORT_1, VLAN_100, null, VlanId.NONE, + PORT_TYPE_INFRA, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)); + expectedFlowRules.addAll(buildExpectedFwdClassifierRule( + PORT_1, + ROUTER_MAC, + null, + Ethernet.TYPE_IPV4, + FWD_IPV4_ROUTING)); + expectedFlowRules.addAll(buildExpectedFwdClassifierRule( + PORT_1, + ROUTER_MAC, + null, + Ethernet.TYPE_IPV6, + FWD_IPV6_ROUTING)); + expectedFlowRules.addAll(buildExpectedFwdClassifierRule( + PORT_1, + ROUTER_MAC, + null, + Ethernet.MPLS_UNICAST, + FWD_MPLS)); + + ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules); + assertEquals(expectedTranslation, actualTranslation); + + // Pair port and config update flags + filteringObjective = DefaultFilteringObjective.builder() + .withKey(Criteria.matchInPort(PORT_1)) + .addCondition(Criteria.matchEthDst(ROUTER_MAC)) + .addCondition(Criteria.matchVlanId(VLAN_100)) + .withPriority(PRIORITY) + .fromApp(APP_ID) + .withMeta(DefaultTrafficTreatment.builder() + .writeMetadata(6, 0xffffffffffffffffL) + .build()) + .permit() + .add(); + + actualTranslation = translator.translate(filteringObjective); + expectedFlowRules = Lists.newArrayList(); + // Ingress port vlan rule + expectedFlowRules.add(buildExpectedVlanInPortRule( + PORT_1, VLAN_100, null, VlanId.NONE, PORT_TYPE_INFRA, + FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)); + expectedTranslation = buildExpectedTranslation(expectedFlowRules); + assertEquals(expectedTranslation, actualTranslation); + } + /* Utilities */ private void assertError(ObjectiveError error, ObjectiveTranslation actualTranslation) { @@ -543,10 +624,11 @@ private void assertError(ObjectiveError error, ObjectiveTranslation actualTransl assertEquals(expectedTranslation, actualTranslation); } - private FilteringObjective buildFilteringObjective(MacAddress dstMac) { + private FilteringObjective buildFilteringObjective(MacAddress dstMac, long portType) { TrafficTreatment treatment = DefaultTrafficTreatment.builder() .pushVlan() .setVlanId(VLAN_100) + .writeMetadata(portType, 0xffffffffffffffffL) .build(); DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder() .permit() diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java index dfae0df4a50..94517bf62fb 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java @@ -53,6 +53,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.EDGE_PORT; +import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.INFRA_PORT; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA; import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_MASK; @@ -246,7 +248,7 @@ public void testAclNextWithPortType() { .matchIPDst(IPV4_UNICAST_ADDR) .build(); TrafficSelector metaSelector = DefaultTrafficSelector.builder() - .matchMetadata(PORT_TYPE_EDGE) + .matchMetadata(EDGE_PORT) .build(); ForwardingObjective fwd = DefaultForwardingObjective.builder() .withSelector(selector) @@ -291,7 +293,7 @@ public void testAclNextWithPortType() { assertTrue(expectedFlowRule.exactMatch(actualFlowRule)); metaSelector = DefaultTrafficSelector.builder() - .matchMetadata(PORT_TYPE_INFRA) + .matchMetadata(INFRA_PORT) .build(); fwd = DefaultForwardingObjective.builder() .withSelector(selector) From 36b9a89acc53454223fa4bef8dbdaa028cf4b730 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 27 Aug 2021 15:25:02 +0200 Subject: [PATCH 119/235] [SDFAB-500][SDFAB-527] Meters cleanup and leftovers - Improve ONOS cli enabling CRUD of p4rt trtcm - Improve ONOS rest enabling CRUD of p4rt trtcm - Improve MeterService with scope defined reads and integrate in cli/rest - Add support along the stack for BYTE_PER_SEC unit - Add support along the stack for COMMITTED and PEAK bands - Fix several bugs in ONOS cli/rest interfaces - Improve REST codecs - Fix NPE in MeterDriverProvider - Improve PiMeterTransalation by enforcing trtcm config - Implement explicit translation of the bands - Fix ONOS reconciliation by removing from the mirror the wrong configs - Remove unnecessary checks in MeterEntryCodec - Update unit tests It will follow a 2nd patch to complete SDFAB-527 Change-Id: I855235b17f60cb1d39f5b9a042c1015105a8a269 --- .../impl/VirtualNetworkMeterManager.java | 7 + .../onosproject/cli/net/MeterAddCommand.java | 146 +++++++++++++---- .../cli/net/MeterRemoveCommand.java | 40 +++-- .../cli/net/MetersListCommand.java | 63 +++++-- .../java/org/onosproject/net/meter/Band.java | 19 +++ .../net/meter/DefaultMeterRequest.java | 9 +- .../onosproject/net/meter/MeterService.java | 9 + .../org/onosproject/net/meter/MeterStore.java | 11 ++ .../net/pi/runtime/PiMeterBand.java | 20 ++- .../net/pi/runtime/PiMeterBandType.java | 51 ++++++ .../net/pi/runtime/PiMeterCellConfig.java | 70 ++++++-- .../net/meter/MeterServiceAdapter.java | 5 + .../codec/impl/MeterBandCodec.java | 15 +- .../onosproject/codec/impl/MeterCodec.java | 5 +- .../codec/impl/MeterRequestCodec.java | 66 +++++--- .../net/meter/impl/MeterDriverProvider.java | 9 +- .../net/meter/impl/MeterManager.java | 8 +- .../net/pi/impl/PiMeterTranslatorImpl.java | 56 +++++-- .../meter/impl/DistributedMeterStore.java | 20 ++- .../p4runtime/P4RuntimeMeterProgrammable.java | 76 ++++----- .../p4runtime/ctl/codec/MeterEntryCodec.java | 41 ++--- .../rest/resources/MetersWebResource.java | 154 ++++++++++++------ .../rest/resources/MetersResourceTest.java | 8 +- 23 files changed, 660 insertions(+), 248 deletions(-) create mode 100644 core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBandType.java diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java index 9d4f7e4427a..e98734ddab4 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMeterManager.java @@ -40,6 +40,7 @@ import org.onosproject.net.meter.MeterListener; import org.onosproject.net.meter.MeterOperation; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; import org.onosproject.net.meter.MeterState; import org.onosproject.net.meter.MeterStoreDelegate; @@ -50,6 +51,7 @@ import org.slf4j.Logger; import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.function.Function; @@ -179,6 +181,11 @@ public Collection getMeters(DeviceId deviceId) { .filter(m -> m.deviceId().equals(deviceId)).collect(Collectors.toList()); } + @Override + public Collection getMeters(DeviceId deviceId, MeterScope scope) { + return Collections.emptyList(); + } + @Override public Collection getAllMeters() { return store.getAllMeters(networkId()); diff --git a/cli/src/main/java/org/onosproject/cli/net/MeterAddCommand.java b/cli/src/main/java/org/onosproject/cli/net/MeterAddCommand.java index 3e71ad98f30..4ddf91de049 100644 --- a/cli/src/main/java/org/onosproject/cli/net/MeterAddCommand.java +++ b/cli/src/main/java/org/onosproject/cli/net/MeterAddCommand.java @@ -28,6 +28,7 @@ import org.onosproject.net.meter.DefaultMeterRequest; import org.onosproject.net.meter.Meter; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; import static com.google.common.base.Strings.isNullOrEmpty; @@ -45,9 +46,8 @@ public class MeterAddCommand extends AbstractShellCommand { private Meter.Unit unit; private Set bands = new HashSet<>(); - private Long rate; - private Long burstSize; - + private MeterScope scope; + private Long index; @Option(name = "-bd", aliases = "--bandDrop", description = "Assign band DROP to this meter", @@ -59,6 +59,16 @@ public class MeterAddCommand extends AbstractShellCommand { required = false, multiValued = false) private boolean hasBandRemark = false; + @Option(name = "-by", aliases = "--bandYel", + description = "Assign band MARK_YELLOW to this meter", + required = false, multiValued = false) + private boolean hasBandYel = false; + + @Option(name = "-bre", aliases = "--bandRed", + description = "Assign band MARK_RED to this meter", + required = false, multiValued = false) + private boolean hasBandRed = false; + @Option(name = "-up", aliases = "--unitPkts", description = "Assign unit Packets per Second to this meter", required = false, multiValued = false) @@ -69,18 +79,31 @@ public class MeterAddCommand extends AbstractShellCommand { required = false, multiValued = false) private boolean hasKbps = false; + @Option(name = "-ub", aliases = "--unitBytes", + description = "Assign unit Bytes per Second to this meter", + required = false, multiValued = false) + private boolean hasBytes = false; + @Option(name = "-ib", aliases = "--isBurst", description = "Set meter applicable only to burst", required = false, multiValued = false) private boolean isBurst = false; @Option(name = "-b", aliases = "--bandwidth", description = "Bandwidth", - required = false, multiValued = false) - private String bandwidthString = null; + required = false, multiValued = true) + private String[] bandwidthString = null; @Option(name = "-bs", aliases = "--burstSize", description = "Burst size", + required = false, multiValued = true) + private String[] burstSizeString = null; + + @Option(name = "-sc", aliases = "--scope", description = "Scope", required = false, multiValued = false) - private String burstSizeString = null; + private String scopeString = null; + + @Option(name = "-id", aliases = "--index", description = "Index", + required = false, multiValued = false) + private String indexString = null; @Argument(index = 0, name = "uri", description = "Device ID", required = true, multiValued = false) @@ -93,53 +116,110 @@ private void checkOptions() { // check units if (hasPkts) { unit = Meter.Unit.PKTS_PER_SEC; - } else { + } else if (hasKbps) { unit = Meter.Unit.KB_PER_SEC; + } else if (hasBytes) { + unit = Meter.Unit.BYTES_PER_SEC; } - // check rate (does not take into account if it is kbps or pkts) - if (!isNullOrEmpty(bandwidthString)) { - rate = Long.parseLong(bandwidthString); - } else { - rate = 500L; + int numBands = 0; + if (hasBandDrop) { + numBands++; + } + if (hasBandRemark) { + numBands++; + } + if (hasBandYel) { + numBands++; + } + if (hasBandRed) { + numBands++; } - // burst size - if (!isNullOrEmpty(burstSizeString)) { - burstSize = Long.parseLong(burstSizeString); - } else { - burstSize = 0L; + long[] rates = new long[numBands]; + long[] bursts = new long[numBands]; + // check rate (does not take into account if it is kbps or pkts) + if (bandwidthString != null && bandwidthString.length == numBands && + burstSizeString != null && burstSizeString.length == numBands) { + for (int i = 0; i < bandwidthString.length; i++) { + rates[i] = 500L; + bursts[i] = 0L; + if (!isNullOrEmpty(bandwidthString[i])) { + rates[i] = Long.parseLong(bandwidthString[i]); + } + if (!isNullOrEmpty(burstSizeString[i])) { + bursts[i] = Long.parseLong(burstSizeString[i]); + } + } + } else if (bandwidthString != null && bandwidthString.length < numBands && + burstSizeString != null && burstSizeString.length < numBands) { + for (int i = 0; i < numBands; i++) { + rates[i] = 500L; + bursts[i] = 0L; + if (i < bandwidthString.length && !isNullOrEmpty(bandwidthString[i])) { + rates[i] = Long.parseLong(bandwidthString[i]); + } + if (i < burstSizeString.length && !isNullOrEmpty(burstSizeString[i])) { + bursts[i] = Long.parseLong(burstSizeString[i]); + } + } } // Create bands + int i = 0; if (hasBandDrop) { Band band = DefaultBand.builder() .ofType(Band.Type.DROP) - .withRate(rate) - .burstSize(burstSize) + .withRate(rates[i]) + .burstSize(bursts[i]) .build(); bands.add(band); + i++; } if (hasBandRemark) { Band band = DefaultBand.builder() .ofType(Band.Type.REMARK) - .withRate(rate) - .burstSize(burstSize) + .withRate(rates[i]) + .burstSize(bursts[i]) .build(); bands.add(band); + i++; } + if (hasBandYel) { + Band band = DefaultBand.builder() + .ofType(Band.Type.MARK_YELLOW) + .withRate(rates[i]) + .burstSize(bursts[i]) + .build(); + bands.add(band); + i++; + } + if (hasBandRed) { + Band band = DefaultBand.builder() + .ofType(Band.Type.MARK_RED) + .withRate(rates[i]) + .burstSize(bursts[i]) + .build(); + bands.add(band); + } + // default band is drop if (bands.size() == 0) { Band band = DefaultBand.builder() .ofType(Band.Type.DROP) - .withRate(rate) - .burstSize(burstSize) + .withRate(500L) + .burstSize(0L) .build(); bands.add(band); } + if (!isNullOrEmpty(scopeString)) { + scope = MeterScope.of(scopeString); + } - + if (!isNullOrEmpty(indexString) && scope != null) { + index = Long.parseLong(indexString); + } } @Override @@ -151,22 +231,32 @@ protected void doExecute() { checkOptions(); - MeterRequest.Builder builder = DefaultMeterRequest.builder() .forDevice(deviceId) .fromApp(coreService.registerApplication(appId)) .withUnit(unit) .withBands(bands); - if (isBurst) { builder = builder.burst(); } + // Scope is by default global but we can still provide the index + // otherwise we can specify both scope and index or let the meter + // service allocate the meter for us. User defined index requires + // the user defined mode being active. + if (scope != null) { + builder = builder.withScope(scope); + } + + if (index != null) { + builder = builder.withIndex(index); + } + MeterRequest request = builder.add(); Meter m = service.submit(request); - log.info("Requested meter with id {}: {}", m.id().toString(), m.toString()); - print("Requested meter with id %s: %s", m.id().toString(), m.toString()); + log.info("Requested meter with cellId {}: {}", m.meterCellId().toString(), m.toString()); + print("Requested meter with cellId %s: %s", m.meterCellId().toString(), m.toString()); } } diff --git a/cli/src/main/java/org/onosproject/cli/net/MeterRemoveCommand.java b/cli/src/main/java/org/onosproject/cli/net/MeterRemoveCommand.java index 6c3f1bb597a..941c910dcb2 100644 --- a/cli/src/main/java/org/onosproject/cli/net/MeterRemoveCommand.java +++ b/cli/src/main/java/org/onosproject/cli/net/MeterRemoveCommand.java @@ -18,19 +18,21 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; +import org.apache.karaf.shell.api.action.Option; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.onosproject.cli.AbstractShellCommand; import org.onosproject.core.CoreService; import org.onosproject.net.DeviceId; -import org.onosproject.net.meter.Band; -import org.onosproject.net.meter.DefaultBand; import org.onosproject.net.meter.DefaultMeterRequest; -import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; -import java.util.Collections; +import static com.google.common.base.Strings.isNullOrEmpty; /** * Remove existing meter from device. @@ -45,9 +47,13 @@ public class MeterRemoveCommand extends AbstractShellCommand { @Completion(DeviceIdCompleter.class) private String uri = null; - @Argument(index = 1, name = "meterId", description = "Meter ID hexadecimal value", + @Argument(index = 1, name = "index", description = "Index", required = true, multiValued = false) - private String meterIdstr = null; + private String indexString = null; + + @Option(name = "-sc", aliases = "--scope", description = "Scope", + required = false, multiValued = false) + private String scopeString = null; private final String appId = "org.onosproject.cli.meterCmd"; @@ -57,19 +63,27 @@ protected void doExecute() { CoreService coreService = get(CoreService.class); DeviceId deviceId = DeviceId.deviceId(uri); - MeterId meterId = MeterId.meterId(Long.parseLong(meterIdstr, 16)); - Band b = new DefaultBand(Band.Type.DROP, 0L, 0L, (short) 0); + MeterScope scope = MeterScope.globalScope(); + if (!isNullOrEmpty(scopeString)) { + scope = MeterScope.of(scopeString); + } + + MeterCellId meterCellId; + long index = Long.parseLong(indexString); + if (scope.equals(MeterScope.globalScope())) { + meterCellId = MeterId.meterId(index); + } else { + meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of(scope.id()), index); + } MeterRequest.Builder builder = DefaultMeterRequest.builder() .forDevice(deviceId) - .withBands(Collections.singleton(b)) - .withUnit(Meter.Unit.PKTS_PER_SEC) .fromApp(coreService.registerApplication(appId)); MeterRequest meterRequest = builder.remove(); - service.withdraw(meterRequest, meterId); - log.info("Requested meter removal: {}", meterRequest.toString()); + service.withdraw(builder.remove(), meterCellId); - print("Requested meter removal: %s", meterRequest.toString()); + log.info("Requested meter {} removal: {}", meterCellId.toString(), meterRequest.toString()); + print("Requested meter %s removal: %s", meterCellId.toString(), meterRequest.toString()); } } diff --git a/cli/src/main/java/org/onosproject/cli/net/MetersListCommand.java b/cli/src/main/java/org/onosproject/cli/net/MetersListCommand.java index 4fe3590815b..c5e7fbf9833 100644 --- a/cli/src/main/java/org/onosproject/cli/net/MetersListCommand.java +++ b/cli/src/main/java/org/onosproject/cli/net/MetersListCommand.java @@ -15,16 +15,20 @@ */ package org.onosproject.cli.net; -import com.google.common.collect.Collections2; import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; +import org.apache.karaf.shell.api.action.Option; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.onosproject.cli.AbstractShellCommand; import org.onosproject.net.DeviceId; import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterId; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; import java.util.Collection; @@ -43,35 +47,60 @@ public class MetersListCommand extends AbstractShellCommand { @Completion(DeviceIdCompleter.class) String uri = null; - @Argument(index = 1, name = "meter", description = "Meter ID", + @Argument(index = 1, name = "index", description = "Index", required = false, multiValued = false) - String meterstr = null; + private String indexString = null; - MeterId meterId = null; + @Option(name = "-sc", aliases = "--scope", description = "Scope", + required = false, multiValued = false) + private String scopeString = null; + + MeterScope meterScope; + Long index; + MeterCellId meterCellId; @Override protected void doExecute() { - if (!isNullOrEmpty(meterstr)) { - meterId = MeterId.meterId(Long.parseLong(meterstr)); + if (!isNullOrEmpty(scopeString)) { + meterScope = MeterScope.of(scopeString); } - MeterService service = get(MeterService.class); + if (!isNullOrEmpty(indexString)) { + index = Long.parseLong(indexString); + if (meterScope == null) { + meterScope = MeterScope.globalScope(); + } + } - if (meterId != null && uri != null) { - Meter m = service.getMeter(DeviceId.deviceId(uri), meterId); - if (m != null) { - print("%s", m); - } else { - error("Meter %s not found for device %s", meterId, uri); + if (index != null) { + if (meterScope != null && meterScope.equals(MeterScope.globalScope())) { + meterCellId = MeterId.meterId(index); + } else if (meterScope != null) { + meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of(meterScope.id()), index); } + } + + MeterService service = get(MeterService.class); + + Collection meters; + if (isNullOrEmpty(uri)) { + meters = service.getAllMeters(); + printMeters(meters); } else { - Collection meters = service.getAllMeters(); - if (uri == null) { + if (meterCellId != null) { + Meter m = service.getMeter(DeviceId.deviceId(uri), meterCellId); + if (m != null) { + print("%s", m); + } else { + error("Meter %s not found for device %s", meterCellId, uri); + } + } else if (meterScope != null) { + meters = service.getMeters(DeviceId.deviceId(uri), meterScope); printMeters(meters); } else { - printMeters(Collections2.filter(meters, - m -> m.deviceId().equals(DeviceId.deviceId(uri)))); + meters = service.getMeters(DeviceId.deviceId(uri)); + printMeters(meters); } } } diff --git a/core/api/src/main/java/org/onosproject/net/meter/Band.java b/core/api/src/main/java/org/onosproject/net/meter/Band.java index 9f9479c987f..befbeadf0f4 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/Band.java +++ b/core/api/src/main/java/org/onosproject/net/meter/Band.java @@ -51,8 +51,27 @@ enum Type { * Defines a meter band with no action, used to mark * packets internally in the pipeline, i.e. without * modifying the packet headers. + * + * @deprecated in onos-2.5, replace by MARK_YELLOW and MARK_RED */ + @Deprecated NONE, + + /** + * Defines a meter band for the configuration of the committed + * rate AND the committed burst size. Used in conjunction with MARK_RED + * to implement a srTCM or trTCM, see RFCs 2697 and 2698 respectively. + */ + MARK_YELLOW, + + /** + * Defines a meter band for the configuration of the peak rate + * AND the peak burst size OR the excess burst size. When used to + * configure a srTCM excess rate must be 0. Used in conjunction with + * MARK_YELLOW to implement a srTCM or trTCM, see RFCs 2697 and 2698 + * respectively. + */ + MARK_RED, } /** diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java index 0dbd4f7a608..617151d6a74 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java @@ -33,8 +33,6 @@ */ public final class DefaultMeterRequest extends AbstractAnnotated implements MeterRequest { - - private final ApplicationId appId; private final Meter.Unit unit; private final boolean burst; @@ -122,6 +120,8 @@ public String toString() { } public static final class Builder implements MeterRequest.Builder { + // Relevant only for delete + private static final Band DUMMY_BAND = new DefaultBand(Band.Type.DROP, 0L, 0L, (short) 0); private ApplicationId appId; private Meter.Unit unit = Meter.Unit.KB_PER_SEC; @@ -196,6 +196,11 @@ public MeterRequest add() { @Override public MeterRequest remove() { + // Allow to create the removal request without specifying bands + if (bands == null || bands.isEmpty()) { + bands = ImmutableSet.of(DUMMY_BAND); + } + validate(); return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, context, Type.REMOVE, scope, desiredIndex, annotations); diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java index 5b3ca3bd9d8..2d37f87b8b6 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java @@ -90,6 +90,15 @@ public interface MeterService */ Collection getMeters(DeviceId deviceId); + /** + * Fetches the meters by the device id and scope. + * + * @param deviceId a device id + * @param scope meters scope + * @return a collection of meters + */ + Collection getMeters(DeviceId deviceId, MeterScope scope); + /** * Allocates a new meter id in the system. * diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 7f4de4b7273..4abf2332ada 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -117,6 +117,17 @@ public interface MeterStore extends Store { */ Collection getAllMeters(DeviceId deviceId); + /** + * Returns all meters stored in the store for a + * precise device and scope. + * + * @param deviceId a device id + * @param scope meters scope + * @return an immutable copy of the meters stored for a given device + * withing a given scope + */ + Collection getAllMeters(DeviceId deviceId, MeterScope scope); + /** * Update the store by deleting the failed meter. * Notifies the delegate that the meter failed to allow it diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBand.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBand.java index b1dbcf5cc18..ea8c34d8ed1 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBand.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBand.java @@ -27,20 +27,32 @@ */ @Beta public final class PiMeterBand { + private final PiMeterBandType type; private final long rate; private final long burst; /** * Creates a band with rate and burst. * + * @param type type of this band * @param rate rate of this band * @param burst burst of this band */ - public PiMeterBand(long rate, long burst) { + public PiMeterBand(PiMeterBandType type, long rate, long burst) { + this.type = type; this.rate = rate; this.burst = burst; } + /** + * Returns the type of this band. + * + * @return type of this band + */ + public PiMeterBandType type() { + return type; + } + /** * Returns the rate of this band. * @@ -61,7 +73,7 @@ public long burst() { @Override public int hashCode() { - return Objects.hash(rate, burst); + return Objects.hash(type, rate, burst); } @Override @@ -71,7 +83,8 @@ public boolean equals(Object obj) { } if (obj instanceof PiMeterBand) { PiMeterBand that = (PiMeterBand) obj; - return Objects.equals(rate, that.rate) && + return Objects.equals(type, that.type) && + Objects.equals(rate, that.rate) && Objects.equals(burst, that.burst); } @@ -80,6 +93,7 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this) + .add("type", type) .add("rate", rate) .add("burst", burst).toString(); } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBandType.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBandType.java new file mode 100644 index 00000000000..ee15a576dc2 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterBandType.java @@ -0,0 +1,51 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.pi.runtime; + +import com.google.common.annotations.Beta; + +/** + * Type of meter band of a protocol-independent pipeline. + */ +@Beta +public enum PiMeterBandType { + /** + * Committed band config. + */ + COMMITTED("committed"), + + /** + * Peak band config. + */ + PEAK("peak"); + + private final String humanReadableName; + + PiMeterBandType(String humanReadableName) { + this.humanReadableName = humanReadableName; + } + + /** + * Returns a human readable representation of this PI meter band type (useful + * for logging). + * + * @return string + */ + public String humanReadableName() { + return humanReadableName; + } +} diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java index d3da3407fa7..ecbfe079e9b 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterCellConfig.java @@ -19,13 +19,12 @@ import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; import org.onosproject.net.DeviceId; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; -import java.util.List; +import java.util.Map; import static com.google.common.base.Preconditions.checkNotNull; @@ -36,7 +35,7 @@ public final class PiMeterCellConfig implements PiEntity { private final PiMeterCellId cellId; - private final ImmutableList piMeterBands; + private final ImmutableMap piMeterBands; /** * Creates a new meter cell configuration for the given cell identifier and meter bands. @@ -44,9 +43,9 @@ public final class PiMeterCellConfig implements PiEntity { * @param cellId meter cell identifier * @param piMeterBands meter bands */ - private PiMeterCellConfig(PiMeterCellId cellId, Collection piMeterBands) { + private PiMeterCellConfig(PiMeterCellId cellId, Map piMeterBands) { this.cellId = cellId; - this.piMeterBands = ImmutableList.copyOf(piMeterBands); + this.piMeterBands = ImmutableMap.copyOf(piMeterBands); } /** @@ -59,11 +58,11 @@ public PiMeterCellId cellId() { } /** - * Returns the collection of bands of this cell. + * Returns the map of bands of this cell. * * @return meter bands */ - public Collection meterBands() { + public Map meterBands() { return piMeterBands; } @@ -87,6 +86,24 @@ public boolean isDefaultConfig() { return piMeterBands.isEmpty(); } + /** + * Returns the committed configuration if present. + * + * @return the committed band. Null otherwise + */ + public PiMeterBand committedBand() { + return piMeterBands.get(PiMeterBandType.COMMITTED); + } + + /** + * Returns the peak configuration if present. + * + * @return the peak band. Null otherwise + */ + public PiMeterBand peakBand() { + return piMeterBands.get(PiMeterBandType.PEAK); + } + /** * Returns a PiMeterCellConfig with no bands. * Used to reset a PI meter cell. @@ -95,7 +112,7 @@ public boolean isDefaultConfig() { * @return a PiMeterCellConfig with no bands */ public static PiMeterCellConfig reset(PiMeterCellId piMeterCellId) { - return new PiMeterCellConfig(piMeterCellId, Collections.emptyList()); + return new PiMeterCellConfig(piMeterCellId, Collections.emptyMap()); } @Override @@ -118,8 +135,7 @@ public boolean equals(Object o) { } PiMeterCellConfig that = (PiMeterCellConfig) o; - return piMeterBands.containsAll((that.piMeterBands)) && - piMeterBands.size() == that.piMeterBands.size() && + return Objects.equal(piMeterBands, that.piMeterBands) && Objects.equal(cellId, that.cellId); } @@ -146,8 +162,8 @@ public static PiMeterCellConfig.Builder builder() { } public static final class Builder { - private PiMeterCellId cellId; - private List bands = new ArrayList<>(); + private PiMeterCellId cellId; + private Map bands = Maps.newHashMap(); private Builder() { @@ -173,7 +189,31 @@ public PiMeterCellConfig.Builder withMeterCellId(PiMeterCellId meterCellId) { * @return this */ public PiMeterCellConfig.Builder withMeterBand(PiMeterBand band) { - this.bands.add(band); + this.bands.put(band.type(), band); + return this; + } + + /** + * Sets the committed band of this meter. + * + * @param rate committed rate + * @param burst committed burst + * @return this + */ + public PiMeterCellConfig.Builder withCommittedBand(long rate, long burst) { + this.bands.put(PiMeterBandType.COMMITTED, new PiMeterBand(PiMeterBandType.COMMITTED, rate, burst)); + return this; + } + + /** + * Sets the peak band of this meter. + * + * @param rate peak rate + * @param burst peak burst + * @return this + */ + public PiMeterCellConfig.Builder withPeakBand(long rate, long burst) { + this.bands.put(PiMeterBandType.PEAK, new PiMeterBand(PiMeterBandType.PEAK, rate, burst)); return this; } diff --git a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java index 2a298b44f5c..86795e91b81 100644 --- a/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/meter/MeterServiceAdapter.java @@ -60,6 +60,11 @@ public Collection getMeters(DeviceId deviceId) { return null; } + @Override + public Collection getMeters(DeviceId deviceId, MeterScope scope) { + return null; + } + @Override public MeterId allocateMeterId(DeviceId deviceId) { return null; diff --git a/core/common/src/main/java/org/onosproject/codec/impl/MeterBandCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/MeterBandCodec.java index 4621e9467b2..3cb68a08b1b 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/MeterBandCodec.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/MeterBandCodec.java @@ -21,17 +21,14 @@ import org.onosproject.net.meter.Band; import org.onosproject.net.meter.Band.Builder; import org.onosproject.net.meter.DefaultBand; -import org.slf4j.Logger; import static com.google.common.base.Preconditions.checkNotNull; import static org.onlab.util.Tools.nullIsIllegal; -import static org.slf4j.LoggerFactory.getLogger; /** * Meter band JSON codec. */ public final class MeterBandCodec extends JsonCodec { - private final Logger log = getLogger(getClass()); // JSON field names private static final String TYPE = "type"; @@ -93,6 +90,18 @@ public Band decode(ObjectNode json, CodecContext context) { builder.ofType(type); builder.dropPrecedence(precedence); break; + case "NONE": + type = Band.Type.NONE; + builder.ofType(type); + break; + case "MARK_YELLOW": + type = Band.Type.MARK_YELLOW; + builder.ofType(type); + break; + case "MARK_RED": + type = Band.Type.MARK_RED; + builder.ofType(type); + break; default: nullIsIllegal(type, "The requested type " + typeStr + " is not defined for band."); } diff --git a/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java index 5cf1d135a9f..26b66778179 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/MeterCodec.java @@ -21,17 +21,14 @@ import org.onosproject.codec.JsonCodec; import org.onosproject.net.meter.Band; import org.onosproject.net.meter.Meter; -import org.slf4j.Logger; import static com.google.common.base.Preconditions.checkNotNull; -import static org.slf4j.LoggerFactory.getLogger; /** * Meter JSON codec. */ public final class MeterCodec extends JsonCodec { - private final Logger log = getLogger(getClass()); // JSON field names private static final String ID = "id"; @@ -51,7 +48,7 @@ public final class MeterCodec extends JsonCodec { public ObjectNode encode(Meter meter, CodecContext context) { checkNotNull(meter, "Meter cannot be null"); ObjectNode result = context.mapper().createObjectNode() - .put(ID, meter.id().toString()) + .put(ID, meter.meterCellId().toString()) .put(LIFE, meter.life()) .put(PACKETS, meter.packetsSeen()) .put(BYTES, meter.bytesSeen()) diff --git a/core/common/src/main/java/org/onosproject/codec/impl/MeterRequestCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/MeterRequestCodec.java index d2544289a6d..d46e2579c0e 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/MeterRequestCodec.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/MeterRequestCodec.java @@ -26,29 +26,32 @@ import org.onosproject.net.meter.DefaultMeterRequest; import org.onosproject.net.meter.Meter; import org.onosproject.net.meter.MeterRequest; -import org.slf4j.Logger; +import org.onosproject.net.meter.MeterScope; import java.util.ArrayList; import java.util.List; import java.util.stream.IntStream; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Strings.isNullOrEmpty; import static org.onlab.util.Tools.nullIsIllegal; -import static org.slf4j.LoggerFactory.getLogger; /** * MeterRequest JSON codec. */ public final class MeterRequestCodec extends JsonCodec { - private final Logger log = getLogger(getClass()); // JSON field names private static final String DEVICE_ID = "deviceId"; private static final String UNIT = "unit"; private static final String BANDS = "bands"; - public static final String REST_APP_ID = "org.onosproject.rest"; + private static final String SCOPE = "scope"; + private static final String INDEX = "index"; + private static final String REST_APP_ID = "org.onosproject.rest"; private static final String MISSING_MEMBER_MESSAGE = " member is required in MeterRequest"; + private ApplicationId applicationId; + @Override public MeterRequest decode(ObjectNode json, CodecContext context) { if (json == null || !json.isObject()) { @@ -56,14 +59,17 @@ public MeterRequest decode(ObjectNode json, CodecContext context) { } final JsonCodec meterBandCodec = context.codec(Band.class); - CoreService coreService = context.getService(CoreService.class); + // parse device id DeviceId deviceId = DeviceId.deviceId(nullIsIllegal(json.get(DEVICE_ID), DEVICE_ID + MISSING_MEMBER_MESSAGE).asText()); // application id - ApplicationId appId = coreService.registerApplication(REST_APP_ID); + if (applicationId == null) { + CoreService coreService = context.getService(CoreService.class); + applicationId = coreService.registerApplication(REST_APP_ID); + } // parse burst boolean burst = false; @@ -83,6 +89,9 @@ public MeterRequest decode(ObjectNode json, CodecContext context) { case "PKTS_PER_SEC": meterUnit = Meter.Unit.PKTS_PER_SEC; break; + case "BYTES_PER_SEC": + meterUnit = Meter.Unit.BYTES_PER_SEC; + break; default: nullIsIllegal(meterUnit, "The requested unit " + unit + " is not defined for meter."); } @@ -98,22 +107,39 @@ public MeterRequest decode(ObjectNode json, CodecContext context) { }); } - MeterRequest meterRequest; + // parse scope and index + JsonNode scopeJson = json.get(SCOPE); + MeterScope scope = null; + if (scopeJson != null && !isNullOrEmpty(scopeJson.asText())) { + scope = MeterScope.of(scopeJson.asText()); + } + + JsonNode indexJson = json.get(INDEX); + Long index = null; + if (indexJson != null && !isNullOrEmpty(indexJson.asText()) && scope != null) { + index = indexJson.asLong(); + } + + // build the final request + MeterRequest.Builder meterRequest = DefaultMeterRequest.builder(); + if (scope != null) { + meterRequest.withScope(scope); + } + + if (index != null) { + meterRequest.withIndex(index); + } + + meterRequest.fromApp(applicationId) + .forDevice(deviceId) + .withUnit(meterUnit) + .withBands(bandList); + if (burst) { - meterRequest = DefaultMeterRequest.builder() - .fromApp(appId) - .forDevice(deviceId) - .withUnit(meterUnit) - .withBands(bandList) - .burst().add(); - } else { - meterRequest = DefaultMeterRequest.builder() - .fromApp(appId) - .forDevice(deviceId) - .withUnit(meterUnit) - .withBands(bandList).add(); + meterRequest.burst(); } - return meterRequest; + return meterRequest.add(); } + } diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java index cf7d1985267..b1422e8d1b2 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java @@ -152,7 +152,9 @@ private void pollDeviceMeters(DeviceId deviceId) { private void getMeterFeatures(DeviceId deviceId) { Collection meterFeatures = Collections.emptySet(); try { - meterFeatures = getMeterProgrammable(deviceId).getMeterFeatures().get(pollFrequency, TimeUnit.SECONDS); + if (isMeterProgrammable(deviceId)) { + meterFeatures = getMeterProgrammable(deviceId).getMeterFeatures().get(pollFrequency, TimeUnit.SECONDS); + } } catch (Exception e) { log.warn("Unable to get the Meter Features from {}, error: {}", deviceId, e.getMessage()); log.debug("Exception: ", e); @@ -160,6 +162,11 @@ private void getMeterFeatures(DeviceId deviceId) { meterProviderService.pushMeterFeatures(deviceId, meterFeatures); } + private boolean isMeterProgrammable(DeviceId deviceId) { + Device device = deviceService.getDevice(deviceId); + return device.is(MeterProgrammable.class); + } + private MeterProgrammable getMeterProgrammable(DeviceId deviceId) { Device device = deviceService.getDevice(deviceId); if (device.is(MeterProgrammable.class)) { diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java index b2e6730fb28..98e79a9d89a 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java @@ -343,8 +343,12 @@ public Meter getMeter(DeviceId deviceId, MeterCellId id) { @Override public Collection getMeters(DeviceId deviceId) { - return store.getAllMeters().stream().filter(m -> - m.deviceId().equals(deviceId)).collect(Collectors.toList()); + return store.getAllMeters(deviceId); + } + + @Override + public Collection getMeters(DeviceId deviceId, MeterScope scope) { + return store.getAllMeters(deviceId, scope); } @Override diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java index 3831699efb9..48cd4baecea 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java @@ -20,7 +20,6 @@ import org.onosproject.net.meter.Band; import org.onosproject.net.meter.Meter; import org.onosproject.net.pi.model.PiPipeconf; -import org.onosproject.net.pi.runtime.PiMeterBand; import org.onosproject.net.pi.runtime.PiMeterCellConfig; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.service.PiTranslationException; @@ -36,7 +35,7 @@ private PiMeterTranslatorImpl() { // Hides constructor. } - private static final int TRTCM_RATES = 2; + private static final int TCM_BANDS = 2; /** * Returns a PI meter config equivalent to the given meter, for the given pipeconf and device. @@ -53,23 +52,52 @@ static PiMeterCellConfig translate(Meter meter, PiPipeconf pipeconf, Device devi throw new PiTranslationException("PI meter cell type must be PIPELINE_INDEPENDENT!"); } - // FIXME: we might want to move this check to P4Runtime driver or protocol layer. - // In general, This check is more of P4Runtime limitation, we should do this check in the low level layer. - if (meter.bands().size() > TRTCM_RATES) { - throw new PiTranslationException("PI meter can not have more than 2 bands!"); + // In general, this check is more of P4Runtime limitation, we should do this check in the low level layer. + // At the same time we could extend to support other configurations (for example srTCM). + // TODO implement SRTCM and TRTCM helper classes to improve readability of the code. + // Or in future when we support other markers we can simply create two different methods. + if (meter.bands().size() != TCM_BANDS) { + throw new PiTranslationException("PI meter must have 2 bands in order to implement TCM metering!"); } + final Band[] bands = meter.bands().toArray(new Band[0]); + // Validate proper config of the TCM settings. + if ((bands[0].type() != Band.Type.MARK_YELLOW && bands[0].type() != Band.Type.MARK_RED) || + (bands[1].type() != Band.Type.MARK_YELLOW && bands[1].type() != Band.Type.MARK_RED) || + (bands[0].type() == bands[1].type())) { + throw new PiTranslationException("PI TCM meter must have a MARK_YELLOW band and a MARK_RED band!"); + } + + // Validate proper config of the trTCM settings + if (bands[0].burst() <= 0 || bands[1].burst() <= 0) { + throw new PiTranslationException("PI trTCM meter can not have band with burst <= 0!"); + } + if (bands[0].rate() <= 0 || bands[1].rate() <= 0) { + throw new PiTranslationException("PI trTCM meter can not have band with rate <= 0!"); + } - PiMeterCellConfig.Builder builder = PiMeterCellConfig.builder(); - for (Band band : meter.bands()) { - if (band.type() != Band.Type.NONE) { - throw new PiTranslationException("PI meter can not have band with other types except NONE!"); - } + long cir, cburst, pir, pburst; + if (bands[0].type() == Band.Type.MARK_YELLOW) { + cir = bands[0].rate(); + cburst = bands[0].burst(); + pir = bands[1].rate(); + pburst = bands[1].burst(); + } else { + pir = bands[0].rate(); + pburst = bands[0].burst(); + cir = bands[1].rate(); + cburst = bands[1].burst(); + } - PiMeterBand piMeterBand = new PiMeterBand(band.rate(), band.burst()); - builder.withMeterBand(piMeterBand); + if (cir > pir) { + throw new PiTranslationException("PI trTCM meter must have a pir >= cir!"); } - return builder.withMeterCellId((PiMeterCellId) meter.meterCellId()).build(); + return PiMeterCellConfig.builder() + .withCommittedBand(cir, cburst) + .withPeakBand(pir, pburst) + .withMeterCellId((PiMeterCellId) meter.meterCellId()) + .build(); } + } diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index afc6d9475f2..7d8c7a5ac05 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -364,6 +364,21 @@ public Collection getAllMeters(DeviceId deviceId) { MeterData::meter); } + @Override + public Collection getAllMeters(DeviceId deviceId, MeterScope scope) { + if (scope.equals(MeterScope.globalScope())) { + return Collections2.transform( + Collections2.filter(ImmutableSet.copyOf(metersMap.values()), + (MeterData m) -> m.meter().meterCellId().type() == INDEX), + MeterData::meter); + } + return Collections2.transform( + Collections2.filter(ImmutableSet.copyOf(metersMap.values()), + (MeterData m) -> m.meter().meterCellId().type() == PIPELINE_INDEPENDENT && + ((PiMeterCellId) m.meter().meterCellId()).meterId().id().equals(scope.id())), + MeterData::meter); + } + @Override public void failedMeter(MeterOperation op, MeterFailReason reason) { // Meter ops failed (got notification from the sb) @@ -701,8 +716,9 @@ public void event(MapEvent event) { return null; }); notifyDelegate(new MeterEvent(MeterEvent.Type.METER_ADDED, data.meter())); - // Update stats case - } else if (data.meter().referenceCount() == 0) { + // Update stats case - we report reference count zero only for INDEX based meters + } else if (data.meter().referenceCount() == 0 && + data.meter().meterCellId().type() == INDEX) { notifyDelegate(new MeterEvent(MeterEvent.Type.METER_REFERENCE_COUNT_ZERO, data.meter())); } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index a7dbadde549..9a04a3573b3 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -23,7 +23,6 @@ import org.onosproject.drivers.p4runtime.mirror.TimedEntry; import org.onosproject.net.DeviceId; import org.onosproject.net.meter.Band; -import org.onosproject.net.meter.DefaultBand; import org.onosproject.net.meter.DefaultMeter; import org.onosproject.net.meter.DefaultMeterFeatures; import org.onosproject.net.meter.Meter; @@ -42,7 +41,6 @@ import org.onosproject.net.pi.service.PiTranslatedEntity; import org.onosproject.net.pi.service.PiTranslationException; import org.onosproject.p4runtime.api.P4RuntimeWriteClient.WriteRequest; -import org.onosproject.p4runtime.api.P4RuntimeWriteClient.WriteResponse; import java.util.Collection; import java.util.Collections; @@ -52,12 +50,8 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; -import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.net.meter.MeterOperation.Type.ADD; -import static org.onosproject.net.meter.MeterOperation.Type.MODIFY; -import static org.onosproject.net.meter.MeterOperation.Type.REMOVE; import static org.onosproject.p4runtime.api.P4RuntimeWriteClient.UpdateType; /** @@ -178,15 +172,23 @@ public CompletableFuture> getMeters() { } } - // Reset all inconsistent meter cells to default state + // Reset all inconsistent meter cells to the default config if (!inconsistentOrDefaultCells.isEmpty()) { WriteRequest request = client.write(p4DeviceId, pipeconf); for (PiMeterCellId cellId : inconsistentOrDefaultCells) { PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, cellId); appendEntryToWriteRequestOrSkip(request, handle, PiMeterCellConfig.reset(cellId)); } - WriteResponse response = request.submitSync(); - meterMirror.applyWriteResponse(response); + + request.submit().whenComplete((response, ex) -> { + if (ex != null) { + log.error("Exception resetting inconsistent meter entries", ex); + } else { + log.debug("Successfully removed {} out of {} inconsistent meter entries", + response.success().size(), response.all().size()); + } + response.success().forEach(entity -> meterMirror.remove((PiMeterCellHandle) entity.handle())); + }); } return CompletableFuture.completedFuture(meters); @@ -219,10 +221,11 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { "one in in translation store: device={}, store=Default", deviceId, config); } else { log.debug("Configs obtained from device: {} and present in the store are default, " + - "skipping the forge section"); + "skipping the forge section", deviceId); } return null; } + // The config is not consistent if (!translatedEntity.get().translated().equals(config)) { log.warn("Meter Cell Config obtained from device {} is different from " + @@ -230,20 +233,20 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { deviceId, config, translatedEntity.get().translated()); return null; } + + // Big problems in the mirror ? This could happen in case of issues with + // the eventual consistent maps used in the AbstractDistributedP4RuntimeMirror if (timedEntry == null) { log.warn("Meter entry handle not found in device mirror: {}", handle); return null; } - // Forge a meter with MeterCellId, Bands and DeviceId + Meter original = translatedEntity.get().original(); + // Forge a meter with MeterCellId, Bands and DeviceId using the original value. // Other values are not required because we cannot retrieve them from the south DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() - .withBands(config.meterBands().stream().map(b -> DefaultBand.builder() - .withRate(b.rate()) - .burstSize(b.burst()) - .ofType(Band.Type.NONE) - .build()).collect(Collectors.toList())) - .withCellId(config.cellId()) + .withBands(original.bands()) + .withCellId(original.meterCellId()) .forDevice(deviceId) .build(); meter.setState(MeterState.ADDED); @@ -270,7 +273,7 @@ private boolean appendEntryToWriteRequestOrSkip( /** * P4 meter features builder. */ - public class P4RuntimeMeterFeaturesBuilder { + public static class P4RuntimeMeterFeaturesBuilder { private final PiMeterModel piMeterModel; private DeviceId deviceId; @@ -290,9 +293,7 @@ public P4RuntimeMeterFeaturesBuilder(PiMeterModel piMeterModel, DeviceId deviceI * @return the meter features object */ public MeterFeatures build() { - /* - * We set the basic values before to extract the other information. - */ + // We set the basic values before to extract the other information. MeterFeatures.Builder builder = DefaultMeterFeatures.builder() .forDevice(deviceId) // The scope value will be PiMeterId @@ -301,36 +302,31 @@ public MeterFeatures build() { .withMaxColors(PI_METER_MAX_COLOR) .withStartIndex(PI_METER_START_INDEX) .withEndIndex(piMeterModel.size() - 1); - /* - * Pi meter only support NONE type - */ + + // p4rt meters support MARK_YELLOW (committed config) and + // MARK_RED (peak config) band types. Set bands = Sets.newHashSet(); - bands.add(Band.Type.NONE); + bands.add(Band.Type.MARK_YELLOW); + bands.add(Band.Type.MARK_RED); builder.withBandTypes(bands); - /* - * We extract the supported units; - */ + + // We extract the supported units; Set units = Sets.newHashSet(); if (piMeterModel.unit() == PiMeterModel.Unit.BYTES) { - units.add(Meter.Unit.KB_PER_SEC); + units.add(Meter.Unit.BYTES_PER_SEC); } else if (piMeterModel.unit() == PiMeterModel.Unit.PACKETS) { units.add(Meter.Unit.PKTS_PER_SEC); } - builder.withUnits(units); - /* - * Burst is supported ? - */ - builder.hasBurst(true); - /* - * Stats are supported ? - */ - builder.hasStats(false); - - return builder.build(); + + return builder.withUnits(units) + .hasBurst(true) + .hasStats(false) + .build(); } /** * To build an empty meter features. + * * @param deviceId the device id * @return the meter features */ diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java index 88f0639a56c..35845275cdc 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/MeterEntryCodec.java @@ -32,37 +32,19 @@ public final class MeterEntryCodec extends AbstractEntityCodec { - static P4RuntimeOuterClass.MeterConfig getP4Config(PiMeterCellConfig piConfig) - throws CodecException { + static P4RuntimeOuterClass.MeterConfig getP4Config(PiMeterCellConfig piConfig) { // The config has no band, we don't have to create a P4RT meter config if (piConfig.isDefaultConfig()) { return null; } - // If it is not a reset operation, the config must be a modify config and has exactly 2 bands - if (!piConfig.isModifyConfig()) { - throw new CodecException("Number of meter bands should be 2 (Modify) or 0 (Reset)"); - } - final PiMeterBand[] bands = piConfig.meterBands().toArray(new PiMeterBand[0]); - long cir, cburst, pir, pburst; - // The band with bigger burst is peak if rate of them is equal. - if (bands[0].rate() > bands[1].rate() || - (bands[0].rate() == bands[1].rate() && - bands[0].burst() >= bands[1].burst())) { - cir = bands[1].rate(); - cburst = bands[1].burst(); - pir = bands[0].rate(); - pburst = bands[0].burst(); - } else { - cir = bands[0].rate(); - cburst = bands[0].burst(); - pir = bands[1].rate(); - pburst = bands[1].burst(); - } + + final PiMeterBand committedBand = piConfig.committedBand(); + final PiMeterBand peakBand = piConfig.peakBand(); return P4RuntimeOuterClass.MeterConfig.newBuilder() - .setCir(cir) - .setCburst(cburst) - .setPir(pir) - .setPburst(pburst) + .setCir(committedBand.rate()) + .setCburst(committedBand.burst()) + .setPir(peakBand.rate()) + .setPburst(peakBand.burst()) .build(); } @@ -70,7 +52,7 @@ static P4RuntimeOuterClass.MeterConfig getP4Config(PiMeterCellConfig piConfig) protected P4RuntimeOuterClass.MeterEntry encode( PiMeterCellConfig piEntity, Object ignored, PiPipeconf pipeconf, P4InfoBrowser browser) - throws P4InfoBrowser.NotFoundException, CodecException { + throws P4InfoBrowser.NotFoundException { final int meterId = browser.meters().getByName( piEntity.cellId().meterId().id()).getPreamble().getId(); P4RuntimeOuterClass.MeterEntry.Builder builder = @@ -139,9 +121,8 @@ public static PiMeterCellConfig getPiMeterCellConfig( PiMeterCellConfig.Builder builder = PiMeterCellConfig.builder().withMeterCellId(cellId); if (p4Config != null) { - builder = builder - .withMeterBand(new PiMeterBand(p4Config.getCir(), p4Config.getCburst())) - .withMeterBand(new PiMeterBand(p4Config.getPir(), p4Config.getPburst())); + builder.withCommittedBand(p4Config.getCir(), p4Config.getCburst()) + .withPeakBand(p4Config.getPir(), p4Config.getPburst()); } return builder.build(); } diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java index 93d924af067..f341bed5776 100644 --- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java +++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java @@ -18,13 +18,19 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.onosproject.core.ApplicationId; +import org.onosproject.core.CoreService; import org.onosproject.net.DeviceId; import org.onosproject.net.device.DeviceService; import org.onosproject.net.meter.DefaultMeterRequest; import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterRequest; +import org.onosproject.net.meter.MeterScope; import org.onosproject.net.meter.MeterService; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.rest.AbstractWebResource; import org.slf4j.Logger; @@ -63,6 +69,9 @@ public class MetersWebResource extends AbstractWebResource { private final ObjectNode root = mapper().createObjectNode(); private final ArrayNode metersNode = root.putArray("meters"); + private static final String REST_APP_ID = "org.onosproject.rest"; + private ApplicationId applicationId; + /** * Returns all meters of all devices. * @@ -114,15 +123,71 @@ public Response getMetersByDeviceId(@PathParam("deviceId") String deviceId) { public Response getMeterByDeviceIdAndMeterId(@PathParam("deviceId") String deviceId, @PathParam("meterId") String meterId) { DeviceId did = DeviceId.deviceId(deviceId); - MeterId mid = MeterId.meterId(Long.valueOf(meterId)); + MeterCellId mid = MeterId.meterId(Long.valueOf(meterId)); MeterService meterService = get(MeterService.class); final Meter meter = nullIsNotFound(meterService.getMeter(did, mid), - METER_NOT_FOUND + mid.id()); + METER_NOT_FOUND + mid); + + metersNode.add(codec(Meter.class).encode(meter, this)); + return ok(root).build(); + } + + /** + * Returns a meter by the meter cell id. + * + * @param deviceId device identifier + * @param scope scope identifier + * @param index index + * @return 200 OK with a meter, return 404 if no entry has been found + * @onos.rsModel Meter + */ + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("{deviceId}/{scope}/{index}") + public Response getMeterByDeviceIdAndMeterCellId(@PathParam("deviceId") String deviceId, + @PathParam("scope") String scope, + @PathParam("index") String index) { + DeviceId did = DeviceId.deviceId(deviceId); + MeterScope meterScope = MeterScope.of(scope); + long meterIndex = Long.parseLong(index); + MeterCellId meterCellId; + if (meterScope.equals(MeterScope.globalScope())) { + meterCellId = MeterId.meterId(meterIndex); + } else { + meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of(meterScope.id()), meterIndex); + } + + MeterService meterService = get(MeterService.class); + final Meter meter = nullIsNotFound(meterService.getMeter(did, meterCellId), + METER_NOT_FOUND + meterCellId); metersNode.add(codec(Meter.class).encode(meter, this)); return ok(root).build(); } + /** + * Returns a collection of meters by the device id and meter scope. + * + * @param deviceId device identifier + * @param scope scope identifier + * @return 200 OK with array of meters which belongs to specified device + * @onos.rsModel Meters + */ + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("scope/{deviceId}/{scope}") + public Response getMetersByDeviceIdAndScope(@PathParam("deviceId") String deviceId, + @PathParam("scope") String scope) { + DeviceId did = DeviceId.deviceId(deviceId); + MeterScope meterScope = MeterScope.of(scope); + MeterService meterService = get(MeterService.class); + final Iterable meters = meterService.getMeters(did, meterScope); + if (meters != null) { + meters.forEach(meter -> metersNode.add(codec(Meter.class).encode(meter, this))); + } + return ok(root).build(); + } + /** * Creates new meter rule. Creates and installs a new meter rule for the * specified device. @@ -170,7 +235,7 @@ public Response createMeter(@PathParam("deviceId") String deviceId, } /** - * Removes the specified meter. + * Removes the meter by device id and meter id. * * @param deviceId device identifier * @param meterId meter identifier @@ -179,65 +244,56 @@ public Response createMeter(@PathParam("deviceId") String deviceId, @DELETE @Path("{deviceId}/{meterId}") public Response deleteMeterByDeviceIdAndMeterId(@PathParam("deviceId") String deviceId, - @PathParam("meterId") String meterId) { + @PathParam("meterId") String meterId) { DeviceId did = DeviceId.deviceId(deviceId); - MeterId mid = MeterId.meterId(Long.valueOf(meterId)); + MeterCellId mid = MeterId.meterId(Long.valueOf(meterId)); + MeterRequest meterRequest = deleteRequest(did); MeterService meterService = get(MeterService.class); - final Meter tmpMeter = meterService.getMeter(did, mid); - if (tmpMeter != null) { - final MeterRequest meterRequest = meterToMeterRequest(tmpMeter, "REMOVE"); - if (meterRequest != null) { - meterService.withdraw(meterRequest, tmpMeter.id()); - } - } else { - log.warn("Meter {}, is not present", tmpMeter); - } + meterService.withdraw(meterRequest, mid); + return Response.noContent().build(); } /** - * Converts a meter instance to meterRequest instance with a certain operation. + * Removes the meter by the device id and meter cell id. * - * @param meter meter instance - * @param operation operation - * @return converted meterRequest instance + * @param deviceId device identifier + * @param scope scope identifier + * @param index index + * @return 204 NO CONTENT */ - private MeterRequest meterToMeterRequest(Meter meter, String operation) { - MeterRequest.Builder builder; - MeterRequest meterRequest; - - if (meter == null) { - return null; - } - - if (meter.isBurst()) { - builder = DefaultMeterRequest.builder() - .fromApp(meter.appId()) - .forDevice(meter.deviceId()) - .withUnit(meter.unit()) - .withBands(meter.bands()) - .burst(); + @DELETE + @Path("{deviceId}/{scope}/{index}") + public Response deleteMeterByDeviceIdAndMeterCellId(@PathParam("deviceId") String deviceId, + @PathParam("scope") String scope, + @PathParam("index") String index) { + DeviceId did = DeviceId.deviceId(deviceId); + MeterScope meterScope = MeterScope.of(scope); + long meterIndex = Long.parseLong(index); + MeterCellId meterCellId; + if (meterScope.equals(MeterScope.globalScope())) { + meterCellId = MeterId.meterId(meterIndex); } else { - builder = DefaultMeterRequest.builder() - .fromApp(meter.appId()) - .forDevice(meter.deviceId()) - .withUnit(meter.unit()) - .withBands(meter.bands()); + meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of(meterScope.id()), meterIndex); } + MeterRequest meterRequest = deleteRequest(did); + + MeterService meterService = get(MeterService.class); + meterService.withdraw(meterRequest, meterCellId); + + return Response.noContent().build(); + } - switch (operation) { - case "ADD": - meterRequest = builder.add(); - break; - case "REMOVE": - meterRequest = builder.remove(); - break; - default: - log.warn("Invalid operation {}.", operation); - return null; + private MeterRequest deleteRequest(DeviceId did) { + CoreService coreService = getService(CoreService.class); + if (applicationId == null) { + applicationId = coreService.registerApplication(REST_APP_ID); } - return meterRequest; + return DefaultMeterRequest.builder() + .forDevice(did) + .fromApp(applicationId) + .remove(); } } diff --git a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java index d7db0309be9..e9efb187194 100644 --- a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java +++ b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java @@ -442,7 +442,7 @@ public void testMeterSingleDevice() { public void testMeterSingleDeviceWithId() { setupMockMeters(); - expect(mockMeterService.getMeter(anyObject(), anyObject())) + expect(mockMeterService.getMeter(anyObject(), anyObject(MeterCellId.class))) .andReturn(meter5).anyTimes(); replay(mockMeterService); replay(mockDeviceService); @@ -467,7 +467,7 @@ public void testMeterSingleDeviceWithId() { public void testMeterByDeviceIdAndMeterId() { setupMockMeters(); - expect(mockMeterService.getMeter(anyObject(), anyObject())) + expect(mockMeterService.getMeter(anyObject(), anyObject(MeterCellId.class))) .andReturn(null).anyTimes(); replay(mockMeterService); @@ -526,9 +526,7 @@ public void testPostWithWrongDevice() { @Test public void testDelete() { setupMockMeters(); - expect(mockMeterService.getMeter(anyObject(), anyObject())) - .andReturn(meter5).anyTimes(); - mockMeterService.withdraw(anyObject(), anyObject()); + mockMeterService.withdraw(anyObject(), anyObject(MeterCellId.class)); expectLastCall(); replay(mockMeterService); From 89984ebcf98647f7de0943b5f31f01d690e027ba Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 2 Sep 2021 19:16:32 +0200 Subject: [PATCH 120/235] [SDFAB-502] Improve P4RuntimeMeterProgrammable reconciliation This is achieved by implementing device specific methods to verify if ONOS store meters and values read from the devices are similar Change-Id: I95b6a2c728536f08b47ce9d0d30d1b8888a353d7 --- drivers/barefoot/BUILD | 5 +- .../barefoot/TofinoMeterProgrammable.java | 81 ++++++++ .../src/main/resources/barefoot-drivers.xml | 2 + .../barefoot/TofinoMeterProgrammableTest.java | 182 ++++++++++++++++++ .../p4runtime/P4RuntimeMeterProgrammable.java | 25 ++- 5 files changed, 289 insertions(+), 6 deletions(-) create mode 100644 drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java create mode 100644 drivers/barefoot/src/test/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammableTest.java diff --git a/drivers/barefoot/BUILD b/drivers/barefoot/BUILD index ee635409e70..1633a15fd6d 100644 --- a/drivers/barefoot/BUILD +++ b/drivers/barefoot/BUILD @@ -2,13 +2,16 @@ COMPILE_DEPS = CORE_DEPS + [ "//drivers/p4runtime:onos-drivers-p4runtime", ] +TEST_DEPS = TEST_ADAPTERS + BUNDLES = [ ":onos-drivers-barefoot", ] -osgi_jar( +osgi_jar_with_tests( resources = glob(["src/main/resources/**"]), resources_root = "src/main/resources", + test_deps = TEST_DEPS, deps = COMPILE_DEPS, ) diff --git a/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java new file mode 100644 index 00000000000..1a1ddd6d72b --- /dev/null +++ b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java @@ -0,0 +1,81 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.drivers.barefoot; + +import org.onosproject.drivers.p4runtime.P4RuntimeMeterProgrammable; +import org.onosproject.net.meter.MeterProgrammable; +import org.onosproject.net.pi.runtime.PiMeterBand; +import org.onosproject.net.pi.runtime.PiMeterCellConfig; + +/** + * Implementation of the MeterProgrammable behaviour for a Tofino-based switch. + */ +public class TofinoMeterProgrammable extends P4RuntimeMeterProgrammable implements MeterProgrammable { + // More insights for these magic numbers can be found in this doc + // https://docs.google.com/document/d/1Vuf_2RaO0BJPTj_weE9h2spUBCMsiBX-iIMb4OoEIB0/edit?usp=sharing + private static final double RATE_ERROR = 0.02; + private static final long BURST_LOWER_DIVIDER = 126; + private static final long BURST_UPPER_DIVIDER = 125; + private static final long BURST_MULTIPLIER = 125; + + @Override + public boolean isSimilar(PiMeterCellConfig onosMeter, PiMeterCellConfig deviceMeter) { + final PiMeterBand onosCommittedBand = onosMeter.committedBand(); + final PiMeterBand onosPeakBand = onosMeter.peakBand(); + final PiMeterBand deviceCommittedBand = deviceMeter.committedBand(); + final PiMeterBand devicePeakBand = deviceMeter.peakBand(); + final long onosCir = onosCommittedBand.rate(); + final long onosCburst = onosCommittedBand.burst(); + final long onosPir = onosPeakBand.rate(); + final long onosPburst = onosPeakBand.burst(); + final long deviceCir = deviceCommittedBand.rate(); + final long deviceCburst = deviceCommittedBand.burst(); + final long devicePir = devicePeakBand.rate(); + final long devicePburst = devicePeakBand.burst(); + + return isRateSimilar(onosCir, deviceCir) && isRateSimilar(onosPir, devicePir) && + isBurstSimilar(onosCburst, deviceCburst) && isBurstSimilar(onosPburst, devicePburst); + } + + // Verify if device rate is included in the confidence interval + // derived from the rate stored in ONOS + private boolean isRateSimilar(long onosRate, long deviceRate) { + double lowerEnd = (double) onosRate * (1.0 - RATE_ERROR); + double upperEnd = (double) onosRate * (1.0 + RATE_ERROR); + + if (log.isDebugEnabled()) { + log.debug("isRateSimilar {} in [{}, {}]", deviceRate, lowerEnd, upperEnd); + } + + return deviceRate >= lowerEnd && deviceRate <= upperEnd; + } + + // Verify if device burst is included in the confidence interval + // derived from the burst stored in ONOS + private boolean isBurstSimilar(long onosBurst, long deviceBurst) { + // Rundown removing the decimal part + long lowerEnd = (onosBurst / BURST_LOWER_DIVIDER) * BURST_MULTIPLIER; + long upperEnd = (onosBurst / BURST_UPPER_DIVIDER) * BURST_MULTIPLIER; + + if (log.isDebugEnabled()) { + log.debug("isBurstSimilar {} in [{}, {}]", deviceBurst, lowerEnd, upperEnd); + } + + return deviceBurst >= lowerEnd && deviceBurst <= upperEnd; + } + +} diff --git a/drivers/barefoot/src/main/resources/barefoot-drivers.xml b/drivers/barefoot/src/main/resources/barefoot-drivers.xml index 89260f57a69..3b85dbe163c 100644 --- a/drivers/barefoot/src/main/resources/barefoot-drivers.xml +++ b/drivers/barefoot/src/main/resources/barefoot-drivers.xml @@ -27,6 +27,8 @@ hwVersion="Tofino" swVersion="Stratum" extends="stratum"> + true diff --git a/drivers/barefoot/src/test/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammableTest.java b/drivers/barefoot/src/test/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammableTest.java new file mode 100644 index 00000000000..b4baf4c0add --- /dev/null +++ b/drivers/barefoot/src/test/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammableTest.java @@ -0,0 +1,182 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.drivers.barefoot; + +import com.google.common.collect.ImmutableMap; +import org.junit.Before; +import org.junit.Test; +import org.onosproject.net.pi.model.PiMeterId; +import org.onosproject.net.pi.runtime.PiMeterBand; +import org.onosproject.net.pi.runtime.PiMeterBandType; +import org.onosproject.net.pi.runtime.PiMeterCellConfig; +import org.onosproject.net.pi.runtime.PiMeterCellId; + +import java.util.Map; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; + +/** + * Test for TofinoMeterProgrammable behavior. + */ +public class TofinoMeterProgrammableTest { + + private TofinoMeterProgrammable meterProgrammable; + private PiMeterCellId meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of("foo"), 0); + + private static final Map RATES = ImmutableMap.builder() + .put(125000L, 124500L) + .put(244800L, 244375L) + .put(300000L, 299125L) + .build(); + private static final Map WRONG_RATES = ImmutableMap.builder() + .put(12500L, 0L) + .put(60000L, 0L) + .put(124900L, 0L) + .put(12501L, 12000L) + .put(60001L, 58000L) + .put(124901L, 122400L) + .put(12502L, 12800L) + .put(60002L, 62000L) + .put(124902L, 128000L) + .build(); + + private static final Map BURSTS = ImmutableMap.builder() + .put(1482L, 1375L) + .put(7410L, 7375L) + .put(14820L, 14750L) + .build(); + + private static final Map WRONG_BURSTS = ImmutableMap.builder() + .put(1482L, 1374L) + .put(7410L, 7249L) + .put(14820L, 14624L) + .put(1483L, 1376L) + .put(7411L, 7376L) + .put(14821L, 14751L) + .build(); + + @Before + public void setup() { + meterProgrammable = new TofinoMeterProgrammable(); + } + + /** + * Test isRateSimilar check of the tofino behavior. + */ + @Test + public void testIsRateSimilar() { + PiMeterBand onosMeterBand; + PiMeterBand deviceMeterBand; + PiMeterCellConfig onosMeter; + PiMeterCellConfig deviceMeter; + for (Map.Entry entry : RATES.entrySet()) { + onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getKey(), 0); + deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getValue(), 0); + onosMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(onosMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + deviceMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(deviceMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + assertTrue(meterProgrammable.isSimilar(onosMeter, deviceMeter)); + } + } + + /** + * Test wrong isRateSimilar of the tofino behavior. + */ + @Test + public void testWrongIsRateSimilar() { + PiMeterBand onosMeterBand; + PiMeterBand deviceMeterBand; + PiMeterCellConfig onosMeter; + PiMeterCellConfig deviceMeter; + for (Map.Entry entry : WRONG_RATES.entrySet()) { + onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getKey(), 0); + deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getValue(), 0); + onosMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(onosMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + deviceMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(deviceMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + assertFalse(meterProgrammable.isSimilar(onosMeter, deviceMeter)); + } + } + + /** + * Test isBurstSimilar of the tofino behavior. + */ + @Test + public void testIsBurstSimilar() { + PiMeterBand onosMeterBand; + PiMeterBand deviceMeterBand; + PiMeterCellConfig onosMeter; + PiMeterCellConfig deviceMeter; + for (Map.Entry entry : BURSTS.entrySet()) { + onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getKey()); + deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getValue()); + onosMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(onosMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + deviceMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(deviceMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + assertTrue(meterProgrammable.isSimilar(onosMeter, deviceMeter)); + } + } + + /** + * Test wrong isBurstSimilar of the tofino behavior. + */ + @Test + public void testWrongIsBurstSimilar() { + PiMeterBand onosMeterBand; + PiMeterBand deviceMeterBand; + PiMeterCellConfig onosMeter; + PiMeterCellConfig deviceMeter; + for (Map.Entry entry : WRONG_BURSTS.entrySet()) { + onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getKey()); + deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getValue()); + onosMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(onosMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + deviceMeter = PiMeterCellConfig.builder() + .withMeterCellId(meterCellId) + .withMeterBand(deviceMeterBand) + .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0)) + .build(); + assertFalse(meterProgrammable.isSimilar(onosMeter, deviceMeter)); + } + } + +} diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index 9a04a3573b3..5165783f09e 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -227,7 +227,7 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { } // The config is not consistent - if (!translatedEntity.get().translated().equals(config)) { + if (!isSimilar(translatedEntity.get().translated(), config)) { log.warn("Meter Cell Config obtained from device {} is different from " + "one in in translation store: device={}, store={}", deviceId, config, translatedEntity.get().translated()); @@ -245,10 +245,10 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { // Forge a meter with MeterCellId, Bands and DeviceId using the original value. // Other values are not required because we cannot retrieve them from the south DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() - .withBands(original.bands()) - .withCellId(original.meterCellId()) - .forDevice(deviceId) - .build(); + .withBands(original.bands()) + .withCellId(original.meterCellId()) + .forDevice(deviceId) + .build(); meter.setState(MeterState.ADDED); return meter; } @@ -270,6 +270,21 @@ private boolean appendEntryToWriteRequestOrSkip( return false; } + /** + * Returns true if the given PiMeterCellConfigs are similar enough to be deemed equal + * for reconciliation purposes. This is required to handle read/write asymmetry in devices + * that allow variations in the meter rate/burst. E.g., devices that implement metering + * with a rate or burst size that is slightly higher/lower than the configured ones, + * so the values written by ONOS will be different than those read from the device. + * + * @param onosMeter the ONOS meter + * @param deviceMeter the meter in the device + * @return true if the meters are similar, false otherwise + */ + protected boolean isSimilar(PiMeterCellConfig onosMeter, PiMeterCellConfig deviceMeter) { + return onosMeter.equals(deviceMeter); + } + /** * P4 meter features builder. */ From 1d8c5e829883d2faf6ec78920f592527ed38b5dc Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Mon, 13 Sep 2021 17:23:20 +0800 Subject: [PATCH 121/235] [SDFAB-557] Fix max meter in ONOS Change-Id: I17f1b760fb4c16e3c0daa0ed0a4e54009b5e9aaf --- .../net/meter/DefaultMeterFeatures.java | 9 +- .../net/meter/DefaultMeterFeaturesTest.java | 99 +++++++++++++++++++ .../meter/impl/DistributedMeterStore.java | 4 +- .../meter/impl/DistributedMeterStoreTest.java | 2 + .../p4runtime/P4RuntimeMeterProgrammable.java | 10 +- .../of/meter/util/MeterFeaturesBuilder.java | 12 ++- 6 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 core/api/src/test/java/org/onosproject/net/meter/DefaultMeterFeaturesTest.java diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterFeatures.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterFeatures.java index 380625012a1..b9a4368a0bd 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterFeatures.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterFeatures.java @@ -66,8 +66,11 @@ public DeviceId deviceId() { @Override public long maxMeter() { - // For OpenFlow meter, return end index as maxMeter - return scope.isGlobal() ? endIndex + 1 : endIndex - startIndex + 1; + long maxMeter = 0; + if (startIndex != -1 && endIndex != -1) { + maxMeter = endIndex - startIndex + 1; + } + return maxMeter; } @Override @@ -243,7 +246,7 @@ public MeterFeatures build() { // 0, for the rest (A P4RT meter) if (mmeter != 0L && starti == -1L && endi == -1L) { starti = mscope.isGlobal() ? 1 : 0; - endi = mmeter - 1; + endi = mscope.isGlobal() ? mmeter : mmeter - 1; } // If one of the index is unset/unvalid value, treated as no meter features if (starti <= -1 || endi <= -1) { diff --git a/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterFeaturesTest.java b/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterFeaturesTest.java new file mode 100644 index 00000000000..5cd0d1ac5d3 --- /dev/null +++ b/core/api/src/test/java/org/onosproject/net/meter/DefaultMeterFeaturesTest.java @@ -0,0 +1,99 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.net.meter; + +import org.junit.Before; +import org.junit.Test; +import org.onosproject.net.DeviceId; + +import java.util.Set; + +import static org.junit.Assert.assertEquals; + +/** + * DefaultMeterFeatures Tests. + */ +public class DefaultMeterFeaturesTest { + + private MeterFeatures mf; + private DeviceId did = DeviceId.deviceId("foo:foo"); + private short band = 2; + private short color = 3; + private Set types; + private Set units; + private MeterScope globalScope = MeterScope.globalScope(); + private MeterScope fooScope = MeterScope.of("foo"); + + @Before + public void setup() { + types = Set.of(Band.Type.DROP); + units = Set.of(Meter.Unit.KB_PER_SEC); + } + + @Test + public void testZeroMaxMeter() { + mf = DefaultMeterFeatures.builder() + .forDevice(did) + .withMaxMeters(0L) + .withScope(globalScope) + .withMaxBands(band) + .withMaxColors(color) + .withBandTypes(types) + .withUnits(units) + .hasBurst(true) + .hasStats(true).build(); + + assertEquals(-1, mf.startIndex()); + assertEquals(-1, mf.endIndex()); + assertEquals(0L, mf.maxMeter()); + } + + @Test + public void testOfMaxMeter() { + mf = DefaultMeterFeatures.builder() + .forDevice(did) + .withMaxMeters(1024L) + .withScope(globalScope) + .withMaxBands(band) + .withMaxColors(color) + .withBandTypes(types) + .withUnits(units) + .hasBurst(true) + .hasStats(true).build(); + + assertEquals(1L, mf.startIndex()); + assertEquals(1024L, mf.endIndex()); + assertEquals(1024L, mf.maxMeter()); + } + + @Test + public void testNonOfMaxMeter() { + mf = DefaultMeterFeatures.builder() + .forDevice(did) + .withMaxMeters(1024L) + .withScope(fooScope) + .withMaxBands(band) + .withMaxColors(color) + .withBandTypes(types) + .withUnits(units) + .hasBurst(true) + .hasStats(true).build(); + + assertEquals(0L, mf.startIndex()); + assertEquals(1023L, mf.endIndex()); + assertEquals(1024L, mf.maxMeter()); + } +} diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 7d8c7a5ac05..5b9252d9404 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -627,9 +627,9 @@ public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { if (maxMeters == 0L) { return null; } else { - // OpenFlow meter index starts from 1, ends with max-1 + // OpenFlow meter index starts from 1, ends with max startIndex = 1L; - endIndex = maxMeters - 1; + endIndex = maxMeters; } } // Get a new value diff --git a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java index 37ff7b4702c..5268527fc91 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java @@ -330,6 +330,8 @@ public void testMaxMeterError() { assertThat(mid1, is(meterStore.allocateMeterId(did1))); // Reserve id 2 assertThat(mid2, is(meterStore.allocateMeterId(did1))); + // Reserve id 3 + assertThat(mid3, is(meterStore.allocateMeterId(did1))); // Max meter error assertNull(meterStore.allocateMeterId(did1)); } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index 5165783f09e..b903fa3b5b8 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -314,9 +314,13 @@ public MeterFeatures build() { // The scope value will be PiMeterId .withScope(MeterScope.of(piMeterModel.id().id())) .withMaxBands(PI_METER_MAX_BAND) - .withMaxColors(PI_METER_MAX_COLOR) - .withStartIndex(PI_METER_START_INDEX) - .withEndIndex(piMeterModel.size() - 1); + .withMaxColors(PI_METER_MAX_COLOR); + + // We extract the number of supported meters. + if (piMeterModel.size() > 0) { + builder.withStartIndex(PI_METER_START_INDEX) + .withEndIndex(piMeterModel.size() - 1); + } // p4rt meters support MARK_YELLOW (committed config) and // MARK_RED (peak config) band types. diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java index 4fc61aa8164..9e7963dfa0b 100644 --- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java +++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java @@ -73,9 +73,15 @@ public MeterFeatures build() { MeterFeatures.Builder builder = DefaultMeterFeatures.builder() .forDevice(deviceId) .withMaxBands(ofMeterFeatures.getMaxBands()) - .withMaxColors(ofMeterFeatures.getMaxColor()) - .withStartIndex(OF_METER_START_INDEX) - .withEndIndex(ofMeterFeatures.getMaxMeter()); + .withMaxColors(ofMeterFeatures.getMaxColor()); + + /* + * We extract the number of supported meters. + */ + if (ofMeterFeatures.getMaxMeter() > 0) { + builder.withStartIndex(OF_METER_START_INDEX) + .withEndIndex(ofMeterFeatures.getMaxMeter()); + } /* * We extract the supported band types. */ From 63aaedd2c5a7db0f1101b66eaac6d6e03ab2fbfe Mon Sep 17 00:00:00 2001 From: Matteo Scandolo Date: Mon, 13 Sep 2021 11:49:58 -0700 Subject: [PATCH 122/235] Fix issue with multiline comment in OSGI properties If a component property as a multiline comment the app activation will throw an exception and no property for that component would be initialized. This patch address that in two ways: - Make sure that if we cannot parse a line from cfgdef the other properties are enabled and logs a warn. - Changes the onos-maven-plugin so that it removes new lines when generating the .cfgdef file Change-Id: I550c23624118782fe6d79c9abbaf75ae59ea0eab --- .../org/onosproject/cfg/impl/ConfigPropertyDefinitions.java | 5 +++++ tools/package/maven-plugin/pom.xml | 2 +- .../src/main/java/org/onosproject/maven/OnosCfgMojo.java | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java b/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java index e07773b307f..25ba6e0cd4c 100644 --- a/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java +++ b/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java @@ -75,6 +75,11 @@ public static Set read(InputStream stream) throws IOException { while ((line = br.readLine()) != null) { if (!line.isEmpty() && !line.startsWith(COMMENT)) { String[] f = line.split(SEP, 4); + if (f.length < 4) { + log.warn("Cannot parse property from line: '{}'. " + + "This property will be ignored", line); + continue; + } builder.add(defineProperty(f[0], Type.valueOf(f[1]), f[2], f[3])); } } diff --git a/tools/package/maven-plugin/pom.xml b/tools/package/maven-plugin/pom.xml index 488c806fa22..13bacd1a3e4 100644 --- a/tools/package/maven-plugin/pom.xml +++ b/tools/package/maven-plugin/pom.xml @@ -26,7 +26,7 @@ org.onosproject onos-maven-plugin - 2.4-SNAPSHOT + 2.4.0 maven-plugin Maven plugin for packaging ONOS applications or generating diff --git a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosCfgMojo.java b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosCfgMojo.java index 60d5f63c538..43973572098 100644 --- a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosCfgMojo.java +++ b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosCfgMojo.java @@ -174,7 +174,11 @@ private String description(JavaClass javaClass, String name) { } JavaField field = javaClass.getFieldByName(name); if (field != null) { + // make sure that the new lines are removed from the comment, they will break the property loading. String comment = field.getComment(); + if (comment != null) { + comment = comment.replace("\n", " ").replace("\r", " "); + } return comment != null ? comment : NO_DESCRIPTION; } throw new IllegalStateException("cfgdef could not find a variable named " + name + " in " + javaClass.getName()); From b318e1f440debcb7903f2c5e0611c371bf1d1496 Mon Sep 17 00:00:00 2001 From: Thomas Vachuska Date: Wed, 15 Sep 2021 12:48:39 -0700 Subject: [PATCH 123/235] Bumping version to 2.5.0-SNAPSHOT Change-Id: I2a1b7e9cfe99f605e177d4775f7dc0277eb8472c --- tools/package/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/package/maven-plugin/pom.xml b/tools/package/maven-plugin/pom.xml index 13bacd1a3e4..8b2da91abed 100644 --- a/tools/package/maven-plugin/pom.xml +++ b/tools/package/maven-plugin/pom.xml @@ -26,7 +26,7 @@ org.onosproject onos-maven-plugin - 2.4.0 + 2.5.0-SNAPSHOT maven-plugin Maven plugin for packaging ONOS applications or generating From a770879a950d1cc985db1a659da701551700e886 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 10 Sep 2021 09:37:29 +0200 Subject: [PATCH 124/235] [SDFAB-542] Meters cleanup and leftovers v2 - Code clean up (unused code, unuseful comments) - Remove deprecated internal APIs - Prevent the ejection of the meter pollers - Prevent the ejection of the mf pollers - Fix unproper filter of device events - Fix delete on store which updated existing meters with dummy value - Fix NPE in TofinoMeterProgrammable caused by default config - Update unit tests Change-Id: Ib2767e3ab3cf146693e61b7e1890419c9743d521 --- .../onosproject/net/meter/DefaultMeter.java | 1 - .../onosproject/net/meter/MeterService.java | 2 +- .../org/onosproject/net/meter/MeterStore.java | 50 ---- .../net/meter/impl/MeterDriverProvider.java | 73 ++---- .../net/meter/impl/MeterManager.java | 20 +- .../net/meter/impl/MeterManagerTest.java | 125 ++------- .../meter/impl/DistributedMeterStore.java | 171 +++++-------- .../meter/impl/DistributedMeterStoreTest.java | 241 ++++++------------ .../barefoot/TofinoMeterProgrammable.java | 7 + .../p4runtime/P4RuntimeMeterProgrammable.java | 8 +- .../rest/resources/MetersWebResource.java | 3 - 11 files changed, 205 insertions(+), 496 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java index f3e29feb8f2..ef8b3df73d6 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java @@ -35,7 +35,6 @@ */ public final class DefaultMeter extends AbstractAnnotated implements Meter, MeterEntry { - private final MeterCellId cellId; private final Optional appId; private final Unit unit; diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java index 2d37f87b8b6..82bab2cc40f 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java @@ -125,7 +125,7 @@ public interface MeterService * @param deviceId device identifier */ default void purgeMeters(DeviceId deviceId) { - //Default implementation does nothing + throw new UnsupportedOperationException("purgeMeters not implemented"); } /** diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 4abf2332ada..f15438b8d7a 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -35,16 +35,6 @@ public interface MeterStore extends Store { */ CompletableFuture addOrUpdateMeter(Meter meter); - /** - * Adds a meter to the store. - * - * @param meter a meter - * @return a future indicating the result of the store operation - * @deprecated in onos-2.5 replaced by {@link #addOrUpdateMeter(Meter)} - */ - @Deprecated - CompletableFuture storeMeter(Meter meter); - /** * Deletes a meter from the store. * @@ -138,15 +128,6 @@ public interface MeterStore extends Store { */ void failedMeter(MeterOperation op, MeterFailReason reason); - /** - * Delete this meter immediately. - * - * @param m a meter - * @deprecated in onos-2.5 renamed {@link #purgeMeter(Meter)} - */ - @Deprecated - void deleteMeterNow(Meter m); - /** * Delete this meter immediately. * @@ -154,27 +135,6 @@ public interface MeterStore extends Store { */ void purgeMeter(Meter m); - /** - * Retrieve maximum meters available for the device. - * - * @param key the meter features key - * @return the maximum number of meters supported by the device - * @deprecated in onos-2.5, Max meters is replaced by start and end index - */ - @Deprecated - long getMaxMeters(MeterFeaturesKey key); - - /** - * Allocates the first available MeterId. - * - * @param deviceId the device id - * @return the meter Id or null if it was not possible - * to allocate a meter id - * @deprecated in onos-2.5 replaced by {@link #allocateMeterId(DeviceId, MeterScope)} - */ - @Deprecated - MeterId allocateMeterId(DeviceId deviceId); - /** * Allocates the first available MeterId. * @@ -196,16 +156,6 @@ public interface MeterStore extends Store { @Deprecated void freeMeterId(DeviceId deviceId, MeterId meterId); - /** - * Removes all meters of given device from store. - * This API is typically used when the device is offline. - * - * @param deviceId the device id - * @deprecated in onos-2.5, replaced by {@link #purgeMeters(DeviceId)} - */ - @Deprecated - void purgeMeter(DeviceId deviceId); - /** * Removes all meters of given device from store. * This API is typically used when the device is offline. diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java index b1422e8d1b2..aad015f54c4 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterDriverProvider.java @@ -23,8 +23,6 @@ import org.onosproject.net.device.DeviceEvent; import org.onosproject.net.device.DeviceListener; import org.onosproject.net.device.DeviceService; -import org.onosproject.net.meter.Meter; -import org.onosproject.net.meter.MeterFeatures; import org.onosproject.net.meter.MeterOperation; import org.onosproject.net.meter.MeterOperations; import org.onosproject.net.meter.MeterProgrammable; @@ -36,14 +34,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; import java.util.Collections; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; import static org.onlab.util.Tools.groupedThreads; @@ -54,18 +49,14 @@ * Driver-based Meter provider. */ public class MeterDriverProvider extends AbstractProvider implements MeterProvider { - - private final Logger log = LoggerFactory.getLogger(getClass()); - // To be extracted for reuse as we deal with other. private static final String SCHEME = "default"; private static final String PROVIDER_NAME = "org.onosproject.provider.meter"; - // potentially positive device event - private static final Set POSITIVE_DEVICE_EVENT = - Sets.immutableEnumSet(DEVICE_ADDED, - DEVICE_AVAILABILITY_CHANGED); + private static final Set POSITIVE_DEVICE_EVENT = Sets.immutableEnumSet( + DEVICE_ADDED, DEVICE_AVAILABILITY_CHANGED); + private final Logger log = LoggerFactory.getLogger(getClass()); protected DeviceService deviceService; protected MastershipService mastershipService; MeterProviderService meterProviderService; @@ -117,12 +108,15 @@ void terminate() { } private void pollMeters() { - deviceService.getAvailableDevices().forEach(device -> { - if (mastershipService.isLocalMaster(device.id()) && - device.is(MeterProgrammable.class)) { - pollDeviceMeters(device.id()); - } - }); + try { + deviceService.getAvailableDevices().forEach(device -> { + if (mastershipService.isLocalMaster(device.id()) && device.is(MeterProgrammable.class)) { + pollDeviceMeters(device); + } + }); + } catch (Exception e) { + log.warn("Exception thrown while polling meters", e); + } } @Override @@ -138,41 +132,32 @@ public void performMeterOperation(DeviceId deviceId, MeterOperation meterOp) { } } - private void pollDeviceMeters(DeviceId deviceId) { - Collection meters = null; + private void pollDeviceMeters(Device device) { try { - meters = getMeterProgrammable(deviceId).getMeters().get(pollFrequency, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - log.warn("Unable to get the Meters from {}, error: {}", deviceId, e.getMessage()); + meterProviderService.pushMeterMetrics(device.id(), device.as(MeterProgrammable.class).getMeters() + .completeOnTimeout(Collections.emptySet(), pollFrequency, TimeUnit.SECONDS).get()); + } catch (Exception e) { + log.warn("Unable to get the Meters from {}, error: {}", device, e.getMessage()); log.debug("Exception: ", e); } - meterProviderService.pushMeterMetrics(deviceId, meters); } - private void getMeterFeatures(DeviceId deviceId) { - Collection meterFeatures = Collections.emptySet(); + private void getMeterFeatures(Device device) { try { - if (isMeterProgrammable(deviceId)) { - meterFeatures = getMeterProgrammable(deviceId).getMeterFeatures().get(pollFrequency, TimeUnit.SECONDS); - } + meterProviderService.pushMeterFeatures(device.id(), device.as(MeterProgrammable.class).getMeterFeatures() + .completeOnTimeout(Collections.emptySet(), pollFrequency, TimeUnit.SECONDS).get()); } catch (Exception e) { - log.warn("Unable to get the Meter Features from {}, error: {}", deviceId, e.getMessage()); + log.warn("Unable to get the Meter Features from {}, error: {}", device.id(), e.getMessage()); log.debug("Exception: ", e); } - meterProviderService.pushMeterFeatures(deviceId, meterFeatures); - } - - private boolean isMeterProgrammable(DeviceId deviceId) { - Device device = deviceService.getDevice(deviceId); - return device.is(MeterProgrammable.class); } private MeterProgrammable getMeterProgrammable(DeviceId deviceId) { Device device = deviceService.getDevice(deviceId); - if (device.is(MeterProgrammable.class)) { + if (device != null && device.is(MeterProgrammable.class)) { return device.as(MeterProgrammable.class); } else { - log.debug("Device {} is not meter programmable", deviceId); + log.debug("Device {} is not meter programmable or does not exist", deviceId); return null; } } @@ -186,9 +171,7 @@ public void event(DeviceEvent event) { @Override public boolean isRelevant(DeviceEvent event) { - Device device = event.subject(); - return POSITIVE_DEVICE_EVENT.contains(event.type()) && - device.is(MeterProgrammable.class); + return event.subject().is(MeterProgrammable.class); } private void handleEvent(DeviceEvent event) { @@ -196,7 +179,7 @@ private void handleEvent(DeviceEvent event) { switch (event.type()) { case DEVICE_ADDED: - getMeterFeatures(device.id()); + getMeterFeatures(device); break; case DEVICE_REMOVED: case DEVICE_SUSPENDED: @@ -206,11 +189,11 @@ private void handleEvent(DeviceEvent event) { break; } - boolean isRelevant = mastershipService.isLocalMaster(device.id()) && - deviceService.isAvailable(device.id()); + boolean isRelevant = POSITIVE_DEVICE_EVENT.contains(event.type()) && + mastershipService.isLocalMaster(device.id()) && deviceService.isAvailable(device.id()); if (isRelevant) { - pollDeviceMeters(device.id()); + pollDeviceMeters(device); } } } diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java index 98e79a9d89a..94e33ebbe67 100644 --- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java +++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java @@ -106,11 +106,10 @@ public class MeterManager extends AbstractListenerProviderRegistry implements MeterService, MeterProviderRegistry { - // Installer related objects + private PredictableExecutor meterInstallers; private static final String WORKER_PATTERN = "installer-%d"; private static final String GROUP_THREAD_NAME = "onos/meter"; - // Logging facility, meter store delegate and listener for device events. private final Logger log = getLogger(getClass()); private final MeterStoreDelegate delegate = new InternalMeterStoreDelegate(); private final DeviceListener deviceListener = new InternalDeviceListener(); @@ -152,7 +151,6 @@ public class MeterManager // Action triggered when the futures related to submit and withdrawal complete private TriConsumer onComplete; - // Meter provider reference private final MeterDriverProvider defaultProvider = new MeterDriverProvider(); // Node id used to verify who is charge of the meter ops @@ -298,7 +296,7 @@ public Meter submit(MeterRequest request) { // Meter installation logic (happy ending case) // PENDING -> stats -> ADDED -> future completes m.setState(MeterState.PENDING_ADD); - store.storeMeter(m).whenComplete((result, error) -> + store.addOrUpdateMeter(m).whenComplete((result, error) -> onComplete.accept(request, result, error)); return m; } @@ -324,7 +322,6 @@ public void withdraw(MeterRequest request, MeterCellId meterCellId) { DefaultMeter m = (DefaultMeter) mBuilder.build(); // Meter removal logic (happy ending case) // PENDING -> stats -> removed from the map -> future completes - // There is no transition to the REMOVED state m.setState(MeterState.PENDING_REMOVE); store.deleteMeter(m).whenComplete((result, error) -> onComplete.accept(request, result, error)); @@ -359,7 +356,7 @@ public Collection getAllMeters() { @Override public MeterId allocateMeterId(DeviceId deviceId) { // We delegate directly to the store - return store.allocateMeterId(deviceId); + return (MeterId) store.allocateMeterId(deviceId, MeterScope.globalScope()); } private MeterCellId allocateMeterId(DeviceId deviceId, MeterScope scope) { @@ -375,7 +372,7 @@ public void freeMeterId(DeviceId deviceId, MeterId meterId) { @Override public void purgeMeters(DeviceId deviceId) { // We delegate directly to the store - store.purgeMeter(deviceId); + store.purgeMeters(deviceId); } @Override @@ -404,7 +401,6 @@ public void meterOperationFailed(MeterOperation operation, @Override public void pushMeterMetrics(DeviceId deviceId, Collection meterEntries) { - // Each update on the store is reflected on this collection Collection allMeters = store.getAllMeters(deviceId); Map meterEntriesMap = meterEntries.stream() @@ -448,12 +444,8 @@ public void pushMeterMetrics(DeviceId deviceId, Collection meterEntries) Collection newAllMeters = Sets.newHashSet(allMeters); newAllMeters.removeAll(addedMeters); + // Remove definetely the remaining meters newAllMeters.forEach(m -> { - // Remove workflow. Regarding OpenFlow, meters have been removed from - // the device but they are still in the store, we will purge them definitely. - // Instead, P4Runtime devices will not remove the meter. The first workaround - // for P4Runtime will avoid to send a remove op. Then, we reach this point - // and we purge the meter from the store if (m.state() == MeterState.PENDING_REMOVE) { log.debug("Delete meter {} now in store", m.meterCellId()); store.purgeMeter(m); @@ -566,7 +558,7 @@ public void event(DeviceEvent event) { if (purge) { log.info("PurgeOnDisconnection is requested for device {}, " + "removing meters", deviceId); - store.purgeMeter(deviceId); + store.purgeMeters(deviceId); } } break; diff --git a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java index 1510e354ede..8e5e33b8a5a 100644 --- a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java @@ -68,7 +68,6 @@ import org.onosproject.net.meter.MeterProviderService; import org.onosproject.net.meter.MeterRequest; import org.onosproject.net.meter.MeterScope; -import org.onosproject.net.meter.MeterService; import org.onosproject.net.meter.MeterState; import org.onosproject.net.pi.PiPipeconfServiceAdapter; import org.onosproject.net.pi.model.PiMeterId; @@ -109,14 +108,10 @@ */ public class MeterManagerTest { - // Test node id private static final NodeId NID_LOCAL = new NodeId("local"); - - // Test ip address private static final IpAddress LOCALHOST = IpAddress.valueOf("127.0.0.1"); private static final ProviderId PID = new ProviderId("of", "foo"); - private static final ProviderId PROGRAMMABLE_PROVIDER = new ProviderId("foo", "foo"); private static final DeviceId PROGRAMMABLE_DID = DeviceId.deviceId("test:002"); @@ -127,44 +122,23 @@ public class MeterManagerTest { new DefaultDevice(PROGRAMMABLE_PROVIDER, PROGRAMMABLE_DID, Device.Type.SWITCH, "", "", "", "", null, ANNOTATIONS); - private MeterService service; - - // Test Driver service used during the tests - private DriverManager driverService; - - // Test device service used during the tests - private DeviceService deviceService; - - // Test provider used during the tests private TestProvider provider; - - // Meter manager private MeterManager manager; - - // Meter provider registry private MeterProviderRegistry registry; - - // Meter provider service private MeterProviderService providerService; - - // Store under testing private DistributedMeterStore meterStore; - // Device ids used during the tests private DeviceId did1 = did("1"); private DeviceId did2 = did("2"); - // Meter ids used during the tests private MeterId mid1 = MeterId.meterId(1); private MeterCellId cid0 = PiMeterCellId.ofIndirect(PiMeterId.of("foo"), 0L); - // Bands used during the tests private static Band b1 = DefaultBand.builder() .ofType(Band.Type.DROP) .withRate(500) .build(); - // Meters used during the tests private Meter m1 = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -179,7 +153,6 @@ public class MeterManagerTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - private static Meter mProgrammable = DefaultMeter.builder() .forDevice(PROGRAMMABLE_DID) .fromApp(APP_ID) @@ -194,7 +167,6 @@ public class MeterManagerTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - private static Meter mUserDefined = DefaultMeter.builder() .forDevice(PROGRAMMABLE_DID) .fromApp(APP_ID) @@ -203,7 +175,6 @@ public class MeterManagerTest { .withBands(Collections.singletonList(b1)) .build(); - // Meter requests used during the tests private MeterRequest.Builder m1Request = DefaultMeterRequest.builder() .forDevice(did1) .fromApp(APP_ID) @@ -214,7 +185,6 @@ public class MeterManagerTest { .fromApp(APP_ID) .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)); - private MeterRequest.Builder mProgrammableRequest = DefaultMeterRequest.builder() .forDevice(PROGRAMMABLE_DID) .fromApp(APP_ID) @@ -225,7 +195,6 @@ public class MeterManagerTest { .fromApp(APP_ID) .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)); - private MeterRequest.Builder userDefinedRequest = DefaultMeterRequest.builder() .forDevice(PROGRAMMABLE_DID) .fromApp(APP_ID) @@ -234,7 +203,6 @@ public class MeterManagerTest { .withScope(MeterScope.of("foo")) .withIndex(0L); - // Meter features used during the tests private MeterFeatures mef1 = DefaultMeterFeatures.builder().forDevice(did1) .withMaxMeters(3L) .withBandTypes(new HashSet<>()) @@ -279,72 +247,53 @@ public class MeterManagerTest { @Before public void setup() { - //Init step for the deviceService - deviceService = new TestDeviceService(); - //Init step for the driver registry and driver service. + DeviceService deviceService = new TestDeviceService(); DriverRegistryManager driverRegistry = new DriverRegistryManager(); - driverService = new TestDriverManager(driverRegistry, deviceService, new NetworkConfigServiceAdapter()); + DriverManager driverService = new TestDriverManager(driverRegistry, deviceService, + new NetworkConfigServiceAdapter()); driverRegistry.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "", ImmutableMap.of(MeterProgrammable.class, TestMeterProgrammable.class, MeterQuery.class, TestMeterQuery.class), ImmutableMap.of())); - - // Init step for the store meterStore = new DistributedMeterStore(); - // Let's initialize some internal services of the store TestUtils.setField(meterStore, "storageService", new TestStorageService()); TestUtils.setField(meterStore, "driverService", driverService); - - // Inject TestApplicationId into the DistributedMeterStore serializer KryoNamespace.Builder testKryoBuilder = TestUtils.getField(meterStore, "APP_KRYO_BUILDER"); testKryoBuilder.register(TestApplicationId.class); Serializer testSerializer = Serializer.using(Lists.newArrayList(testKryoBuilder.build())); TestUtils.setField(meterStore, "serializer", testSerializer); - // Activate the store meterStore.activate(); - // Init step for the manager + manager = new MeterManager(); - // Let's initialize some internal services of the manager TestUtils.setField(manager, "store", meterStore); injectEventDispatcher(manager, new TestEventDispatcher()); manager.deviceService = deviceService; manager.mastershipService = new TestMastershipService(); manager.cfgService = new ComponentConfigAdapter(); manager.clusterService = new TestClusterService(); - // Init the reference of the registry registry = manager; - manager.driverService = driverService; - // Activate the manager Dictionary cfgDict = new Hashtable<>(); expect(componentContext.getProperties()).andReturn(cfgDict); replay(componentContext); manager.activate(componentContext); - // Initialize the test provider provider = new TestProvider(PID); - // Register the provider against the manager providerService = registry.register(provider); - // Verify register assertTrue("provider should be registered", registry.getProviders().contains(provider.id())); } @After public void tearDown() { - // Unregister provider registry.unregister(provider); - // Verify unregister assertFalse("provider should not be registered", registry.getProviders().contains(provider.id())); - // Deactivate manager manager.deactivate(); - // Remove event dispatcher injectEventDispatcher(manager, null); - // Deactivate store meterStore.deactivate(); } @@ -407,24 +356,18 @@ public void testDisableUserDefinedIndex() { */ @Test public void testAdd() { - // Init store initMeterStore(); - // Submit meter request manager.submit(m1Request.add()); - // Verify add + assertEquals("The meter was not added", 1, manager.getAllMeters().size()); assertEquals("The meter was not added", 1, manager.getMeters(did1).size()); - // Get Meter Meter installingMeter = manager.getMeter(did1, mid1); - // Verify add of installingMeter and pending add state assertThat(installingMeter, is(m1)); - // Verify pending add state assertThat(installingMeter.state(), is(MeterState.PENDING_ADD)); - // Let's simulate a working data-plane + pushMetrics(MeterOperation.Type.ADD, installingMeter); - // Get meter + Meter installedMeter = manager.getMeter(did1, mid1); - // Verify installation assertThat(installedMeter.state(), is(MeterState.ADDED)); assertEquals("The meter was not installed", 1, manager.getAllMeters().size()); assertEquals("The meter was not installed", 1, manager.getMeters(did1).size()); @@ -478,21 +421,16 @@ public void testWrongAddInUserDefinedIndexMode() { */ @Test public void testRemove() { - // Init store initMeterStore(); - // Submit meter request manager.submit(m1Request.add()); - // Withdraw meter manager.withdraw(m1Request.remove(), m1.id()); - // Get Meter + Meter withdrawingMeter = manager.getMeter(did1, mid1); - // Verify withdrawing assertThat(withdrawingMeter.state(), is(MeterState.PENDING_REMOVE)); assertEquals("The meter was not withdrawn", 1, manager.getAllMeters().size()); assertEquals("The meter was not withdrawn", 1, manager.getMeters(did1).size()); - // Let's simulate a working data-plane + pushMetrics(MeterOperation.Type.REMOVE, withdrawingMeter); - // Verify withdrawn assertNull(manager.getMeter(did1, mid1)); assertEquals("The meter was not removed", 0, manager.getAllMeters().size()); assertEquals("The meter was not removed", 0, manager.getMeters(did1).size()); @@ -525,32 +463,24 @@ public void testRemoveInUserDefinedIndexMode() { */ @Test public void testAddMultipleDevice() { - // Init store initMeterStore(); - // Submit meter 1 manager.submit(m1Request.add()); - // Submit meter 2 manager.submit(m2Request.add()); - // Verify add + assertEquals("The meter was not added", 2, manager.getAllMeters().size()); assertEquals("The meter was not added", 1, manager.getMeters(did1).size()); assertEquals("The meter was not added", 1, manager.getMeters(did2).size()); - // Get Meters Meter installingMeter1 = manager.getMeter(did1, mid1); Meter installingMeter2 = manager.getMeter(did2, mid1); - // Verify add of installingMeter assertThat(installingMeter1, is(m1)); assertThat(installingMeter2, is(m2)); - // Verify pending add state assertThat(installingMeter1.state(), is(MeterState.PENDING_ADD)); assertThat(installingMeter2.state(), is(MeterState.PENDING_ADD)); - // Let's simulate a working data-plane + pushMetrics(MeterOperation.Type.ADD, installingMeter1); pushMetrics(MeterOperation.Type.ADD, installingMeter2); - // Get meter Meter installedMeter1 = manager.getMeter(did1, mid1); Meter installedMeter2 = manager.getMeter(did2, mid1); - // Verify installation assertThat(installedMeter1.state(), is(MeterState.ADDED)); assertThat(installedMeter2.state(), is(MeterState.ADDED)); assertEquals("The meter was not installed", 2, manager.getAllMeters().size()); @@ -563,29 +493,22 @@ public void testAddMultipleDevice() { */ @Test public void testRemoveMultipleDevice() { - // Init store initMeterStore(); - // Submit meter 1 manager.submit(m1Request.add()); - // Submit meter 2 manager.submit(m2Request.add()); - // Withdraw meter manager.withdraw(m1Request.remove(), m1.id()); - // Withdraw meter manager.withdraw(m2Request.remove(), m2.id()); - // Get Meters + Meter withdrawingMeter1 = manager.getMeter(did1, mid1); Meter withdrawingMeter2 = manager.getMeter(did2, mid1); - // Verify withdrawing assertThat(withdrawingMeter1.state(), is(MeterState.PENDING_REMOVE)); assertThat(withdrawingMeter2.state(), is(MeterState.PENDING_REMOVE)); assertEquals("The meter was not withdrawn", 2, manager.getAllMeters().size()); assertEquals("The meter was not withdrawn", 1, manager.getMeters(did1).size()); assertEquals("The meter was not withdrawn", 1, manager.getMeters(did2).size()); - // Let's simulate a working data-plane + pushMetrics(MeterOperation.Type.REMOVE, withdrawingMeter1); pushMetrics(MeterOperation.Type.REMOVE, withdrawingMeter2); - // Verify withdrawn assertNull(manager.getMeter(did1, mid1)); assertNull(manager.getMeter(did2, mid1)); assertEquals("The meter was not removed", 0, manager.getAllMeters().size()); @@ -598,18 +521,15 @@ public void testRemoveMultipleDevice() { */ @Test public void testPurge() { - // Init store initMeterStore(); - // Submit meter request manager.submit(m1Request.add()); - // Verify submit + Meter submittingMeter = manager.getMeter(did1, mid1); assertThat(submittingMeter.state(), is(MeterState.PENDING_ADD)); assertEquals("The meter was not added", 1, manager.getAllMeters().size()); assertEquals("The meter was not added", 1, manager.getMeters(did1).size()); - // Purge the meters + manager.purgeMeters(did1); - // Verify purge assertNull(manager.getMeter(did1, mid1)); assertEquals("The meter was not purged", 0, manager.getAllMeters().size()); assertEquals("The meter was not purged", 0, manager.getMeters(did1).size()); @@ -620,9 +540,9 @@ public void testPurge() { */ @Test public void testAddFromMeterProgrammable() { - // Init store initMeterStore(); manager.submit(mProgrammableRequest.add()); + TestTools.assertAfter(500, () -> { assertEquals("The meter was not added", 1, manager.getAllMeters().size()); assertThat(manager.getMeter(PROGRAMMABLE_DID, MeterId.meterId(1)), is(mProgrammable)); @@ -634,10 +554,10 @@ public void testAddFromMeterProgrammable() { */ @Test public void testAddBatchFromMeterProgrammable() { - // Init store initMeterStore(); List operations = ImmutableList.of(new MeterOperation(mProgrammable, MeterOperation.Type.ADD)); manager.defaultProvider().performMeterOperation(PROGRAMMABLE_DID, new MeterOperations(operations)); + TestTools.assertAfter(500, () -> { assertEquals("The meter was not added", 1, meterOperations.size()); assertEquals("Wrong Meter Operation", meterOperations.get(0).meter().id(), mProgrammable.id()); @@ -650,11 +570,11 @@ public void testAddBatchFromMeterProgrammable() { */ @Test public void testGetFromMeterProgrammable() { - // Init store initMeterStore(); MeterDriverProvider fallback = (MeterDriverProvider) manager.defaultProvider(); testAddFromMeterProgrammable(); fallback.init(manager.deviceService, fallback.meterProviderService, manager.mastershipService, 1); + TestTools.assertAfter(2000, () -> { assertEquals("The meter was not added", 1, manager.getAllMeters().size()); Meter m = manager.getMeters(PROGRAMMABLE_DID).iterator().next(); @@ -745,7 +665,6 @@ public void testRemoveFromMeterProgrammable() { }); } - // Test cluster service private final class TestClusterService extends ClusterServiceAdapter { private ControllerNode local = new DefaultControllerNode(NID_LOCAL, LOCALHOST); @@ -819,7 +738,7 @@ public CompletableFuture performMeterOperation(MeterOperation meterOp) @Override public CompletableFuture> getMeters() { - //ADD METER + // ADD METER Collection meters = Lists.newArrayList(); DefaultMeter mProgrammableAdded = (DefaultMeter) mProgrammable; mProgrammableAdded.setState(MeterState.ADDED); @@ -834,7 +753,6 @@ public CompletableFuture> getMeters() { @Override public CompletableFuture> getMeterFeatures() { - //Currently unused. return CompletableFuture.completedFuture(Collections.emptySet()); } } @@ -847,16 +765,15 @@ protected TestProvider(ProviderId id) { @Override public void performMeterOperation(DeviceId deviceId, MeterOperations meterOps) { - //Currently unused. + } @Override public void performMeterOperation(DeviceId deviceId, MeterOperation meterOp) { - //Currently unused + } } - // Test mastership service private final class TestMastershipService extends MastershipServiceAdapter { @Override public NodeId getMasterFor(DeviceId deviceId) { diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 5b9252d9404..b94375cefa6 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -37,7 +37,6 @@ import org.onosproject.net.meter.MeterFailReason; import org.onosproject.net.meter.MeterFeatures; import org.onosproject.net.meter.MeterFeaturesFlag; -import org.onosproject.net.meter.MeterFeaturesKey; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterKey; import org.onosproject.net.meter.MeterOperation; @@ -115,13 +114,10 @@ public class DistributedMeterStore extends AbstractStore> availableMeterIds; - // Atomic counter map for generation of new identifiers; private static final String METERIDSTORE = "onos-meters-id-store"; private AtomicCounterMap meterIdGenerators; - // Serializer related objects private static final KryoNamespace.Builder APP_KRYO_BUILDER = KryoNamespace.newBuilder() .register(KryoNamespaces.API) .register(MeterKey.class) @@ -169,22 +165,20 @@ enum ReuseStrategy { @Activate public void activate() { - // Init meters map and setup the map listener meters = storageService.consistentMapBuilder() .withName(METERSTORE) .withSerializer(serializer).build(); meters.addListener(metersMapListener); metersMap = meters.asJavaMap(); - // Init meter features map + metersFeatures = storageService.eventuallyConsistentMapBuilder() .withName(METERFEATURESSTORE) .withTimestampProvider((key, features) -> new WallClockTimestamp()) .withSerializer(APP_KRYO_BUILDER).build(); metersFeatures.addListener(featuresMapListener); - // Init the map of the available ids set - // Set will be created when a new Meter Features is pushed to the store + availableMeterIds = new ConcurrentHashMap<>(); - // Init atomic map counters + meterIdGenerators = storageService.atomicCounterMapBuilder() .withName(METERIDSTORE) .withSerializer(Serializer.using(KryoNamespaces.API, @@ -207,14 +201,11 @@ public void deactivate() { @Override public CompletableFuture addOrUpdateMeter(Meter meter) { - // Verify integrity of the index checkArgument(validIndex(meter), "Meter index is not valid"); CompletableFuture future = new CompletableFuture<>(); MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); MeterData data = new MeterData(meter, null); - // Store the future related to the operation futures.put(key, future); - // Check if the meter exists try { meters.compute(key, (k, v) -> data); } catch (StorageException e) { @@ -226,26 +217,26 @@ public CompletableFuture addOrUpdateMeter(Meter meter) { return future; } - @Override - public CompletableFuture storeMeter(Meter meter) { - return addOrUpdateMeter(meter); - } - @Override public CompletableFuture deleteMeter(Meter meter) { - // Init steps CompletableFuture future = new CompletableFuture<>(); MeterKey key = MeterKey.key(meter.deviceId(), meter.meterCellId()); - // Store the future related to the operation futures.put(key, future); - // Create the meter data - MeterData data = new MeterData(meter, null); // Update the state of the meter. It will be pruned by observing // that it has been removed from the dataplane. try { - // If it does not exist in the system - if (meters.computeIfPresent(key, (k, v) -> data) == null) { - // Complete immediately + Versioned versionedData = meters.computeIfPresent(key, (k, v) -> { + DefaultMeter m = (DefaultMeter) v.meter(); + MeterState meterState = m.state(); + if (meterState == MeterState.PENDING_REMOVE) { + return v; + } + m.setState(meter.state()); + return new MeterData(m, v.reason().isPresent() ? v.reason().get() : null); + }); + // If it does not exist in the system, completes immediately + if (versionedData == null) { + futures.remove(key); future.complete(MeterStoreResult.success()); } } catch (StorageException e) { @@ -254,7 +245,6 @@ public CompletableFuture deleteMeter(Meter meter) { futures.remove(key); future.completeExceptionally(e); } - // Done, return the future return future; } @@ -300,15 +290,12 @@ public MeterStoreResult deleteMeterFeatures(DeviceId deviceId) { e.getMessage(), e); result = MeterStoreResult.fail(TIMEOUT); } - return result; } @Override public MeterStoreResult deleteMeterFeatures(Collection meterfeatures) { - // These store operations is treated as one single operation - // If one of them is failed, Fail is returned - // But the failed operation will not block the rest. + // Same logic of storeMeterFeatures MeterStoreResult result = MeterStoreResult.success(); for (MeterFeatures mf : meterfeatures) { try { @@ -386,20 +373,13 @@ public void failedMeter(MeterOperation op, MeterFailReason reason) { meters.computeIfPresent(key, (k, v) -> new MeterData(v.meter(), reason)); } - @Override - public void deleteMeterNow(Meter m) { - // This method is renamed in onos-2.5 - purgeMeter(m); - } - @Override public void purgeMeter(Meter m) { - // Once we receive the ack from the sb - // create the key and remove definitely the meter + // Once we receive the ack from the sb, create the key + // remove definitely the meter and free the id MeterKey key = MeterKey.key(m.deviceId(), m.meterCellId()); try { if (Versioned.valueOrNull(meters.remove(key)) != null) { - // Free the id MeterScope scope; if (m.meterCellId().type() == PIPELINE_INDEPENDENT) { PiMeterCellId piMeterCellId = (PiMeterCellId) m.meterCellId(); @@ -416,12 +396,6 @@ public void purgeMeter(Meter m) { } } - @Override - public void purgeMeter(DeviceId deviceId) { - // This method is renamed in onos-2.5 - purgeMeters(deviceId); - } - @Override public void purgeMeters(DeviceId deviceId) { List> metersPendingRemove = meters.stream() @@ -454,20 +428,13 @@ public boolean userDefinedIndexMode(boolean enable) { return userDefinedIndexMode; } - @Override - public long getMaxMeters(MeterFeaturesKey key) { - // Leverage the meter features to know the max id - // Create a Meter Table key with FeaturesKey's device and global scope - MeterTableKey meterTableKey = MeterTableKey.key(key.deviceId(), MeterScope.globalScope()); - return getMaxMeters(meterTableKey); - } - - private long getMaxMeters(MeterTableKey key) { - // Leverage the meter features to know the max id + protected long getMaxMeters(MeterTableKey key) { MeterFeatures features = metersFeatures.get(key); return features == null ? 0L : features.maxMeter(); } + // Validate index using the meter features, useful mainly + // when user defined index mode is enabled private boolean validIndex(Meter meter) { long index; MeterTableKey key; @@ -481,6 +448,7 @@ private boolean validIndex(Meter meter) { index = meterId.id(); key = MeterTableKey.key(meter.deviceId(), MeterScope.globalScope()); } else { + log.warn("Unable to validate index unsupported cell type {}", meter.meterCellId().type()); return false; } @@ -491,52 +459,44 @@ private boolean validIndex(Meter meter) { } private long getStartIndex(MeterTableKey key) { - // Leverage the meter features to know the start id - // Since we are using index now - // if there is no features related to the key - // -1 is returned MeterFeatures features = metersFeatures.get(key); return features == null ? -1L : features.startIndex(); } private long getEndIndex(MeterTableKey key) { - // Leverage the meter features to know the max id - // Since we are using index now - // if there is no features related to the key - // -1 is returned MeterFeatures features = metersFeatures.get(key); return features == null ? -1L : features.endIndex(); } - // queryMaxMeters is implemented in FullMetersAvailable behaviour. + // queryMaxMeters is implemented in MeterQuery behaviour implementations. private long queryMaxMeters(DeviceId device) { - // Get driver handler for this device DriverHandler handler = driverService.createHandler(device); - // If creation failed or the device does not have this behavior if (handler == null || !handler.hasBehaviour(MeterQuery.class)) { - // We cannot know max meter return 0L; } - // Get the behavior + + // FIXME architecturally this is not right, we should fallback to this + // behavior in the providers. Once we do that we can remove this code. MeterQuery query = handler.behaviour(MeterQuery.class); - // Insert a new available key set to the map + // This results to be necessary because the available ids sets are created + // in the meter features map listener if the device does not provide the meter + // feature this is the only chance to create this set. String setName = AVAILABLEMETERIDSTORE + "-" + device + "global"; MeterTableKey meterTableKey = MeterTableKey.key(device, MeterScope.globalScope()); insertAvailableKeySet(meterTableKey, setName); - // Return as max meter the result of the query + return query.getMaxMeters(); } private boolean updateMeterIdAvailability(MeterTableKey meterTableKey, MeterCellId id, boolean available) { - // Retrieve the set first DistributedSet keySet = availableMeterIds.get(meterTableKey); if (keySet == null) { - // A reusable set should be inserted when a features is pushed log.warn("Reusable Key set for device: {} scope: {} not found", meterTableKey.deviceId(), meterTableKey.scope()); return false; } + // According to available, make available or unavailable a meter key DeviceId deviceId = meterTableKey.deviceId(); return available ? keySet.add(MeterKey.key(deviceId, id)) : @@ -544,61 +504,45 @@ private boolean updateMeterIdAvailability(MeterTableKey meterTableKey, MeterCell } private MeterCellId getNextAvailableId(Set availableIds) { - // If there are no available ids if (availableIds.isEmpty()) { - // Just end the cycle return null; } - // If it is the first fit + if (reuseStrategy == FIRST_FIT || availableIds.size() == 1) { return availableIds.iterator().next(); } - // If it is random, get the size + + // If it is random, get the size and return a random element int size = availableIds.size(); - // Return a random element return Iterables.get(availableIds, RandomUtils.nextInt(size)); } - // Implements reuse strategy + // Implements reuse strategy of the meter cell ids private MeterCellId firstReusableMeterId(MeterTableKey meterTableKey) { - // Create a Table key and use it to retrieve the reusable meterCellId set DistributedSet keySet = availableMeterIds.get(meterTableKey); if (keySet == null) { - // A reusable set should be inserted when a features is pushed log.warn("Reusable Key set for device: {} scope: {} not found", meterTableKey.deviceId(), meterTableKey.scope()); return null; } - // Filter key related to device id, and reduce to meter ids + Set localAvailableMeterIds = keySet.stream() .filter(meterKey -> meterKey.deviceId().equals(meterTableKey.deviceId())) .map(MeterKey::meterCellId) .collect(Collectors.toSet()); - // Get next available id MeterCellId meterId = getNextAvailableId(localAvailableMeterIds); - // Iterate until there are items while (meterId != null) { - // If we are able to reserve the id if (updateMeterIdAvailability(meterTableKey, meterId, false)) { - // Just end return meterId; } - // Update the set localAvailableMeterIds.remove(meterId); - // Try another time meterId = getNextAvailableId(localAvailableMeterIds); } - // No reusable ids + // there are no available ids that can be reused return null; } - @Override - public MeterId allocateMeterId(DeviceId deviceId) { - // We use global scope for MeterId - return (MeterId) allocateMeterId(deviceId, MeterScope.globalScope()); - } - @Override public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { if (userDefinedIndexMode) { @@ -611,19 +555,16 @@ public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { // First, search for reusable key meterCellId = firstReusableMeterId(meterTableKey); if (meterCellId != null) { - // A reusable key is found return meterCellId; } // If there was no reusable meter id we have to generate a new value // using start and end index as lower and upper bound respectively. long startIndex = getStartIndex(meterTableKey); long endIndex = getEndIndex(meterTableKey); - // If the device does not give us MeterFeatures + // If the device does not give us MeterFeatures fallback to queryMeters if (startIndex == -1L || endIndex == -1L) { - // MeterFeatures couldn't be retrieved, fallback to queryMeters. - // Only meaningful to OpenFLow + // Only meaningful for OpenFlow today long maxMeters = queryMaxMeters(deviceId); - // If we don't know the max, cannot proceed if (maxMeters == 0L) { return null; } else { @@ -632,18 +573,16 @@ public MeterCellId allocateMeterId(DeviceId deviceId, MeterScope meterScope) { endIndex = maxMeters; } } - // Get a new value - // If the value is smaller than the start index, get another one + do { id = meterIdGenerators.getAndIncrement(meterTableKey); } while (id < startIndex); - // Check with the end index, and if the value is bigger, cannot proceed if (id > endIndex) { return null; } - // Done, return the value - // If we are using global scope, return a MeterId - // Else, return a PiMeterId + + // For backward compatibility if we are using global scope, + // return a MeterId, otherwise we create a PiMeterCellId if (meterScope.isGlobal()) { return MeterId.meterId(id); } else { @@ -658,9 +597,23 @@ public void freeMeterId(DeviceId deviceId, MeterId meterId) { freeMeterId(meterTableKey, meterId); } - private void freeMeterId(MeterTableKey meterTableKey, MeterCellId meterCellId) { + protected void freeMeterId(DeviceId deviceId, MeterCellId meterCellId) { + MeterTableKey meterTableKey; + if (meterCellId.type() == PIPELINE_INDEPENDENT) { + meterTableKey = MeterTableKey.key(deviceId, + MeterScope.of(((PiMeterCellId) meterCellId).meterId().id())); + } else if (meterCellId.type() == INDEX) { + meterTableKey = MeterTableKey.key(deviceId, MeterScope.globalScope()); + } else { + log.warn("Unable to free meter id unsupported cell type {}", meterCellId.type()); + return; + } + freeMeterId(meterTableKey, meterCellId); + } + + protected void freeMeterId(MeterTableKey meterTableKey, MeterCellId meterCellId) { if (userDefinedIndexMode) { - log.warn("Unable to free meter id when user defined index mode is enabled"); + log.debug("Unable to free meter id when user defined index mode is enabled"); return; } long index; @@ -671,13 +624,13 @@ private void freeMeterId(MeterTableKey meterTableKey, MeterCellId meterCellId) { MeterId meterId = (MeterId) meterCellId; index = meterId.id(); } else { + log.warn("Unable to free meter id unsupported cell type {}", meterCellId.type()); return; } // Avoid to free meter not allocated if (meterIdGenerators.get(meterTableKey) <= index) { return; } - // Update the availability updateMeterIdAvailability(meterTableKey, meterCellId, true); } @@ -728,12 +681,10 @@ public void event(MapEvent event) { } break; case REMOVE: - // Meter removal case futures.computeIfPresent(key, (k, v) -> { v.complete(MeterStoreResult.success()); return null; }); - // Finally notify the delegate notifyDelegate(new MeterEvent(MeterEvent.Type.METER_REMOVED, data.meter())); break; default: @@ -750,13 +701,11 @@ public void event(EventuallyConsistentMapEvent eve MeterFeatures meterFeatures = event.value(); switch (event.type()) { case PUT: - // Put a new available meter id set to the map String setName = AVAILABLEMETERIDSTORE + "-" + meterFeatures.deviceId() + meterFeatures.scope().id(); insertAvailableKeySet(meterTableKey, setName); break; case REMOVE: - // Remove the set DistributedSet set = availableMeterIds.remove(meterTableKey); if (set != null) { set.destroy(); diff --git a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java index 5268527fc91..ee4d75c0b48 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/meter/impl/DistributedMeterStoreTest.java @@ -37,7 +37,6 @@ import org.onosproject.net.meter.Meter; import org.onosproject.net.meter.MeterCellId; import org.onosproject.net.meter.MeterFeatures; -import org.onosproject.net.meter.MeterFeaturesKey; import org.onosproject.net.meter.MeterId; import org.onosproject.net.meter.MeterKey; import org.onosproject.net.meter.MeterScope; @@ -64,32 +63,30 @@ * Meter store tests. */ public class DistributedMeterStoreTest { - // Store under testing + private DistributedMeterStore meterStore; - // Device ids used during the tests private DeviceId did1 = did("1"); private DeviceId did2 = did("2"); private DeviceId did3 = did("3"); private DeviceId did4 = did("4"); - // Meter ids used during the tests private MeterId mid1 = MeterId.meterId(1); private MeterId mid2 = MeterId.meterId(2); private MeterId mid3 = MeterId.meterId(3); + private MeterId mid5 = MeterId.meterId(5); + private MeterId mid6 = MeterId.meterId(6); private MeterId mid10 = MeterId.meterId(10); private MeterCellId cid4 = PiMeterCellId.ofIndirect( PiMeterId.of("foo"), 4); private MeterCellId invalidCid = PiMeterCellId.ofIndirect( PiMeterId.of("foo"), 11); - // Bands used during the tests private Band b1 = DefaultBand.builder() .ofType(Band.Type.DROP) .withRate(500) .build(); - // Meters used during the tests private Meter m1 = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -97,7 +94,6 @@ public class DistributedMeterStoreTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - private Meter m2 = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID_2) @@ -105,7 +101,6 @@ public class DistributedMeterStoreTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - private Meter m3 = DefaultMeter.builder() .forDevice(did2) .fromApp(APP_ID_2) @@ -113,7 +108,6 @@ public class DistributedMeterStoreTest { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - private Meter m4 = DefaultMeter.builder() .forDevice(did3) .fromApp(APP_ID) @@ -122,7 +116,6 @@ public class DistributedMeterStoreTest { .withBands(Collections.singletonList(b1)) .build(); - // Meter features used during the tests private MeterFeatures mef1 = DefaultMeterFeatures.builder().forDevice(did1) .withMaxMeters(3L) .withBandTypes(new HashSet<>()) @@ -155,33 +148,26 @@ public class DistributedMeterStoreTest { @Before public void setup() { - // Init step meterStore = new DistributedMeterStore(); - // Let's initialize some internal services + TestUtils.setField(meterStore, "storageService", new TestStorageService()); TestUtils.setField(meterStore, "driverService", new TestDriverService()); - - // Inject TestApplicationId into the DistributedMeterStore serializer KryoNamespace.Builder testKryoBuilder = TestUtils.getField(meterStore, "APP_KRYO_BUILDER"); testKryoBuilder.register(TestApplicationId.class); Serializer testSerializer = Serializer.using(Lists.newArrayList(testKryoBuilder.build())); TestUtils.setField(meterStore, "serializer", testSerializer); - // Activate the store meterStore.activate(); } @After public void tearDown() { - // Deactivate the store meterStore.deactivate(); } private void initMeterStore(boolean enableUserDefinedIndex) { meterStore.userDefinedIndexMode(enableUserDefinedIndex); - // Let's store feature for device 1 meterStore.storeMeterFeatures(mef1); - // Let's store feature for device 2 meterStore.storeMeterFeatures(mef2); meterStore.storeMeterFeatures(mef3); } @@ -191,14 +177,10 @@ private void initMeterStore(boolean enableUserDefinedIndex) { */ @Test public void testStoreMeterFeatures() { - // Let's store feature for device 1 - meterStore.storeMeterFeatures(mef1); - // Verify store meter features - assertThat(meterStore.getMaxMeters(MeterFeaturesKey.key(did1)), is(3L)); - // Let's store feature for device 1 - meterStore.storeMeterFeatures(mef2); - // Verify store meter features - assertThat(meterStore.getMaxMeters(MeterFeaturesKey.key(did2)), is(10L)); + initMeterStore(false); + + assertThat(meterStore.getMaxMeters(MeterTableKey.key(did1, MeterScope.globalScope())), is(3L)); + assertThat(meterStore.getMaxMeters(MeterTableKey.key(did2, MeterScope.globalScope())), is(10L)); } /** @@ -206,14 +188,11 @@ public void testStoreMeterFeatures() { */ @Test public void testDeleteMeterFeatures() { - // Let's store feature for device 1 - meterStore.storeMeterFeatures(mef1); - // Verify store meter features - assertThat(meterStore.getMaxMeters(MeterFeaturesKey.key(did1)), is(3L)); - // Let's delete the features + initMeterStore(false); + assertThat(meterStore.getMaxMeters(MeterTableKey.key(did1, MeterScope.globalScope())), is(3L)); + meterStore.deleteMeterFeatures(did1); - // Verify delete meter features - assertThat(meterStore.getMaxMeters(MeterFeaturesKey.key(did1)), is(0L)); + assertThat(meterStore.getMaxMeters(MeterTableKey.key(did1, MeterScope.globalScope())), is(0L)); } /** @@ -221,12 +200,10 @@ public void testDeleteMeterFeatures() { */ @Test public void testAllocateId() { - // Init the store initMeterStore(false); - // Allocate a meter id and verify is equal to mid1 - assertThat(mid1, is(meterStore.allocateMeterId(did1))); - // Allocate a meter id and verify is equal to mid2 - assertThat(mid2, is(meterStore.allocateMeterId(did1))); + + assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + assertThat(mid2, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); } /** @@ -234,18 +211,16 @@ public void testAllocateId() { */ @Test public void testFreeId() { - // Init the store initMeterStore(false); - // Allocate a meter id and verify is equal to mid1 - assertThat(mid1, is(meterStore.allocateMeterId(did1))); - // Free the above id + assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + + // Verify reuse strategy meterStore.freeMeterId(did1, mid1); - // Allocate a meter id and verify is equal to mid1 - assertThat(mid1, is(meterStore.allocateMeterId(did1))); - // Free an id not allocated + assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + + // Following free does not have effect meterStore.freeMeterId(did1, mid10); - // Allocate a meter id and verify is equal to mid2 - assertThat(mid2, is(meterStore.allocateMeterId(did1))); + assertThat(mid2, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); } /** @@ -253,56 +228,39 @@ public void testFreeId() { */ @Test public void testReuseId() { - // Init the store initMeterStore(false); - // Reserve id 1 - MeterId meterIdOne = meterStore.allocateMeterId(did2); - // Free the above id + + MeterCellId meterIdOne = meterStore.allocateMeterId(did2, MeterScope.globalScope()); meterStore.freeMeterId(did2, meterIdOne); - // Start an async reservation - CompletableFuture future = CompletableFuture.supplyAsync( - () -> meterStore.allocateMeterId(did2) + CompletableFuture future = CompletableFuture.supplyAsync( + () -> meterStore.allocateMeterId(did2, MeterScope.globalScope()) ); - // Start another reservation - MeterId meterIdTwo = meterStore.allocateMeterId(did2); + MeterCellId meterIdTwo = meterStore.allocateMeterId(did2, MeterScope.globalScope()); try { meterIdOne = future.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } - // Ids should be different, otherwise we had clash in the store assertNotEquals("Ids should be different", meterIdOne, meterIdTwo); - // Free the above id meterStore.freeMeterId(did1, meterIdOne); - // Free the above id meterStore.freeMeterId(did1, meterIdTwo); - // Reserve id 1 - meterIdOne = meterStore.allocateMeterId(did2); - // Reserve id 2 - meterStore.allocateMeterId(did2); - // Reserve id 3 - MeterId meterIdThree = meterStore.allocateMeterId(did2); - // Reserve id 4 - MeterId meterIdFour = meterStore.allocateMeterId(did2); - // Free the above id + meterIdOne = meterStore.allocateMeterId(did2, MeterScope.globalScope()); + meterStore.allocateMeterId(did2, MeterScope.globalScope()); + MeterCellId meterIdThree = meterStore.allocateMeterId(did2, MeterScope.globalScope()); + MeterCellId meterIdFour = meterStore.allocateMeterId(did2, MeterScope.globalScope()); meterStore.freeMeterId(did1, meterIdOne); - // Free the above id meterStore.freeMeterId(did1, meterIdThree); - // Free the above id meterStore.freeMeterId(did1, meterIdFour); - // Start an async reservation future = CompletableFuture.supplyAsync( - () -> meterStore.allocateMeterId(did2) + () -> meterStore.allocateMeterId(did2, MeterScope.globalScope()) ); - // Start another reservation - MeterId meterAnotherId = meterStore.allocateMeterId(did2); + MeterCellId meterAnotherId = meterStore.allocateMeterId(did2, MeterScope.globalScope()); try { meterAnotherId = future.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } - // Ids should be different, otherwise we had clash in the store assertNotEquals("Ids should be different", meterAnotherId, meterIdOne); } @@ -311,12 +269,10 @@ public void testReuseId() { */ @Test public void testQueryMeters() { - // Init the store initMeterStore(false); - // Let's test queryMeters - assertThat(mid1, is(meterStore.allocateMeterId(did3))); - // Let's test queryMeters error - assertNull(meterStore.allocateMeterId(did4)); + + assertThat(mid1, is(meterStore.allocateMeterId(did3, MeterScope.globalScope()))); + assertNull(meterStore.allocateMeterId(did4, MeterScope.globalScope())); } /** @@ -324,16 +280,12 @@ public void testQueryMeters() { */ @Test public void testMaxMeterError() { - // Init the store initMeterStore(false); - // Reserve id 1 - assertThat(mid1, is(meterStore.allocateMeterId(did1))); - // Reserve id 2 - assertThat(mid2, is(meterStore.allocateMeterId(did1))); - // Reserve id 3 - assertThat(mid3, is(meterStore.allocateMeterId(did1))); - // Max meter error - assertNull(meterStore.allocateMeterId(did1)); + + assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + assertThat(mid2, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + assertThat(mid3, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); + assertNull(meterStore.allocateMeterId(did1, MeterScope.globalScope())); } /** @@ -341,13 +293,11 @@ public void testMaxMeterError() { */ @Test public void testStoreMeter() { - // Init the store initMeterStore(false); - // Simulate the allocation of an id - MeterId idOne = meterStore.allocateMeterId(did1); - // Verify the allocation + + MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope()); assertThat(mid1, is(idOne)); - // Let's create a meter + Meter meterOne = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -355,13 +305,9 @@ public void testStoreMeter() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); - // Store the meter - meterStore.storeMeter(meterOne); - // Let's create meter key + meterStore.addOrUpdateMeter(meterOne); MeterKey meterKey = MeterKey.key(did1, mid1); - // Verify the store assertThat(1, is(meterStore.getAllMeters().size())); assertThat(1, is(meterStore.getAllMeters(did1).size())); assertThat(m1, is(meterStore.getMeter(meterKey))); @@ -372,13 +318,11 @@ public void testStoreMeter() { */ @Test public void testDeleteMeter() { - // Init the store initMeterStore(false); - // Simulate the allocation of an id - MeterId idOne = meterStore.allocateMeterId(did1); - // Verify the allocation + + MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope()); assertThat(mid1, is(idOne)); - // Let's create a meter + Meter meterOne = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -386,31 +330,23 @@ public void testDeleteMeter() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); - // Store the meter - meterStore.storeMeter(meterOne); - // Set the state + meterStore.addOrUpdateMeter(meterOne); ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE); - // Let's create meter key MeterKey meterKey = MeterKey.key(did1, mid1); - // Delete meter meterStore.deleteMeter(meterOne); - // Start an async delete, simulating the operation of the provider CompletableFuture future = CompletableFuture.runAsync( - () -> meterStore.deleteMeterNow(meterOne) + () -> meterStore.purgeMeter(meterOne) ); - // Let's wait try { future.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } - // Verify delete assertThat(0, is(meterStore.getAllMeters().size())); assertThat(0, is(meterStore.getAllMeters(did1).size())); assertNull(meterStore.getMeter(meterKey)); - assertThat(mid1, is(meterStore.allocateMeterId(did1))); + assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope()))); } /** @@ -418,13 +354,10 @@ public void testDeleteMeter() { */ @Test public void testNoDeleteMeter() { - // Init the store initMeterStore(false); - // Simulate the allocation of an id - MeterId idOne = meterStore.allocateMeterId(did1); - // Create the key + + MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope()); MeterKey keyOne = MeterKey.key(did1, idOne); - // Let's create a meter Meter meterOne = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -432,11 +365,8 @@ public void testNoDeleteMeter() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE); - // Delete meter meterStore.deleteMeter(meterOne); - // Verify No delete assertThat(0, is(meterStore.getAllMeters().size())); assertThat(0, is(meterStore.getAllMeters(did1).size())); assertNull(meterStore.getMeter(keyOne)); @@ -446,11 +376,10 @@ public void testNoDeleteMeter() { * Test purge meter. */ @Test - public void testPurgeMeter() { - // add the meter + public void testPurgeMeters() { testStoreMeter(); - meterStore.purgeMeter(did1); - // Verify delete + + meterStore.purgeMeters(did1); MeterKey keyOne = MeterKey.key(did1, mid1); assertThat(0, is(meterStore.getAllMeters().size())); assertThat(0, is(meterStore.getAllMeters(did1).size())); @@ -461,20 +390,18 @@ public void testPurgeMeter() { * Test purge meter given device and application. */ @Test - public void testPurgeMeterDeviceAndApp() { - // Init the store + public void testPurgeMetersDeviceAndApp() { initMeterStore(false); - // add the meters + ((DefaultMeter) m1).setState(MeterState.PENDING_ADD); ((DefaultMeter) m2).setState(MeterState.PENDING_ADD); ((DefaultMeter) m3).setState(MeterState.PENDING_ADD); - meterStore.storeMeter(m1); - meterStore.storeMeter(m2); - meterStore.storeMeter(m3); + meterStore.addOrUpdateMeter(m1); + meterStore.addOrUpdateMeter(m2); + meterStore.addOrUpdateMeter(m3); assertThat(3, is(meterStore.getAllMeters().size())); meterStore.purgeMeters(did1, APP_ID_2); - // Verify delete MeterKey keyTwo = MeterKey.key(did1, mid2); assertThat(2, is(meterStore.getAllMeters().size())); assertThat(1, is(meterStore.getAllMeters(did1).size())); @@ -487,14 +414,10 @@ public void testPurgeMeterDeviceAndApp() { */ @Test public void testGetMetersImmutability() { - // Init the store initMeterStore(false); - // Simulate the allocation of an id - MeterId idOne = meterStore.allocateMeterId(did1); - // Verify the allocation + MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope()); assertThat(mid1, is(idOne)); - // Let's create a meter Meter meterOne = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -502,21 +425,16 @@ public void testGetMetersImmutability() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); - // Store the meter - meterStore.storeMeter(meterOne); + meterStore.addOrUpdateMeter(meterOne); - // Verify the immutability Collection meters = meterStore.getAllMeters(); Collection metersDevice = meterStore.getAllMeters(did1); assertThat(1, is(meters.size())); assertThat(1, is(metersDevice.size())); - MeterId idTwo = meterStore.allocateMeterId(did1); - // Verify the allocation + MeterCellId idTwo = meterStore.allocateMeterId(did1, MeterScope.globalScope()); assertThat(mid2, is(idTwo)); - // Let's create a meter Meter meterTwo = DefaultMeter.builder() .forDevice(did1) .fromApp(APP_ID) @@ -524,14 +442,11 @@ public void testGetMetersImmutability() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterTwo).setState(MeterState.PENDING_ADD); - // Store the meter - meterStore.storeMeter(meterTwo); + meterStore.addOrUpdateMeter(meterTwo); assertThat(1, is(meters.size())); assertThat(1, is(metersDevice.size())); - meters = meterStore.getAllMeters(); metersDevice = meterStore.getAllMeters(did1); assertThat(2, is(meters.size())); @@ -544,6 +459,7 @@ public void testGetMetersImmutability() { @Test(expected = IllegalArgumentException.class) public void testInvalidCellId() { initMeterStore(true); + // MF defines an end index equals to 10 Meter meterBad = DefaultMeter.builder() .forDevice(did3) @@ -553,7 +469,7 @@ public void testInvalidCellId() { .withBands(Collections.singletonList(b1)) .build(); ((DefaultMeter) meterBad).setState(MeterState.PENDING_ADD); - meterStore.storeMeter(meterBad); + meterStore.addOrUpdateMeter(meterBad); } /** @@ -562,6 +478,7 @@ public void testInvalidCellId() { @Test public void testEnableUserDefinedIndex() { initMeterStore(false); + assertTrue(meterStore.userDefinedIndexMode(true)); } @@ -571,6 +488,7 @@ public void testEnableUserDefinedIndex() { @Test public void testInvalidEnableUserDefinedIndex() { testStoreMeter(); + assertFalse(meterStore.userDefinedIndexMode(true)); } @@ -580,6 +498,7 @@ public void testInvalidEnableUserDefinedIndex() { @Test public void testDisableUserDefinedIndex() { initMeterStore(true); + assertFalse(meterStore.userDefinedIndexMode(false)); } @@ -589,7 +508,7 @@ public void testDisableUserDefinedIndex() { @Test public void testStoreMeterInUserDefinedIndexMode() { initMeterStore(true); - // Let's create a meter + Meter meterOne = DefaultMeter.builder() .forDevice(did3) .fromApp(APP_ID) @@ -597,13 +516,9 @@ public void testStoreMeterInUserDefinedIndexMode() { .withUnit(Meter.Unit.KB_PER_SEC) .withBands(Collections.singletonList(b1)) .build(); - // Set the state ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); - // Store the meter - meterStore.storeMeter(meterOne); - // Let's create meter key + meterStore.addOrUpdateMeter(meterOne); MeterKey meterKey = MeterKey.key(did3, cid4); - // Verify the store assertThat(1, is(meterStore.getAllMeters().size())); assertThat(1, is(meterStore.getAllMeters(did3).size())); assertThat(m4, is(meterStore.getMeter(meterKey))); @@ -615,6 +530,7 @@ public void testStoreMeterInUserDefinedIndexMode() { @Test public void testInvalidDisableUserDefinedIndex() { testStoreMeterInUserDefinedIndexMode(); + assertTrue(meterStore.userDefinedIndexMode(false)); } @@ -624,7 +540,8 @@ public void testInvalidDisableUserDefinedIndex() { @Test public void testAllocateIdInUserDefinedIndexMode() { initMeterStore(true); - assertNull(meterStore.allocateMeterId(did1)); + + assertNull(meterStore.allocateMeterId(did1, MeterScope.globalScope())); } /** @@ -633,7 +550,7 @@ public void testAllocateIdInUserDefinedIndexMode() { @Test public void testFreeIdInUserMode() { initMeterStore(true); - // Free the id and expect not being available + meterStore.freeMeterId(did1, mid1); MeterTableKey globalKey = MeterTableKey.key(did1, MeterScope.globalScope()); assertNotNull(meterStore.availableMeterIds.get(globalKey)); @@ -646,6 +563,7 @@ public void testFreeIdInUserMode() { @Test public void testDeleteMeterInUserDefinedIndexMode() { initMeterStore(true); + Meter meterOne = DefaultMeter.builder() .forDevice(did3) .fromApp(APP_ID) @@ -654,7 +572,7 @@ public void testDeleteMeterInUserDefinedIndexMode() { .withBands(Collections.singletonList(b1)) .build(); ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD); - meterStore.storeMeter(meterOne); + meterStore.addOrUpdateMeter(meterOne); ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE); MeterKey meterKey = MeterKey.key(did3, cid4); @@ -676,7 +594,6 @@ public void testDeleteMeterInUserDefinedIndexMode() { assertTrue(meterStore.availableMeterIds.get(globalKey).isEmpty()); } - // Test class for driver service. private class TestDriverService extends DriverServiceAdapter { @Override public DriverHandler createHandler(DeviceId deviceId, String... credentials) { @@ -684,7 +601,6 @@ public DriverHandler createHandler(DeviceId deviceId, String... credentials) { } } - // Test class for driver handler. private class TestDriverHandler implements DriverHandler { @Override @@ -714,7 +630,6 @@ public boolean hasBehaviour(Class behaviourClass) { } } - // Test meter query private class TestMeterQuery implements MeterQuery { @Override diff --git a/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java index 1a1ddd6d72b..8d8c4503fdc 100644 --- a/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java +++ b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoMeterProgrammable.java @@ -38,6 +38,13 @@ public boolean isSimilar(PiMeterCellConfig onosMeter, PiMeterCellConfig deviceMe final PiMeterBand onosPeakBand = onosMeter.peakBand(); final PiMeterBand deviceCommittedBand = deviceMeter.committedBand(); final PiMeterBand devicePeakBand = deviceMeter.peakBand(); + + // Fail fast, this can easily happen if we send a write very + // close to a read, read can still return the default config + if (deviceCommittedBand == null || devicePeakBand == null) { + return false; + } + final long onosCir = onosCommittedBand.rate(); final long onosCburst = onosCommittedBand.burst(); final long onosPir = onosPeakBand.rate(); diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index b903fa3b5b8..223089319d2 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -220,13 +220,14 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { log.warn("Meter Cell Config obtained from device {} is different from " + "one in in translation store: device={}, store=Default", deviceId, config); } else { - log.debug("Configs obtained from device: {} and present in the store are default, " + - "skipping the forge section", deviceId); + log.debug("Configs for {} obtained from device: {} and from the store are default, " + + "skipping the forge section", config.cellId(), deviceId); } return null; } - // The config is not consistent + // The config is not consistent. MeterProgrammable should remember + // that config from devices can be default which means no band if (!isSimilar(translatedEntity.get().translated(), config)) { log.warn("Meter Cell Config obtained from device {} is different from " + "one in in translation store: device={}, store={}", @@ -243,7 +244,6 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { Meter original = translatedEntity.get().original(); // Forge a meter with MeterCellId, Bands and DeviceId using the original value. - // Other values are not required because we cannot retrieve them from the south DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() .withBands(original.bands()) .withCellId(original.meterCellId()) diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java index f341bed5776..0f423a4e6e2 100644 --- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java +++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java @@ -32,7 +32,6 @@ import org.onosproject.net.pi.model.PiMeterId; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.rest.AbstractWebResource; -import org.slf4j.Logger; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -51,7 +50,6 @@ import static org.onlab.util.Tools.nullIsNotFound; import static org.onlab.util.Tools.readTreeFromStream; -import static org.slf4j.LoggerFactory.getLogger; /** * Query and program meter rules. @@ -62,7 +60,6 @@ public class MetersWebResource extends AbstractWebResource { @Context private UriInfo uriInfo; - private final Logger log = getLogger(getClass()); private static final String DEVICE_INVALID = "Invalid deviceId in meter creation request"; private static final String METER_NOT_FOUND = "Meter is not found for "; From 6bfdeb3215247561313a083d4131fc77d9c3792e Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 16 Sep 2021 15:03:41 +0200 Subject: [PATCH 125/235] Protect event handler from the exceptions Change-Id: I8c7b68f4eff1460e02dd4cc01b7d655a5d7ad581 --- .../onosproject/net/group/impl/GroupDriverProvider.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java b/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java index 1092d8da34d..51f0420757e 100644 --- a/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java +++ b/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java @@ -130,8 +130,12 @@ private void pollGroups() { } private void pollDeviceGroups(DeviceId deviceId) { - Collection groups = getGroupProgrammable(deviceId).getGroups(); - groupProviderService.pushGroupMetrics(deviceId, groups); + try { + Collection groups = getGroupProgrammable(deviceId).getGroups(); + groupProviderService.pushGroupMetrics(deviceId, groups); + } catch (Exception e) { + log.warn("Exception thrown while polling groups from {}", deviceId, e); + } } private GroupProgrammable getGroupProgrammable(DeviceId deviceId) { From 589398d34b6d22baffaf2ec1b1319195bb01ee47 Mon Sep 17 00:00:00 2001 From: Matteo Scandolo Date: Thu, 16 Sep 2021 08:35:43 -0700 Subject: [PATCH 126/235] Bumping onos-maven-plugin version in onos-dependencies Change-Id: I45a09565196482f057f5e9e0fdc0e926ed2914eb (cherry picked from commit cabf6f84272b2b104f8d517f9994c7d845d992dd) --- tools/package/dependencies/template.pom | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/package/dependencies/template.pom b/tools/package/dependencies/template.pom index a5aac3a1164..618f6fd62a0 100644 --- a/tools/package/dependencies/template.pom +++ b/tools/package/dependencies/template.pom @@ -274,7 +274,7 @@ onos-maven-plugin - 2.2.1 + 2.4.0 cfg From b0b93ac609e7860d5fd15703a50a0180fbf7a176 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Mon, 13 Sep 2021 12:37:36 +0200 Subject: [PATCH 127/235] [VOL-4343] Processing status of ports in order with mastership and connection/disconnection to avoid inconsisten state Change-Id: I731866b358fd4b6a7cfd296051e11f3d8690c5a7 --- .../net/device/impl/DeviceManager.java | 3 +- .../controller/impl/OFChannelHandler.java | 144 +++++++++--------- 2 files changed, 77 insertions(+), 70 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index 0ed09e534f4..53a312dda0f 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -628,7 +628,8 @@ public void deviceDisconnected(DeviceId deviceId) { checkNotNull(deviceId, DEVICE_ID_NULL); checkValidity(); deviceLocalStatus.put(deviceId, new LocalStatus(false, Instant.now())); - log.info("Device {} disconnected from this node", deviceId); + log.info("Device {} disconnected from this node: {}", deviceId, + clusterService.getLocalNode().id()); List descs = store.getPortDescriptions(provider().id(), deviceId) .map(desc -> ensurePortEnabledState(desc, false)) diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java index 84d9deba1ee..1b0a449baf2 100644 --- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java +++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java @@ -19,10 +19,12 @@ import static java.util.concurrent.Executors.newSingleThreadExecutor; import static org.onlab.packet.Ethernet.TYPE_BSN; import static org.onlab.packet.Ethernet.TYPE_LLDP; +import static org.onlab.util.GroupedThreadFactory.groupedThreadFactory; import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.openflow.controller.Dpid.uri; import java.io.IOException; +import java.io.UncheckedIOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; @@ -44,10 +46,13 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import org.onlab.util.GroupedThreadFactory; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.onlab.osgi.DefaultServiceDirectory; @@ -197,7 +202,6 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter private List> messageClassifiersMapProducer = new CopyOnWriteArrayList>(); - /** * Lock held by take, poll, etc. */ @@ -213,7 +217,6 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter */ private final AtomicInteger totalCount = new AtomicInteger(); - /** * Single thread executor for OFMessage dispatching. * @@ -236,10 +239,12 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter private final Deque dispatchBacklog; /** - * Port Status executor to offload from the main thread the processing of port - * status OF messages. + * Executor for runtime status events to offload from the main thread the + * processing of port status, mastership and connection OF messages. + * Executor is instantiated as a single thread executor guaranteeing processing + * of device status messages in order. */ - protected ExecutorService portStatusExecutor; + protected ExecutorService runtimeStatusExecutor; /** * Create a new unconnected OFChannelHandler. @@ -252,8 +257,17 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter this.pendingPortStatusMsg = new CopyOnWriteArrayList<>(); this.portDescReplies = new ArrayList<>(); duplicateDpidFound = Boolean.FALSE; - portStatusExecutor = newSingleThreadExecutor( - groupedThreads("onos/of-channel-handler", "port-status-%d", log)); + String groupName = "onos/of-channel-handler"; + String pattern = "runtime-status-%d"; + ThreadFactory factory = new ThreadFactoryBuilder() + .setThreadFactory(groupedThreadFactory(groupName)) + .setNameFormat(groupName.replace(GroupedThreadFactory.DELIMITER, "-") + "-" + pattern) + .setUncaughtExceptionHandler((t, e) -> { + log.error("Exception on " + t.getName(), e); + throw new UncheckedIOException(new IOException(e)); + }).build(); + runtimeStatusExecutor = newSingleThreadExecutor( + factory); //Initialize queues and classifiers dispatchBacklog = new LinkedBlockingDeque<>(BACKLOG_READ_BUFFER_DEFAULT); for (int i = 0; i < NUM_OF_QUEUES; i++) { @@ -267,15 +281,11 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter } } - - // XXX S consider if necessary public void disconnectSwitch() { sw.disconnectSwitch(); } - - //************************* // Channel State Machine //************************* @@ -376,7 +386,6 @@ void processOFPortStatus(OFChannelHandler h, OFPortStatus m) } }, - /** * We are waiting for a features reply message. Once we receive it, the * behavior depends on whether this is a 1.0 or 1.3 switch. For 1.0, @@ -570,7 +579,6 @@ void processOFPortStatus(OFChannelHandler h, OFPortStatus m) } }, - /** * We are waiting for a OFDescriptionStat message from the switch. * Once we receive any stat message we try to parse it. If it's not @@ -675,7 +683,6 @@ void processOFPortStatus(OFChannelHandler h, OFPortStatus m) } }, - /** * We are waiting for the respective switch driver to complete its * configuration. Notice that we do not consider this to be part of the main @@ -692,8 +699,6 @@ void processOFError(OFChannelHandler h, OFErrorMsg m) // will never be called. We override processOFMessage } - - @Override void processOFMessage(OFChannelHandler h, OFMessage m) throws IOException, SwitchStateException { @@ -827,7 +832,6 @@ void processIdle(OFChannelHandler h) throws IOException { } }, - /** * This controller is in MASTER role for this switch. We enter this state * after requesting and winning control from the global registry. @@ -846,20 +850,19 @@ void processOFError(OFChannelHandler h, OFErrorMsg m) throws IOException, SwitchStateException { // if we get here, then the error message is for something else if (m.getErrType() == OFErrorType.BAD_REQUEST && - (((OFBadRequestErrorMsg) m).getCode() == - OFBadRequestCode.EPERM || - ((OFBadRequestErrorMsg) m).getCode() == - OFBadRequestCode.IS_SLAVE)) { + (((OFBadRequestErrorMsg) m).getCode() == OFBadRequestCode.EPERM || + ((OFBadRequestErrorMsg) m).getCode() == OFBadRequestCode.IS_SLAVE)) { // We are the master controller and the switch returned // a permission error. This is a likely indicator that - // the switch thinks we are slave. Reassert our - // role + // the switch thinks we are slave. Reassert our role // FIXME: this could be really bad during role transitions // if two controllers are master (even if its only for // a brief period). We might need to see if these errors // persist before we reassert - - h.sw.reassertRole(); + // Scheduling in the executor to keep in line with other status events. + h.runtimeStatusExecutor.submit(() -> { + h.sw.reassertRole(); + }); } else if (m.getErrType() == OFErrorType.FLOW_MOD_FAILED && ((OFFlowModFailedErrorMsg) m).getCode() == OFFlowModFailedCode.ALL_TABLES_FULL) { @@ -910,32 +913,39 @@ void processOFExperimenter(OFChannelHandler h, OFExperimenter m) @Override void processOFRoleReply(OFChannelHandler h, OFRoleReply m) throws SwitchStateException { - h.sw.handleRole(m); + h.runtimeStatusExecutor.execute(() -> { + try { + h.sw.handleRole(m); + } catch (SwitchStateException e) { + log.error("SwitchStateException while processing " + + "role reply message {}", m, e); + log.error("Disconnecting switch {} due to switch state error: {}", + h.getSwitchInfoString(), e.getMessage()); + h.channel.close(); + } + }); } @Override void processOFPortStatus(OFChannelHandler h, OFPortStatus m) throws SwitchStateException { // Handing over processing of port status messages to a thread to avoid - // getting blocked on the main thread and resulting other OF - // message being delayed. - // Ordering of the port status messages is guaranteed by portStatsExecutor - // being a single threaded executor. - // This executor will execute concurrently to the netty thread; - // meaning that the order is no more guaranteed like it was in the - // past between port status handling and the other events handled - // inline to the netty thread. - // This also remove guarantees of ordered processing of ROLE_CHANGED - // during active state, this should have no effect given that mastership - // is ignored here: https://github.com/opennetworkinglab/onos/blob/master/ - // protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ - // driver/AbstractOpenFlowSwitch.java#L279 - h.portStatusExecutor.submit(() -> { + // getting blocked on the main thread and resulting other OF message being delayed. + // Ordering of the status messages is guaranteed by runtimeStatsExecutor being a single + // threaded executor. This executor will execute concurrently to the netty thread; meaning + // that the order is no more guaranteed like it was in the past between different + // status handling messages and other messages: statistics (port, flows, meters, groups) + // barriers, idle, features, packet-ins handled inline to the netty thread. This executor + // will only apply to messages during the ACTIVE state of the connection. + h.runtimeStatusExecutor.execute(() -> { try { handlePortStatusMessage(h, m, true); } catch (SwitchStateException e) { log.error("SwitchStateException while processing " + "port status message {}", m, e); + log.error("Disconnecting switch {} due to switch state error: {}", + h.getSwitchInfoString(), e.getMessage()); + h.channel.close(); } }); //h.dispatchMessage(m); @@ -1079,8 +1089,6 @@ protected void disconnectDuplicate(OFChannelHandler h) { h.channel.disconnect(); } - - /** * Handles all pending port status messages before a switch is declared * activated in MASTER or EQUAL role. Note that since this handling @@ -1155,7 +1163,6 @@ protected void handlePortStatusMessage(OFChannelHandler h, OFPortStatus m, h.sw.handleMessage(m); } - /** * Process an OF message received on the channel and * update state accordingly. @@ -1359,8 +1366,6 @@ void processIdle(OFChannelHandler h) throws IOException { } } - - //************************* // Channel handler methods //************************* @@ -1400,7 +1405,6 @@ public void channelActive(ChannelHandlerContext ctx) @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - log.info("Switch disconnected callback for sw:{}. Cleaning up ...", getSwitchInfoString()); @@ -1409,29 +1413,31 @@ public void channelInactive(ChannelHandlerContext ctx) dispatcher = null; } - if (thisdpid != 0) { - if (!duplicateDpidFound) { - // if the disconnected switch (on this ChannelHandler) - // was not one with a duplicate-dpid, it is safe to remove all - // state for it at the controller. Notice that if the disconnected - // switch was a duplicate-dpid, calling the method below would clear - // all state for the original switch (with the same dpid), - // which we obviously don't want. - log.info("{}:removal called", getSwitchInfoString()); - if (sw != null) { - sw.removeConnectedSwitch(); - } - } else { - // A duplicate was disconnected on this ChannelHandler, - // this is the same switch reconnecting, but the original state was - // not cleaned up - XXX check liveness of original ChannelHandler - log.info("{}:duplicate found", getSwitchInfoString()); - duplicateDpidFound = Boolean.FALSE; - } - } else { - log.warn("no dpid in channelHandler registered for " - + "disconnected switch {}", getSwitchInfoString()); - } + if (thisdpid != 0) { + if (!duplicateDpidFound) { + // if the disconnected switch (on this ChannelHandler) + // was not one with a duplicate-dpid, it is safe to remove all + // state for it at the controller. Notice that if the disconnected + // switch was a duplicate-dpid, calling the method below would clear + // all state for the original switch (with the same dpid), + // which we obviously don't want. + runtimeStatusExecutor.submit(() -> { + log.info("{}:removal called", getSwitchInfoString()); + if (sw != null) { + sw.removeConnectedSwitch(); + } + }); + } else { + // A duplicate was disconnected on this ChannelHandler, + // this is the same switch reconnecting, but the original state was + // not cleaned up - XXX check liveness of original ChannelHandler + log.info("{}:duplicate found", getSwitchInfoString()); + duplicateDpidFound = Boolean.FALSE; + } + } else { + log.warn("no dpid in channelHandler registered for " + + "disconnected switch {}", getSwitchInfoString()); + } } @Override From 49b7f5c3deb0c565a1cb7c0d3ee37271e93f447b Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 20 Sep 2021 07:54:37 +0000 Subject: [PATCH 128/235] Tagging 2.5.3 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index c16b0e59cd7..d8dba071beb 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.3-SNAPSHOT"); + private static Version version = Version.version("2.5.3"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index a64857adf5b..5ca85896ac4 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.3-SNAPSHOT" +ONOS_VERSION = "2.5.3" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index d4843f51049..0cdaaa71f7f 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.3-SNAPSHOT" +export ONOS_POM_VERSION="2.5.3" export ONOS_VERSION=${ONOS_VERSION:-2.5.3.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 6e45214cb78..7fa1c95fae0 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 09af9e56aa3..1af32e3984f 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 0cc900f4f8e..93918f17a23 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index cf4e3ee10af..db2d91269ad 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index f1e0f8e235f..84121f922c1 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 8ab65815c53..1ae73313647 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 96526876cad..6b8ba3a1aac 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index c8fb296a34b..b13fdb5ba85 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 588666a721f..e900530b1ec 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index ca38d766b80..79b6b7d0f39 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 3ecd91e0713..6a10a51e734 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 1bbc7b04445..648bcbfd67a 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 45a6d7902f9..52f8a386e86 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index ee276dd53c1..dc7e5db0595 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index b8708d085a4..8d1c6fe2875 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 5526d13cb2b..cd0d8b541a2 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3-SNAPSHOT + 2.5.3 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 3b71680c9d0..11fb1d5aed1 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.3-SNAPSHOT + 2.5.3 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index ffc713af56e..8e5efaac447 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.3-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.3" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From f7489d7de016ee9953dbe9ac5a7b9da82829111c Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 20 Sep 2021 07:54:42 +0000 Subject: [PATCH 129/235] Starting snapshot 2.5.4-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index d8dba071beb..41829b4774f 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.3"); + private static Version version = Version.version("2.5.4-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 5ca85896ac4..01ec8b1a2f4 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.3" +ONOS_VERSION = "2.5.4-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 0cdaaa71f7f..5acbc493ee0 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.3" -export ONOS_VERSION=${ONOS_VERSION:-2.5.3.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.4-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.4.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 7fa1c95fae0..ceda9bded67 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 1af32e3984f..cb5db666425 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 93918f17a23..17473e19752 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index db2d91269ad..ce6ae7fee04 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 84121f922c1..ac7376b03bb 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 1ae73313647..3c388c5fe7f 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 6b8ba3a1aac..2dce80a3bcb 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index b13fdb5ba85..116abc33656 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index e900530b1ec..bf617dca7b2 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 79b6b7d0f39..defc80f5375 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 6a10a51e734..5acafc5d663 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 648bcbfd67a..8d7b275fee7 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 52f8a386e86..ed5475db916 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index dc7e5db0595..ae5579f45e8 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 8d1c6fe2875..0027b9a0507 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index cd0d8b541a2..ac5afc85976 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.3 + 2.5.4-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 11fb1d5aed1..9ca9cc26625 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.3 + 2.5.4-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 8e5efaac447..ed43e5fc1f7 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.3" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.4-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 4f52c46967cb6925c4fafdbd865fa29ee346c565 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 17 Sep 2021 23:02:19 +0200 Subject: [PATCH 130/235] [SDFAB-295] Inconsistent format of port number in host location This patch updates fabric.p4 interpreter. Additionally, fixes also the HostProbingProvider by adding a translation step also there. Change-Id: I8d1f0f8b6827453e5bdc240ea902960f92ed7e14 --- .../impl/behaviour/FabricInterpreter.java | 18 +++++++++++ .../impl/DefaultHostProbingProvider.java | 30 ++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java index 1a7b2ba0a82..9f848ed2d62 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java @@ -290,6 +290,9 @@ public InboundPacket mapInboundPacket(PiPacketOperation packetIn, DeviceId devic ImmutableByteSequence portByteSequence = packetMetadata.get().value(); short s = portByteSequence.asReadOnlyBuffer().getShort(); ConnectPoint receivedFrom = new ConnectPoint(deviceId, PortNumber.portNumber(s)); + if (!receivedFrom.port().hasName()) { + receivedFrom = translateSwitchPort(receivedFrom); + } ByteBuffer rawData = ByteBuffer.wrap(packetIn.data().asArray()); return new DefaultInboundPacket(receivedFrom, ethPkt, rawData); } else { @@ -311,4 +314,19 @@ public Optional mapLogicalPortNumber(PortNumber port) { } return capabilities.cpuPort(); } + + /* Connect point generated using sb metadata does not have port name + we use the device service as translation service */ + private ConnectPoint translateSwitchPort(ConnectPoint connectPoint) { + final DeviceService deviceService = handler().get(DeviceService.class); + if (deviceService == null) { + log.warn("Unable to translate switch port due to DeviceService not available"); + return connectPoint; + } + Port devicePort = deviceService.getPort(connectPoint); + if (devicePort != null) { + return new ConnectPoint(connectPoint.deviceId(), devicePort.number()); + } + return connectPoint; + } } diff --git a/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java b/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java index 522ed20eecd..079489e4e4d 100644 --- a/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java +++ b/providers/hostprobing/src/main/java/org/onosproject/provider/hostprobing/impl/DefaultHostProbingProvider.java @@ -29,6 +29,8 @@ import org.onosproject.net.ConnectPoint; import org.onosproject.net.Host; import org.onosproject.net.HostLocation; +import org.onosproject.net.Port; +import org.onosproject.net.device.DeviceService; import org.onosproject.net.flow.DefaultTrafficTreatment; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.host.HostProbe; @@ -84,6 +86,9 @@ public class DefaultHostProbingProvider extends AbstractProvider implements Host @Reference(cardinality = ReferenceCardinality.MANDATORY) private MastershipService mastershipService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private DeviceService deviceService; + private HostProviderService providerService; private HostProbingProviderService hostProbingProviderService; private ExecutorService packetHandler; @@ -170,16 +175,23 @@ public void processEvent(HostProbingEvent event) { case PROBE_FAIL: // Remove this location if this is a verify probe. if (hostProbe.mode() == ProbeMode.VERIFY) { + ConnectPoint oldConnectPoint = hostProbe.connectPoint(); + if (!oldConnectPoint.port().hasName()) { + oldConnectPoint = translateSwitchPort(oldConnectPoint); + } providerService.removeLocationFromHost(hostProbe.id(), - new HostLocation(hostProbe.connectPoint(), 0L)); + new HostLocation(oldConnectPoint, 0L)); } break; case PROBE_COMPLETED: // Add this location if this is a discover probe. if (hostProbe.mode() == ProbeMode.DISCOVER) { - HostLocation newLocation = new HostLocation(hostProbe.connectPoint(), - System.currentTimeMillis()); - providerService.addLocationToHost(hostProbe.id(), newLocation); + ConnectPoint newConnectPoint = hostProbe.connectPoint(); + if (!newConnectPoint.port().hasName()) { + newConnectPoint = translateSwitchPort(newConnectPoint); + } + providerService.addLocationToHost(hostProbe.id(), + new HostLocation(newConnectPoint, System.currentTimeMillis())); } break; default: @@ -247,4 +259,14 @@ private void sendLocationProbe(Ethernet probe, ConnectPoint connectPoint) { treatment, ByteBuffer.wrap(probe.serialize())); packetService.emit(outboundPacket); } + + /* Connect point generated from netcfg may not have port name + we use the device service as translation service */ + private ConnectPoint translateSwitchPort(ConnectPoint connectPoint) { + Port devicePort = deviceService.getPort(connectPoint); + if (devicePort != null) { + return new ConnectPoint(connectPoint.deviceId(), devicePort.number()); + } + return connectPoint; + } } From 6ef84ceb0e167e4bff0fb3fdf9ca29abba56a465 Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 22 Sep 2021 11:24:38 +0200 Subject: [PATCH 131/235] Fix nasty race condition in the MeterStore This situation is very specific of the EC maps which can receive updates from the peers immedietaly due to the bootstrap process. Change-Id: I6b6087fbf907d8a6fb0bb8f807fe210e0f1ab571 --- .../onosproject/store/meter/impl/DistributedMeterStore.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index b94375cefa6..30da74dedd8 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -114,7 +114,8 @@ public class DistributedMeterStore extends AbstractStore> availableMeterIds; + protected final ConcurrentMap> availableMeterIds = + new ConcurrentHashMap<>(); private static final String METERIDSTORE = "onos-meters-id-store"; private AtomicCounterMap meterIdGenerators; @@ -177,8 +178,6 @@ public void activate() { .withSerializer(APP_KRYO_BUILDER).build(); metersFeatures.addListener(featuresMapListener); - availableMeterIds = new ConcurrentHashMap<>(); - meterIdGenerators = storageService.atomicCounterMapBuilder() .withName(METERIDSTORE) .withSerializer(Serializer.using(KryoNamespaces.API, From 86f07030f8698704c6d5b28276e1d4888fc2e6c5 Mon Sep 17 00:00:00 2001 From: Pier Luigi Ventre Date: Wed, 22 Sep 2021 19:08:45 +0000 Subject: [PATCH 132/235] Revert "Fix nasty race condition in the MeterStore" This reverts commit 6ef84ceb0e167e4bff0fb3fdf9ca29abba56a465. Reason for revert: let me update the commit message Change-Id: Ia1ee1cb33544eb2249e225e574c7f27a04095e56 --- .../onosproject/store/meter/impl/DistributedMeterStore.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 30da74dedd8..b94375cefa6 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -114,8 +114,7 @@ public class DistributedMeterStore extends AbstractStore> availableMeterIds = - new ConcurrentHashMap<>(); + protected ConcurrentMap> availableMeterIds; private static final String METERIDSTORE = "onos-meters-id-store"; private AtomicCounterMap meterIdGenerators; @@ -178,6 +177,8 @@ public void activate() { .withSerializer(APP_KRYO_BUILDER).build(); metersFeatures.addListener(featuresMapListener); + availableMeterIds = new ConcurrentHashMap<>(); + meterIdGenerators = storageService.atomicCounterMapBuilder() .withName(METERIDSTORE) .withSerializer(Serializer.using(KryoNamespaces.API, From ec0e942320ef27932b4173172055151015261d7c Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 22 Sep 2021 11:24:38 +0200 Subject: [PATCH 133/235] [SDFAB-612] Cluster not ready when using recent tost master images Initialize the local cache before adding the map listener to prevent npe which are caused by events delivered during the bootstrap process of the EC map Change-Id: I823c12ccaa633a11a10d5b5d5fa7250a078ff4c5 --- .../onosproject/store/meter/impl/DistributedMeterStore.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index b94375cefa6..30da74dedd8 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -114,7 +114,8 @@ public class DistributedMeterStore extends AbstractStore> availableMeterIds; + protected final ConcurrentMap> availableMeterIds = + new ConcurrentHashMap<>(); private static final String METERIDSTORE = "onos-meters-id-store"; private AtomicCounterMap meterIdGenerators; @@ -177,8 +178,6 @@ public void activate() { .withSerializer(APP_KRYO_BUILDER).build(); metersFeatures.addListener(featuresMapListener); - availableMeterIds = new ConcurrentHashMap<>(); - meterIdGenerators = storageService.atomicCounterMapBuilder() .withName(METERIDSTORE) .withSerializer(Serializer.using(KryoNamespaces.API, From e84b2e8081ea40ff06eaa1b119c6e22cfcf9459d Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 22 Sep 2021 21:38:49 +0200 Subject: [PATCH 134/235] [SDFAB-612] Cluster not ready when using recent tost master images There is no guarantee that the HostProbingProvider is already registered before setDelegate is called. This patch prevents npe caused by events delivered before the provider is ready Change-Id: I8612a3b156e342752d1ade9ee1d7d786ad53cc9e --- .../org/onosproject/net/host/impl/HostProbingManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostProbingManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostProbingManager.java index ea3a8a1172e..64f2791b928 100644 --- a/core/net/src/main/java/org/onosproject/net/host/impl/HostProbingManager.java +++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostProbingManager.java @@ -52,7 +52,12 @@ public class HostProbingManager extends private static final String SCHEME = "hostprobing"; private HostProbingStoreDelegate delegate = event -> { - getProvider(SCHEME).processEvent(event); + HostProbingProvider hostProbingProvider = getProvider(SCHEME); + if (hostProbingProvider != null) { + hostProbingProvider.processEvent(event); + } else { + log.warn("Unable to find host probing provider. Cannot handle event {}", event); + } }; @Activate From e46c4acbdfd832f1f1c099086a49ae9d06a5411a Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 23 Sep 2021 18:19:50 +0200 Subject: [PATCH 135/235] [SDFAB-615] Inconsistent format of port number in links This is affecting also the gui which is not able to recognize links as bidirectional Change-Id: Ic93cd93efb82485daed4f1cdc6d9e2e6262e6d99 --- .../provider/lldpcommon/LinkDiscovery.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java index 630b30d55b3..eb8df9d1d50 100644 --- a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java +++ b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java @@ -223,7 +223,7 @@ private boolean processOnosLldp(PacketContext packetContext, Ethernet eth) { DeviceId srcDeviceId = DeviceId.deviceId(idString); DeviceId dstDeviceId = packetContext.inPacket().receivedFrom().deviceId(); - ConnectPoint src = new ConnectPoint(srcDeviceId, srcPort); + ConnectPoint src = translateSwitchPort(srcDeviceId, srcPort); ConnectPoint dst = new ConnectPoint(dstDeviceId, dstPort); LinkDescription ld = new DefaultLinkDescription(src, dst, lt); @@ -477,4 +477,14 @@ private void sendProbes(Long portNumber, String portDesc) { public boolean containsPort(long portNumber) { return portMap.containsKey(portNumber); } + + /* Port number created from ONOS lldp does not have port name + we use the device service as translation service */ + private ConnectPoint translateSwitchPort(DeviceId deviceId, PortNumber portNumber) { + Port devicePort = this.context.deviceService().getPort(deviceId, portNumber); + if (devicePort != null) { + return new ConnectPoint(deviceId, devicePort.number()); + } + return new ConnectPoint(deviceId, portNumber); + } } From 61bd673eec2282aff175daff141059870db78c7d Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 23 Sep 2021 19:03:14 +0200 Subject: [PATCH 136/235] [SDFAB-616] Inconsistent format of port number in DhcpRelay CircuitId deserialize use custom parsing instead of leveraging the ConnectPoint class. Unfortunately, this custom parsing does not parse correctly the portname. Additionally, fix port number format for hostlocation and dhcprecords and exclude Dhcp4HandlerImpl from file length checks Change-Id: I360f26f8dd7de492cb65ad7af05fb85c8e940c33 --- .../dhcprelay/Dhcp4HandlerImpl.java | 28 +++++++++++++++++-- .../src/main/resources/onos/suppressions.xml | 1 + .../java/org/onlab/packet/dhcp/CircuitId.java | 28 ++++++++++++------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java index 73250101371..6cd70de8c0a 100644 --- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java +++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java @@ -52,6 +52,7 @@ import org.onosproject.net.Host; import org.onosproject.net.HostId; import org.onosproject.net.HostLocation; +import org.onosproject.net.Port; import org.onosproject.net.behaviour.Pipeliner; import org.onosproject.net.device.DeviceService; import org.onosproject.net.flow.DefaultTrafficSelector; @@ -1086,15 +1087,21 @@ private void writeResponseDhcpRecord(Ethernet ethernet, log.warn("Failed to determine where to send {}", dhcpPayload.getPacketType()); return; } - Interface outIface = outInterface.get(); + ConnectPoint location = outIface.connectPoint(); + if (!location.port().hasName()) { + location = translateSwitchPort(location); + } + VlanId vlanId = getVlanIdFromRelayAgentOption(dhcpPayload); if (vlanId == null) { vlanId = outIface.vlan(); } + MacAddress macAddress = MacAddress.valueOf(dhcpPayload.getClientHardwareAddress()); HostId hostId = HostId.hostId(macAddress, vlanId); + DhcpRecord record = dhcpRelayStore.getDhcpRecord(hostId).orElse(null); if (record == null) { record = new DhcpRecord(HostId.hostId(macAddress, vlanId)); @@ -1439,9 +1446,14 @@ private void handleDhcpAck(Ethernet ethernetPacketAck, DHCP dhcpPayload) { log.warn("Can't find output interface for dhcp: {}", dhcpPayload); return; } - Interface outIface = outInterface.get(); - HostLocation hostLocation = new HostLocation(outIface.connectPoint(), System.currentTimeMillis()); + + ConnectPoint location = outIface.connectPoint(); + if (!location.port().hasName()) { + location = translateSwitchPort(location); + } + + HostLocation hostLocation = new HostLocation(location, System.currentTimeMillis()); MacAddress macAddress = MacAddress.valueOf(dhcpPayload.getClientHardwareAddress()); VlanId vlanId = getVlanIdFromRelayAgentOption(dhcpPayload); if (vlanId == null) { @@ -1993,4 +2005,14 @@ private DhcpServerInfo findServerInfoFromServer(boolean directConnFlag, ConnectP } return foundServerInfo; } + + /* Connect point coming from interfaces do not have port name + we use the device service as translation service */ + private ConnectPoint translateSwitchPort(ConnectPoint connectPoint) { + Port devicePort = deviceService.getPort(connectPoint); + if (devicePort != null) { + return new ConnectPoint(connectPoint.deviceId(), devicePort.number()); + } + return connectPoint; + } } diff --git a/tools/build/conf/src/main/resources/onos/suppressions.xml b/tools/build/conf/src/main/resources/onos/suppressions.xml index 3cd63b1de52..c972216a012 100644 --- a/tools/build/conf/src/main/resources/onos/suppressions.xml +++ b/tools/build/conf/src/main/resources/onos/suppressions.xml @@ -34,6 +34,7 @@ + diff --git a/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java b/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java index 1b53a5b9dcc..22342465ab7 100644 --- a/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java +++ b/utils/misc/src/main/java/org/onlab/packet/dhcp/CircuitId.java @@ -17,7 +17,6 @@ package org.onlab.packet.dhcp; import com.google.common.collect.Lists; -import com.google.common.primitives.UnsignedLongs; import org.onlab.packet.VlanId; import java.nio.charset.StandardCharsets; @@ -32,7 +31,6 @@ public class CircuitId { private static final String SEPARATOR = ":"; private static final String CIRCUIT_ID_FORMAT = "%s" + SEPARATOR + "%s"; - private static final String DEVICE_PORT_SEPARATOR = "/"; private String connectPoint; private VlanId vlanId; @@ -72,16 +70,26 @@ public static CircuitId deserialize(byte[] circuitId) { // remove last element (vlan id) String vlanId = splittedCircuitId.remove(splittedCircuitId.size() - 1); - // Reconstruct device Id + // Reconstruct the connect point string String connectPoint = String.join(SEPARATOR, splittedCircuitId); - String[] splittedConnectPoint = connectPoint.split(DEVICE_PORT_SEPARATOR); - // Check connect point is valid or not - checkArgument(splittedConnectPoint.length == 2, - "Connect point must be in \"deviceUri/portNumber\" format"); - - // Check the port number is a number or not - UnsignedLongs.decode(splittedConnectPoint[1]); + /* + * As device IDs may have a path component, we are expecting one + * of: + * - scheme:ip:port/cp + * - scheme:ip:port/path/cp + * + * The assumption is the last `/` will separate the device ID + * from the connection point number. Please note that we are + * not actually checking here the content of the strings + */ + int idx = connectPoint.lastIndexOf("/"); + checkArgument(idx != -1, "Connect point not specified, " + + "Connect point must be in \"deviceUri/portNumber\" format"); + + String cp = connectPoint.substring(idx + 1); + checkArgument(!cp.isEmpty(), "Connect point separator specified, " + + "but no port number included, connect point must be in \"deviceUri/portNumber\" format"); return new CircuitId(connectPoint, VlanId.vlanId(vlanId)); } From 185cf87f0c37a1c187c1a115746b47607f4cd7aa Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Fri, 24 Sep 2021 11:26:24 +0200 Subject: [PATCH 137/235] [ONOS-8148][SDFAB-618] Avoid meter map distruction in cluster environment on instance restart In general an instance restart should not lead to the deactivate method. Unfortunately, the bundle refresh is changing the cards on the table. Please note that destroy() behavior is implementation dependent. In this patch we have fixed bundles that can be potentially affected by the bundle refresh issue. However, other fixes may be needed in future and the fixes are use cases dependent: it depends when the bundle refresh issue is triggered along the chain of the deps. Change-Id: I7a45439f74b255d8d4b1cbdb89b6dec8adf00687 --- .../onosproject/mcast/impl/DistributedMcastRoutesStore.java | 1 - .../onosproject/store/meter/impl/DistributedMeterStore.java | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java index 2d861048277..6dc6c3d28b0 100644 --- a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java +++ b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java @@ -94,7 +94,6 @@ public void activate() { @Deactivate public void deactivate() { mcastRib.removeListener(mcastRouteListener); - mcastRib.destroy(); log.info("Stopped"); } diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 30da74dedd8..43188c1d253 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -191,8 +191,10 @@ public void activate() { public void deactivate() { meters.removeListener(metersMapListener); metersFeatures.removeListener(featuresMapListener); - meters.destroy(); + + // EC map does clean only the local state metersFeatures.destroy(); + // Distributed set does not override the default behavior availableMeterIds.forEach((key, set) -> set.destroy()); log.info("Stopped"); From f3af464a7171d998b1dbd57be16585acfacacef8 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 30 Sep 2021 07:43:18 +0000 Subject: [PATCH 138/235] Tagging 2.5.4 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 41829b4774f..8fd32b03392 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.4-SNAPSHOT"); + private static Version version = Version.version("2.5.4"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 01ec8b1a2f4..d40576ead3a 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.4-SNAPSHOT" +ONOS_VERSION = "2.5.4" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 5acbc493ee0..be14c95d85f 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.4-SNAPSHOT" +export ONOS_POM_VERSION="2.5.4" export ONOS_VERSION=${ONOS_VERSION:-2.5.4.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index ceda9bded67..853e2dd56a1 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index cb5db666425..de357e09689 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 17473e19752..0db035a64ec 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index ce6ae7fee04..d73598c8a20 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index ac7376b03bb..f1e5550e0d8 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 3c388c5fe7f..421a6308299 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 2dce80a3bcb..81d5b98b1d8 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 116abc33656..97c811d835d 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index bf617dca7b2..37a51a1cb81 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index defc80f5375..9a606120ecf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 5acafc5d663..e63220fabcf 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 8d7b275fee7..0ea01bc3d73 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index ed5475db916..501fa834eef 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index ae5579f45e8..dda115ad1d3 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 0027b9a0507..53ad5783fb3 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index ac5afc85976..65739495812 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4-SNAPSHOT + 2.5.4 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 9ca9cc26625..d3ad649dbdb 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.4-SNAPSHOT + 2.5.4 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index ed43e5fc1f7..2527abdcb16 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.4-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.4" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 852ff85bd0bed17469a3edf54bdfec032379e52c Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 30 Sep 2021 07:43:23 +0000 Subject: [PATCH 139/235] Starting snapshot 2.5.5-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 8fd32b03392..cadf82568ae 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.4"); + private static Version version = Version.version("2.5.5-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index d40576ead3a..18164770df8 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.4" +ONOS_VERSION = "2.5.5-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index be14c95d85f..1d6f22daea2 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.4" -export ONOS_VERSION=${ONOS_VERSION:-2.5.4.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.5-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.5.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 853e2dd56a1..4b9b7c840f5 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index de357e09689..dd6ff53067e 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 0db035a64ec..a50381f2c8e 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index d73598c8a20..ba10887f827 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index f1e5550e0d8..fe40c753baf 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 421a6308299..d89968ea0e1 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 81d5b98b1d8..f9751c6b118 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 97c811d835d..de6038bcaaf 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 37a51a1cb81..afef4751cc0 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 9a606120ecf..2edbf673126 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index e63220fabcf..20b7e8735bc 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 0ea01bc3d73..1a8e7f6550c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 501fa834eef..f1c855e10ff 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index dda115ad1d3..be08b4ffa96 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 53ad5783fb3..02e01ad68f6 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 65739495812..17cd3ba0e36 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.4 + 2.5.5-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index d3ad649dbdb..041da4e6879 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.4 + 2.5.5-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 2527abdcb16..f0cfbd34231 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.4" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From d06b7839f370b2f6fb44569626ea561d550ba9ab Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 27 Sep 2021 12:35:09 +0200 Subject: [PATCH 140/235] [SDFAB-622] Protect phased recovery from wrong port config ifacename is used as key when changing the admin state of a port through GNMI. This patch guarantees that we use the state contained in the device store to fill the gnmi blob. This results to be necessary because the requests coming from the north may be incomplete (without port name). When this happens, PortNumber class fills the name with the number which is wrong for the GNMI devices Change-Id: I308538ae30cfe3fbf62d42c9a059114e8ff5b4b3 --- .../gnmi/OpenConfigGnmiPortAdminBehaviour.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiPortAdminBehaviour.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiPortAdminBehaviour.java index 666d5b1e231..7a01ff0f6cc 100644 --- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiPortAdminBehaviour.java +++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiPortAdminBehaviour.java @@ -20,6 +20,7 @@ import org.onosproject.gnmi.api.GnmiClient; import org.onosproject.gnmi.api.GnmiController; import org.onosproject.grpc.utils.AbstractGrpcHandlerBehaviour; +import org.onosproject.net.Port; import org.onosproject.net.PortNumber; import org.onosproject.net.behaviour.PortAdmin; @@ -70,6 +71,22 @@ private void doEnable(PortNumber portNumber, boolean enabled) { portNumber, deviceId); return; } + + /* Requests coming from the north may come without name. + When this happens port name equals to port number */ + if (!portNumber.hasName()) { + if (deviceService == null) { + log.warn("Cannot update port status of port {} on {} because the device " + + "service is null", portNumber, deviceId); + return; + } + Port devicePort = deviceService.getPort(deviceId, portNumber); + if (devicePort != null) { + // Some devices may reject the config, make sure we act on the reported port + portNumber = devicePort.number(); + } + } + final Gnmi.Path path = Gnmi.Path.newBuilder() .addElem(Gnmi.PathElem.newBuilder().setName("interfaces").build()) .addElem(Gnmi.PathElem.newBuilder().setName("interface") From e3c605e3cf137532af81f51f435cc5f2d81cedf5 Mon Sep 17 00:00:00 2001 From: David Glantz Date: Tue, 21 Sep 2021 15:39:19 -0500 Subject: [PATCH 141/235] Fix to properly encode several MASKED criterion into JSON. Change-Id: I6a3b16c3382d60275de0fc0c61087e79038e5ebb --- .../impl/DecodeCriterionCodecHelper.java | 16 ++++- .../impl/EncodeCriterionCodecHelper.java | 9 +-- .../codec/impl/CriterionCodecTest.java | 71 +++++++++++++++++++ .../codec/impl/CriterionJsonMatcher.java | 37 +++++++++- 4 files changed, 122 insertions(+), 11 deletions(-) diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DecodeCriterionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/DecodeCriterionCodecHelper.java index cf4cfa2c39d..cbd1df3a98d 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/DecodeCriterionCodecHelper.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/DecodeCriterionCodecHelper.java @@ -82,6 +82,7 @@ public DecodeCriterionCodecHelper(ObjectNode json) { decoderMap.put(Criterion.Type.ETH_DST.name(), new EthDstDecoder()); decoderMap.put(Criterion.Type.ETH_DST_MASKED.name(), new EthDstMaskedDecoder()); decoderMap.put(Criterion.Type.ETH_SRC.name(), new EthSrcDecoder()); + decoderMap.put(Criterion.Type.ETH_SRC_MASKED.name(), new EthSrcMaskedDecoder()); decoderMap.put(Criterion.Type.ETH_TYPE.name(), new EthTypeDecoder()); decoderMap.put(Criterion.Type.VLAN_VID.name(), new VlanVidDecoder()); decoderMap.put(Criterion.Type.VLAN_PCP.name(), new VlanPcpDecoder()); @@ -155,9 +156,9 @@ private class EthDstMaskedDecoder implements CriterionDecoder { @Override public Criterion decodeCriterion(ObjectNode json) { MacAddress mac = MacAddress.valueOf(nullIsIllegal(json.get(CriterionCodec.MAC), - CriterionCodec.MAC + MISSING_MEMBER_MESSAGE).asText()); + CriterionCodec.MAC + MISSING_MEMBER_MESSAGE).asText()); MacAddress macMask = MacAddress.valueOf(nullIsIllegal(json.get(CriterionCodec.MAC_MASK), - CriterionCodec.MAC + MISSING_MEMBER_MESSAGE).asText()); + CriterionCodec.MAC_MASK + MISSING_MEMBER_MESSAGE).asText()); return Criteria.matchEthDstMasked(mac, macMask); } } @@ -172,6 +173,17 @@ public Criterion decodeCriterion(ObjectNode json) { } } + private class EthSrcMaskedDecoder implements CriterionDecoder { + @Override + public Criterion decodeCriterion(ObjectNode json) { + MacAddress mac = MacAddress.valueOf(nullIsIllegal(json.get(CriterionCodec.MAC), + CriterionCodec.MAC + MISSING_MEMBER_MESSAGE).asText()); + MacAddress macMask = MacAddress.valueOf(nullIsIllegal(json.get(CriterionCodec.MAC_MASK), + CriterionCodec.MAC_MASK + MISSING_MEMBER_MESSAGE).asText()); + return Criteria.matchEthSrcMasked(mac, macMask); + } + } + private class InPortDecoder implements CriterionDecoder { @Override public Criterion decodeCriterion(ObjectNode json) { diff --git a/core/common/src/main/java/org/onosproject/codec/impl/EncodeCriterionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/EncodeCriterionCodecHelper.java index 03cab28550d..8a3feaac363 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/EncodeCriterionCodecHelper.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/EncodeCriterionCodecHelper.java @@ -95,6 +95,7 @@ public EncodeCriterionCodecHelper(Criterion criterion, CodecContext context) { formatMap.put(Criterion.Type.ETH_DST, new FormatEth()); formatMap.put(Criterion.Type.ETH_DST_MASKED, new FormatEthMasked()); formatMap.put(Criterion.Type.ETH_SRC, new FormatEth()); + formatMap.put(Criterion.Type.ETH_SRC_MASKED, new FormatEthMasked()); formatMap.put(Criterion.Type.ETH_TYPE, new FormatEthType()); formatMap.put(Criterion.Type.VLAN_VID, new FormatVlanVid()); formatMap.put(Criterion.Type.VLAN_PCP, new FormatVlanPcp()); @@ -151,14 +152,6 @@ public EncodeCriterionCodecHelper(Criterion criterion, CodecContext context) { formatMap.put(Criterion.Type.TCP_FLAGS, new FormatUnknown()); formatMap.put(Criterion.Type.ACTSET_OUTPUT, new FormatUnknown()); formatMap.put(Criterion.Type.PACKET_TYPE, new FormatUnknown()); - formatMap.put(Criterion.Type.ETH_SRC_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.TCP_SRC_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.TCP_DST_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.UDP_SRC_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.UDP_DST_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.SCTP_SRC_MASKED, new FormatUnknown()); - formatMap.put(Criterion.Type.SCTP_DST_MASKED, new FormatUnknown()); - } private interface CriterionTypeFormatter { diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java index f2fd5e5afb7..1542f0dbb00 100644 --- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java +++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java @@ -74,6 +74,7 @@ public class CriterionCodecTest { final MacAddress mcastMac = MacAddress.valueOf("01:00:5E:00:00:01"); final MacAddress mcastMacMask = MacAddress.valueOf("FF:FF:FF:80:00:00"); final TpPort tpPort = TpPort.tpPort(40000); + final TpPort tpPortMask = TpPort.tpPort(65472); final int tributaryPortNumber = 11; final int tributarySlotLen = 80; final byte[] tributarySlotBitmap = new byte[] {1, 2, 3, 4, 2, 3, 4, 2, 3, 4}; @@ -168,6 +169,16 @@ public void matchEthSrcTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests masked ethernet source criterion (Criterion.Type.ETH_SRC_MASKED). + */ + @Test + public void matchEthSrcMaskTest() { + Criterion criterion = Criteria.matchEthSrcMasked(mcastMac, mcastMacMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests ethernet type criterion. */ @@ -258,6 +269,16 @@ public void matchTcpSrcTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests source TCP port masked criterion. + */ + @Test + public void matchTcpSrcMaskedTest() { + Criterion criterion = Criteria.matchTcpSrcMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests destination TCP port criterion. */ @@ -268,6 +289,16 @@ public void matchTcpDstTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests destination TCP port masked criterion. + */ + @Test + public void matchTcpDstMaskedTest() { + Criterion criterion = Criteria.matchTcpDstMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests source UDP port criterion. */ @@ -278,6 +309,16 @@ public void matchUdpSrcTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests source UDP port masked criterion. + */ + @Test + public void matchUdpSrcMaskedTest() { + Criterion criterion = Criteria.matchUdpSrcMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests destination UDP criterion. */ @@ -288,6 +329,16 @@ public void matchUdpDstTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests destination UDP port masked criterion. + */ + @Test + public void matchUdpDstMaskedTest() { + Criterion criterion = Criteria.matchUdpDstMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests source SCTP criterion. */ @@ -298,6 +349,16 @@ public void matchSctpSrcTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests source SCTP port masked criterion. + */ + @Test + public void matchSctpSrcMaskedTest() { + Criterion criterion = Criteria.matchSctpSrcMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests destination SCTP criterion. */ @@ -308,6 +369,16 @@ public void matchSctpDstTest() { assertThat(result, matchesCriterion(criterion)); } + /** + * Tests destination SCTP port masked criterion. + */ + @Test + public void matchSctpDstMaskedTest() { + Criterion criterion = Criteria.matchSctpDstMasked(tpPort, tpPortMask); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + /** * Tests ICMP type criterion. */ diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java index d1e1f195e48..9113124c1c0 100644 --- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java +++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java @@ -138,7 +138,7 @@ private boolean matchCriterion(EthCriterion criterion) { description.appendText("mac was " + jsonMac); return false; } - if (criterion.type() == Criterion.Type.ETH_DST_MASKED) { + if (criterion.type() == Criterion.Type.ETH_SRC_MASKED || criterion.type() == Criterion.Type.ETH_DST_MASKED) { final String macMask = criterion.mask().toString(); final String jsonMacMask = jsonCriterion.get("macMask").textValue(); if (!macMask.equals(jsonMacMask)) { @@ -278,6 +278,15 @@ private boolean matchCriterion(TcpPortCriterion criterion) { + Integer.toString(jsonTcpPort)); return false; } + if (criterion.type() == Criterion.Type.TCP_SRC_MASKED || criterion.type() == Criterion.Type.TCP_DST_MASKED) { + final int tcpMask = criterion.mask().toInt(); + final int jsonTcpMask = jsonCriterion.get("tcpMask").intValue(); + if (tcpMask != jsonTcpMask) { + description.appendText("tcp mask was " + + Integer.toString(jsonTcpMask)); + return false; + } + } return true; } @@ -295,6 +304,16 @@ private boolean matchCriterion(UdpPortCriterion criterion) { + Integer.toString(jsonUdpPort)); return false; } + + if (criterion.type() == Criterion.Type.UDP_SRC_MASKED || criterion.type() == Criterion.Type.UDP_DST_MASKED) { + final int udpMask = criterion.mask().toInt(); + final int jsonUdpMask = jsonCriterion.get("udpMask").intValue(); + if (udpMask != jsonUdpMask) { + description.appendText("udp mask was " + + Integer.toString(jsonUdpMask)); + return false; + } + } return true; } @@ -312,6 +331,15 @@ private boolean matchCriterion(SctpPortCriterion criterion) { + Integer.toString(jsonSctpPort)); return false; } + if (criterion.type() == Criterion.Type.SCTP_SRC_MASKED || criterion.type() == Criterion.Type.SCTP_DST_MASKED) { + final int sctpMask = criterion.mask().toInt(); + final int jsonSctpMask = jsonCriterion.get("sctpMask").intValue(); + if (sctpMask != jsonSctpMask) { + description.appendText("sctp mask was " + + Integer.toString(jsonSctpMask)); + return false; + } + } return true; } @@ -676,6 +704,7 @@ public boolean matchesSafely(JsonNode jsonCriterion, case ETH_DST: case ETH_DST_MASKED: case ETH_SRC: + case ETH_SRC_MASKED: return matchCriterion((EthCriterion) criterion); case ETH_TYPE: @@ -703,15 +732,21 @@ public boolean matchesSafely(JsonNode jsonCriterion, return matchCriterion((IPCriterion) criterion); case TCP_SRC: + case TCP_SRC_MASKED: case TCP_DST: + case TCP_DST_MASKED: return matchCriterion((TcpPortCriterion) criterion); case UDP_SRC: + case UDP_SRC_MASKED: case UDP_DST: + case UDP_DST_MASKED: return matchCriterion((UdpPortCriterion) criterion); case SCTP_SRC: + case SCTP_SRC_MASKED: case SCTP_DST: + case SCTP_DST_MASKED: return matchCriterion((SctpPortCriterion) criterion); case ICMPV4_TYPE: From a4d40f37bfd342c64595fea6c7357d303dd55870 Mon Sep 17 00:00:00 2001 From: David Glantz Date: Tue, 21 Sep 2021 11:21:36 -0500 Subject: [PATCH 142/235] Remove logic to create a link when network configuration is added. Change-Id: I9e26308c0f5ce9c5b70ccdbc37d97e4f480ff227 --- .../onosproject/net/link/impl/LinkManager.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java b/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java index 326020bc6a9..ef09ee7000a 100644 --- a/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java +++ b/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java @@ -370,20 +370,14 @@ private void doUpdate(ConnectPoint src, ConnectPoint dst, BasicLinkConfig cfg) { Link link = getLink(src, dst); LinkDescription desc; - if (link == null) { - // TODO Revisit this behaviour. - // config alone probably should not be adding a link, - // netcfg provider should be the one. - desc = BasicLinkOperator.descriptionOf(src, dst, cfg); - } else { + if (link != null) { desc = BasicLinkOperator.combine(cfg, BasicLinkOperator.descriptionOf(src, dst, link)); + ProviderId pid = Optional.ofNullable(link) + .map(Link::providerId) + .orElse(ProviderId.NONE); + store.createOrUpdateLink(pid, desc); } - - ProviderId pid = Optional.ofNullable(link) - .map(Link::providerId) - .orElse(ProviderId.NONE); - store.createOrUpdateLink(pid, desc); } } } From 0b3d1aba7ebcb261ab5d2027dd08c0f691e3d88c Mon Sep 17 00:00:00 2001 From: David Glantz Date: Mon, 20 Sep 2021 16:11:15 -0500 Subject: [PATCH 143/235] Fix to prevent a NullPointerException and instead return an invalid link. Occurs when an intent's path is calculated and there are links that are not annotated with the key identified in the intent's AnnotationConstraint. Change-Id: Iffb15b1f33c474f16bb8b097e2a6c04993add895 --- .../intent/constraint/AnnotationConstraint.java | 8 +++++--- .../constraint/AnnotationConstraintTest.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java index 192eff5b5bd..fe91de332d9 100644 --- a/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java +++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java @@ -76,9 +76,11 @@ public boolean isValid(Link link, ResourceContext context) { } private boolean isValid(Link link) { - double value = getAnnotatedValue(link, key); - - return value <= threshold; + if (link.annotations().value(key) != null) { + return getAnnotatedValue(link, key) <= threshold; + } else { + return false; + } } // doesn't use LinkResourceService diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java index afcbaceee1b..e21d4809c98 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java +++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java @@ -30,6 +30,7 @@ import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.lessThan; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import static org.onosproject.net.DefaultLinkTest.cp; import static org.onosproject.net.DeviceId.deviceId; @@ -47,6 +48,7 @@ public class AnnotationConstraintTest { private static final PortNumber PID1 = portNumber(1); private static final PortNumber PID2 = portNumber(2); private static final String KEY = "distance"; + private static final String MISSING_KEY = "loss"; private static final double VALUE = 100; private AnnotationConstraint sut; @@ -99,4 +101,16 @@ public void testEquality() { .addEqualityGroup(new AnnotationConstraint("latency", 100)) .testEquals(); } + + /** + * Tests the annotated constraint is invalid and has negative cost if the key is not annotated on the link. + */ + @Test + public void testNotAnnotated() { + sut = new AnnotationConstraint(MISSING_KEY, 80); + + assertThat(link.annotations().value(MISSING_KEY), nullValue()); + assertThat(sut.isValid(link, resourceContext), is(false)); + assertThat(sut.cost(link, resourceContext), is(lessThan(0.0))); + } } From e1f80108539eda5374f9b7fa9432c950788eae80 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 1 Oct 2021 22:01:22 +0200 Subject: [PATCH 144/235] [SDFAB-642][SDFAB-643] Fix device disconnection when an instance rejoins Changes in the GDP are done to make sure the default availability is always updated through the two step process defined in the provider and to prevent the disconnection of the devices when an instance rejoins the cluster Finally, the patch improves logging inside the GossipDeviceStore and improve the stability of PiPipeconfWatchdogManager by getting rid of the timer and timer task and by executing the event listeners inside an executor. Change-Id: Ibc6ce711e15e86bde05dbf3b1c37d2a93516fae3 --- .../net/device/DefaultDeviceDescription.java | 1 + .../net/device/DeviceProviderService.java | 10 ++ .../onosproject/net/device/DeviceStore.java | 11 ++ .../net/device/impl/DeviceManager.java | 8 ++ .../pi/impl/PiPipeconfWatchdogManager.java | 105 +++++++++--------- .../store/device/impl/GossipDeviceStore.java | 32 +++++- .../device/impl/GeneralDeviceProvider.java | 34 +++++- 7 files changed, 138 insertions(+), 63 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java index d0b7b2b335c..271e678667d 100644 --- a/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java +++ b/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java @@ -217,6 +217,7 @@ public String toString() { .add("hw", hwVersion).add("sw", swVersion) .add("serial", serialNumber) .add("chassisId", chassisId) + .add("defaultAvailable", defaultAvailable) .add("annotations", annotations()) .toString(); } diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java index b00fa632159..f11f0cc894b 100644 --- a/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java +++ b/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java @@ -105,4 +105,14 @@ default void receivedRoleReply(DeviceId deviceId, MastershipRole response) { */ void updatePortStatistics(DeviceId deviceId, Collection portStatistics); + /** + * Returns the specified device description. + * + * @param deviceId device identifier + * @return device description or null if not present + */ + default DeviceDescription getDeviceDescription(DeviceId deviceId) { + return null; + } + } diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java b/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java index bd59838433b..ed5d33d19bc 100644 --- a/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java +++ b/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java @@ -207,6 +207,17 @@ default PortStatistics getDeltaStatisticsForPort(DeviceId deviceId, PortNumber p */ PortDescription getPortDescription(ProviderId providerId, DeviceId deviceId, PortNumber portNumber); + /** + * Returns the specified device description. + * + * @param providerId provider identifier + * @param deviceId device identifier + * @return device description or null if not present + */ + default DeviceDescription getDeviceDescription(ProviderId providerId, DeviceId deviceId) { + return null; + } + /** * Indicates whether the specified device is available/online. * diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index 53a312dda0f..cf6265be715 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -856,6 +856,14 @@ public void updatePortStatistics(DeviceId deviceId, Collection p deviceId, portStatistics); post(event); } + + @Override + public DeviceDescription getDeviceDescription(DeviceId deviceId) { + checkNotNull(deviceId, DEVICE_ID_NULL); + checkValidity(); + + return store.getDeviceDescription(provider().id(), deviceId); + } } // by default allowed, otherwise check flag diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java index 6dea30ee5f1..be4b3296a89 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java @@ -64,13 +64,15 @@ import java.util.Dictionary; import java.util.Map; import java.util.Objects; -import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import static java.util.Collections.singleton; +import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.net.OsgiPropertyConstants.PWM_PROBE_INTERVAL; import static org.onosproject.net.OsgiPropertyConstants.PWM_PROBE_INTERVAL_DEFAULT; @@ -94,8 +96,6 @@ public class PiPipeconfWatchdogManager private final Logger log = getLogger(getClass()); - private static final long SECONDS = 1000L; - @Reference(cardinality = ReferenceCardinality.MANDATORY) private PiPipeconfMappingStore pipeconfMappingStore; @@ -125,8 +125,9 @@ public class PiPipeconfWatchdogManager private final DeviceListener deviceListener = new InternalDeviceListener(); private final PiPipeconfListener pipeconfListener = new InternalPipeconfListener(); - private Timer timer; - private TimerTask task; + private ScheduledExecutorService eventExecutor = newSingleThreadScheduledExecutor( + groupedThreads("onos/pipeconf-event", "%d", log)); + private ScheduledFuture poller = null; private final Striped locks = Striped.lock(30); @@ -164,7 +165,6 @@ public void activate() { // Register component configurable properties. componentConfigService.registerProperties(getClass()); // Start periodic watchdog task. - timer = new Timer(); startProbeTask(); // Add listeners. deviceService.addListener(deviceListener); @@ -196,7 +196,8 @@ public void deactivate() { pipeconfService.removeListener(pipeconfListener); deviceService.removeListener(deviceListener); stopProbeTask(); - timer = null; + eventExecutor.shutdown(); + executor.shutdown(); statusMap = null; localStatusMap = null; log.info("Stopped"); @@ -327,9 +328,8 @@ private boolean isLocalMaster(Device device) { private void startProbeTask() { synchronized (this) { log.info("Starting pipeline probe thread with {} seconds interval...", probeInterval); - task = new InternalTimerTask(); - timer.scheduleAtFixedRate(task, probeInterval * SECONDS, - probeInterval * SECONDS); + poller = eventExecutor.scheduleAtFixedRate(this::triggerCheckAllDevices, probeInterval, + probeInterval, TimeUnit.SECONDS); } } @@ -337,8 +337,8 @@ private void startProbeTask() { private void stopProbeTask() { synchronized (this) { log.info("Stopping pipeline probe thread..."); - task.cancel(); - task = null; + poller.cancel(false); + poller = null; } } @@ -350,13 +350,6 @@ private synchronized void rescheduleProbeTask() { } } - private class InternalTimerTask extends TimerTask { - @Override - public void run() { - triggerCheckAllDevices(); - } - } - /** * Listener of device events used to update the pipeline status. */ @@ -364,48 +357,50 @@ private class InternalDeviceListener implements DeviceListener { @Override public void event(DeviceEvent event) { - final Device device = event.subject(); - switch (event.type()) { - case DEVICE_ADDED: - case DEVICE_UPDATED: - case DEVICE_AVAILABILITY_CHANGED: - if (!deviceService.isAvailable(device.id())) { + eventExecutor.execute(() -> { + final Device device = event.subject(); + switch (event.type()) { + case DEVICE_ADDED: + case DEVICE_UPDATED: + case DEVICE_AVAILABILITY_CHANGED: + /* + * The GeneralDeviceProvider marks online/offline devices that + * have/have not ANY pipeline config set. Here we make sure the + * one configured in the pipeconf service is the expected one. + * Clearly, it would be better to let the GDP do this check and + * avoid sending twice the same message to the switch. + */ + if (!deviceService.isAvailable(device.id())) { + signalStatusUnknown(device.id()); + } else { + filterAndTriggerTasks(singleton(device)); + } + break; + case DEVICE_REMOVED: + case DEVICE_SUSPENDED: signalStatusUnknown(device.id()); - } else { - // The GeneralDeviceProvider marks online devices that - // have ANY pipeline config set. Here we make sure the - // one configured in the pipeconf service is the - // expected one. Clearly, it would be better to let the - // GDP do this check and avoid sending twice the same - // message to the switch. - filterAndTriggerTasks(singleton(device)); - } - break; - case DEVICE_REMOVED: - case DEVICE_SUSPENDED: - signalStatusUnknown(device.id()); - signalStatusUnconfigured(device.id()); - break; - case PORT_ADDED: - case PORT_UPDATED: - case PORT_REMOVED: - case PORT_STATS_UPDATED: - default: - break; - } + signalStatusUnconfigured(device.id()); + break; + case PORT_ADDED: + case PORT_UPDATED: + case PORT_REMOVED: + case PORT_STATS_UPDATED: + default: + break; + } + }); } } private class InternalPipeconfListener implements PiPipeconfListener { @Override public void event(PiPipeconfEvent event) { - pipeconfMappingStore.getDevices(event.subject()) - .forEach(PiPipeconfWatchdogManager.this::triggerProbe); - } - - @Override - public boolean isRelevant(PiPipeconfEvent event) { - return Objects.equals(event.type(), PiPipeconfEvent.Type.REGISTERED); + eventExecutor.execute(() -> { + if (Objects.equals(event.type(), PiPipeconfEvent.Type.REGISTERED)) { + pipeconfMappingStore.getDevices(event.subject()) + .forEach(PiPipeconfWatchdogManager.this::triggerProbe); + } + }); } } diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java index 5760e235085..2bd4dfe38da 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java @@ -1036,6 +1036,20 @@ public PortDescription getPortDescription(ProviderId pid, .orElse(null); } + @Override + public DeviceDescription getDeviceDescription(ProviderId providerId, DeviceId deviceId) { + if (devices.containsKey(deviceId)) { + Map descs = getOrCreateDeviceDescriptionsMap(deviceId); + synchronized (descs) { + DeviceDescriptions deviceDescriptions = descs.get(providerId); + return deviceDescriptions != null ? deviceDescriptions.getDeviceDesc().value() : null; + } + } else { + log.warn("Device {} does not exist in store", deviceId); + } + return null; + } + @Override public boolean isAvailable(DeviceId deviceId) { return availableDevices.contains(deviceId); @@ -1403,7 +1417,13 @@ private DeviceAntiEntropyAdvertisement createAdvertisement() { * @param advertisement to respond to */ private void handleAdvertisement(DeviceAntiEntropyAdvertisement advertisement) { - + /* + * NOTE that when an instance rejoins the cluster, it will generate + * device events and send to the local apps through the delegate. This + * approach might be not the best if the apps are not enough robust or + * if there is no proper coordination in the cluster. Also, note that + * any ECMap will act on the same way during the bootstrap process + */ final NodeId sender = advertisement.sender(); Map devAds = new HashMap<>(advertisement.deviceFingerPrints()); @@ -1437,9 +1457,12 @@ private void handleAdvertisement(DeviceAntiEntropyAdvertisement advertisement) { if (advDevTimestamp == null || lProvDevice.isNewerThan( advDevTimestamp)) { // remote does not have it or outdated, suggest + log.trace("send to {} device update {} for {}", sender, lProvDevice, deviceId); notifyPeer(sender, new InternalDeviceEvent(provId, deviceId, lProvDevice)); } else if (!lProvDevice.timestamp().equals(advDevTimestamp)) { // local is outdated, request + log.trace("need update {} < {} for device {} from {}", lProvDevice.timestamp(), + advDevTimestamp, deviceId, sender); reqDevices.add(devFragId); } @@ -1456,10 +1479,12 @@ private void handleAdvertisement(DeviceAntiEntropyAdvertisement advertisement) { if (advPortTimestamp == null || lPort.isNewerThan( advPortTimestamp)) { // remote does not have it or outdated, suggest + log.trace("send to {} port update {} for {}/{}", sender, lPort, deviceId, num); notifyPeer(sender, new InternalPortStatusEvent(provId, deviceId, lPort)); } else if (!lPort.timestamp().equals(advPortTimestamp)) { // local is outdated, request - log.trace("need update {} < {}", lPort.timestamp(), advPortTimestamp); + log.trace("need update {} < {} for port {} from {}", lPort.timestamp(), + advPortTimestamp, num, sender); reqPorts.add(portFragId); } @@ -1483,12 +1508,15 @@ private void handleAdvertisement(DeviceAntiEntropyAdvertisement advertisement) { if (localLatest == null || (rOffline != null && rOffline.compareTo(localLatest) > 0)) { // remote offline timestamp suggests that the // device is off-line + log.trace("remote offline timestamp from {} suggests that the device {} is off-line", + sender, deviceId); markOfflineInternal(deviceId, rOffline); } Timestamp lOffline = offline.get(deviceId); if (lOffline != null && rOffline == null) { // locally offline, but remote is online, suggest offline + log.trace("suggest to {} sthat the device {} is off-line", sender, deviceId); notifyPeer(sender, new InternalDeviceStatusChangeEvent(deviceId, lOffline, false)); } diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index 6b19cc8ff1f..b892460bbdf 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -643,13 +643,35 @@ private void createOrUpdateDevice(DeviceId deviceId, boolean available) { providerService.updatePorts(deviceId, ports); } - if (deviceService.getDevice(deviceId) != null - && deviceService.isAvailable(deviceId) == available) { - // Other nodes might have advertised this device before us. - return; + DeviceDescription deviceDescription = getDeviceDescription(deviceId, available); + DeviceDescription storeDescription = providerService.getDeviceDescription(deviceId); + if (deviceService.getDevice(deviceId) != null && + deviceService.isAvailable(deviceId) == available && + storeDescription != null) { + /* + * FIXME SDFAB-650 rethink the APIs and abstractions around the DeviceStore. + * Device registration is a two-step process for the GDP. Initially, the device is + * registered with default avail. to false. Later, the checkup task will update the + * description with the default avail to true in order to mark it available. Today, + * there is only one API to mark online a device from the device provider which is + * deviceConnected which assumes an update on the device description. The device provider + * is the only one able to update the device description and we have to make sure that + * the default avail. is flipped to true as it is used to mark as online the device when + * it is created or updated. Otherwise, if an ONOS instance fails and restarts, when re-joining + * the cluster, it will get the device marked as offline and will not be able to update + * its status until it become the master. This process concurs with the markOnline done + * by the background thread in the DeviceManager and its the reason why we cannot just check + * the device availability but we need to compare also the desc. Checking here the equality, + * as in general we may want to upgrade the device description at run time. + */ + DeviceDescription testDeviceDescription = DefaultDeviceDescription.copyReplacingAnnotation( + deviceDescription, storeDescription.annotations()); + if (testDeviceDescription.equals(storeDescription)) { + return; + } } - providerService.deviceConnected(deviceId, getDeviceDescription( - deviceId, available)); + + providerService.deviceConnected(deviceId, deviceDescription); } private boolean probeAvailability(DeviceHandshaker handshaker) { From c4338af9a6e9fc848a8d6537adaa3baf668e651f Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 7 Oct 2021 23:56:37 +0000 Subject: [PATCH 145/235] Tagging 2.5.5-rc1 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index cadf82568ae..54a6492d137 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.5-SNAPSHOT"); + private static Version version = Version.version("2.5.5-rc1"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 18164770df8..dfed3a71002 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.5-SNAPSHOT" +ONOS_VERSION = "2.5.5-rc1" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 1d6f22daea2..b72db4fcd08 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.5-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.5.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.5-rc1" +export ONOS_VERSION=${ONOS_VERSION:-2.5.5-rc1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 4b9b7c840f5..0b16c29df72 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index dd6ff53067e..99b80e21981 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index a50381f2c8e..516f22f3f6e 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index ba10887f827..a10e35966f1 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index fe40c753baf..9cf6a4cc677 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index d89968ea0e1..9f53d403896 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index f9751c6b118..c8ca6b8806e 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index de6038bcaaf..8f936a42b95 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index afef4751cc0..cbb92e3f466 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 2edbf673126..fd4a460160d 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 20b7e8735bc..e2ea9e493d7 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 1a8e7f6550c..28b3b5d95a6 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index f1c855e10ff..b69d7edf577 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index be08b4ffa96..c2f3dbd94d2 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 02e01ad68f6..ea08a0ba1e5 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 17cd3ba0e36..ecba830f773 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5-rc1 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 041da4e6879..4d2893bbfcd 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-SNAPSHOT + 2.5.5-rc1 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index f0cfbd34231..7e8b8a561f6 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-rc1" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From eaaaf0dd8786668dbeb89fc1deaf6c3736d1cb88 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 7 Oct 2021 23:56:42 +0000 Subject: [PATCH 146/235] Starting snapshot 2.5.5-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 54a6492d137..cadf82568ae 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.5-rc1"); + private static Version version = Version.version("2.5.5-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index dfed3a71002..18164770df8 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.5-rc1" +ONOS_VERSION = "2.5.5-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index b72db4fcd08..1d6f22daea2 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.5-rc1" -export ONOS_VERSION=${ONOS_VERSION:-2.5.5-rc1.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.5-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.5.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 0b16c29df72..4b9b7c840f5 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 99b80e21981..dd6ff53067e 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 516f22f3f6e..a50381f2c8e 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index a10e35966f1..ba10887f827 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 9cf6a4cc677..fe40c753baf 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 9f53d403896..d89968ea0e1 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index c8ca6b8806e..f9751c6b118 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 8f936a42b95..de6038bcaaf 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index cbb92e3f466..afef4751cc0 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index fd4a460160d..2edbf673126 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index e2ea9e493d7..20b7e8735bc 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 28b3b5d95a6..1a8e7f6550c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index b69d7edf577..f1c855e10ff 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index c2f3dbd94d2..be08b4ffa96 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index ea08a0ba1e5..02e01ad68f6 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index ecba830f773..17cd3ba0e36 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-rc1 + 2.5.5-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 4d2893bbfcd..041da4e6879 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-rc1 + 2.5.5-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 7e8b8a561f6..f0cfbd34231 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-rc1" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 5c7fe3acf43bf1304038a7be55a5fd45e5805396 Mon Sep 17 00:00:00 2001 From: David Glantz Date: Wed, 22 Sep 2021 14:34:14 -0500 Subject: [PATCH 147/235] Fix to reinstall flow rules when they are missing in FlowRuleService. Change-Id: I1e7e0d62e27012cd090f3a72eb92eadc85afafdf --- .../impl/VirtualNetworkFlowRuleManager.java | 5 + .../onosproject/net/flow/FlowRuleService.java | 8 + .../net/flow/FlowRuleServiceAdapter.java | 5 + .../net/flow/impl/FlowRuleManager.java | 7 + .../installer/FlowRuleIntentInstaller.java | 1 + .../net/flow/impl/FlowRuleManagerTest.java | 20 +- .../FlowRuleIntentInstallerTest.java | 214 ++++++++++++++++++ 7 files changed, 259 insertions(+), 1 deletion(-) diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java index 012f3b6dc1d..e2e743af7e5 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java @@ -133,6 +133,11 @@ public int getFlowRuleCount() { return store.getFlowRuleCount(networkId()); } + @Override + public FlowEntry getFlowEntry(FlowRule flowRule) { + return store.getFlowEntry(networkId(), flowRule); + } + @Override public Iterable getFlowEntries(DeviceId deviceId) { return store.getFlowEntries(networkId(), deviceId); diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java index 2b2950483bd..9cada037540 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java @@ -63,6 +63,14 @@ default int getFlowRuleCount(DeviceId deviceId, FlowEntry.FlowEntryState state) return 0; } + /** + * Returns the stored flow. + * + * @param rule the rule to look for + * @return a flow rule + */ + FlowEntry getFlowEntry(FlowRule rule); + /** * Returns the collection of flow entries applied on the specified device. * This will include flow rules which may not yet have been applied to diff --git a/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java index 4f53b969f9d..1ccbbc8220b 100644 --- a/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/flow/FlowRuleServiceAdapter.java @@ -28,6 +28,11 @@ public int getFlowRuleCount() { return 0; } + @Override + public FlowEntry getFlowEntry(FlowRule rule) { + return null; + } + @Override public Iterable getFlowEntries(DeviceId deviceId) { return null; diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index ac97636c75f..9dc92d15776 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -294,6 +294,13 @@ public int getFlowRuleCount(DeviceId deviceId, FlowEntry.FlowEntryState state) { return store.getFlowRuleCount(deviceId, state); } + @Override + public FlowEntry getFlowEntry(FlowRule rule) { + checkPermission(FLOWRULE_READ); + checkNotNull(rule, FLOW_RULE_NULL); + return store.getFlowEntry(rule); + } + @Override public Iterable getFlowEntries(DeviceId deviceId) { checkPermission(FLOWRULE_READ); diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java index b2cdf5a4f94..71cf28c8f77 100644 --- a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java +++ b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java @@ -174,6 +174,7 @@ public void apply(IntentOperationContext context) { flowRulesToUninstall = uninstallIntents.stream() .map(FlowRuleIntent::flowRules) .flatMap(Collection::stream) + .filter(flowRule -> flowRuleService.getFlowEntry(flowRule) != null) .collect(Collectors.toList()); } else { // No flow rules to be uninstalled. diff --git a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java index 38013888336..300b0233807 100644 --- a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java @@ -207,7 +207,7 @@ private FlowRule addFlowRule(int hval) { FlowRule rule = flowRule(hval, hval); service.applyFlowRules(rule); - assertNotNull("rule should be found", service.getFlowEntries(DID)); + assertNotNull("rule should be found", service.getFlowEntry(rule)); return rule; } @@ -233,6 +233,24 @@ private int flowCount() { return Sets.newHashSet(service.getFlowEntries(DID)).size(); } + @Test + public void getFlowEntry() { + assertTrue("store should be empty", + Sets.newHashSet(service.getFlowEntries(DID)).isEmpty()); + FlowRule f1 = addFlowRule(1); + FlowRule f2 = addFlowRule(2); + + FlowEntry fe1 = new DefaultFlowEntry(f1); + FlowEntry fe2 = new DefaultFlowEntry(f2); + assertEquals("2 rules should exist", 2, flowCount()); + + FlowEntry actual1 = service.getFlowEntry(f1); + FlowEntry actual2 = service.getFlowEntry(f2); + + assertEquals(fe1, actual1); + assertEquals(fe2, actual2); + } + @Test public void getFlowEntries() { assertTrue("store should be empty", diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java index 712f8bfe631..5c00a8387d7 100644 --- a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java +++ b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java @@ -26,10 +26,13 @@ import org.onlab.packet.VlanId; import org.onosproject.cfg.ComponentConfigService; import org.onosproject.net.ConnectPoint; +import org.onosproject.net.DeviceId; import org.onosproject.net.NetworkResource; +import org.onosproject.net.flow.DefaultFlowEntry; import org.onosproject.net.flow.DefaultFlowRule; import org.onosproject.net.flow.DefaultTrafficSelector; import org.onosproject.net.flow.DefaultTrafficTreatment; +import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleOperation; import org.onosproject.net.flow.FlowRuleOperations; @@ -141,6 +144,8 @@ public void testUninstallOnly() { IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + flowRuleService.load(operationContext.intentsToUninstall()); + installer.apply(operationContext); IntentOperationContext successContext = intentInstallCoordinator.successContext; @@ -155,6 +160,36 @@ public void testUninstallOnly() { assertEquals(expectedFlowRules, flowRuleService.flowRulesRemove); } + /** + * Uninstalls Intents only, no Intents to be install. However, the flow rules do not exist + * in the FlowRuleService. + */ + @Test + public void testUninstallOnlyMissing() { + List intentsToInstall = Lists.newArrayList(); + List intentsToUninstall = createFlowRuleIntents(); + + IntentData toInstall = null; + IntentData toUninstall = new IntentData(createP2PIntent(), + IntentState.WITHDRAWING, + new WallClockTimestamp()); + toUninstall = IntentData.compiled(toUninstall, intentsToUninstall); + + + IntentOperationContext operationContext; + IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); + operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + + installer.apply(operationContext); + + IntentOperationContext successContext = intentInstallCoordinator.successContext; + assertEquals(successContext, operationContext); + + assertEquals(0, flowRuleService.flowRulesRemove.size()); + assertEquals(0, flowRuleService.flowRulesAdd.size()); + assertEquals(0, flowRuleService.flowRulesModify.size()); + } + /** * Do both install and uninstall Intents with different flow rules. */ @@ -176,6 +211,8 @@ public void testUninstallAndInstall() { IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + flowRuleService.load(operationContext.intentsToUninstall()); + installer.apply(operationContext); IntentOperationContext successContext = intentInstallCoordinator.successContext; @@ -198,6 +235,46 @@ public void testUninstallAndInstall() { assertEquals(expectedFlowRules, flowRuleService.flowRulesAdd); } + /** + * Do both install and uninstall Intents with different flow rules. However, the flow rules do not exist + * in the FlowRuleService. + */ + @Test + public void testUninstallAndInstallMissing() { + List intentsToInstall = createAnotherFlowRuleIntents(); + List intentsToUninstall = createFlowRuleIntents(); + + IntentData toInstall = new IntentData(createP2PIntent(), + IntentState.INSTALLING, + new WallClockTimestamp()); + toInstall = IntentData.compiled(toInstall, intentsToInstall); + IntentData toUninstall = new IntentData(createP2PIntent(), + IntentState.INSTALLED, + new WallClockTimestamp()); + toUninstall = IntentData.compiled(toUninstall, intentsToUninstall); + + IntentOperationContext operationContext; + IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); + operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + + installer.apply(operationContext); + + IntentOperationContext successContext = intentInstallCoordinator.successContext; + assertEquals(successContext, operationContext); + + Set expectedFlowRules = Sets.newHashSet(); + + assertEquals(expectedFlowRules, flowRuleService.flowRulesRemove); + + expectedFlowRules = intentsToInstall.stream() + .map(intent -> (FlowRuleIntent) intent) + .map(FlowRuleIntent::flowRules) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + assertEquals(expectedFlowRules, flowRuleService.flowRulesAdd); + } + /** * Do both install and uninstall Intents with same flow rules. */ @@ -219,6 +296,8 @@ public void testUninstallAndInstallUnchanged() { IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + flowRuleService.load(operationContext.intentsToUninstall()); + installer.apply(operationContext); IntentOperationContext successContext = intentInstallCoordinator.successContext; @@ -229,6 +308,38 @@ public void testUninstallAndInstallUnchanged() { assertEquals(0, flowRuleService.flowRulesModify.size()); } + /** + * Do both install and uninstall Intents with same flow rules. However, the flow rules do not exist + * in the FlowRuleService. + */ + @Test + public void testUninstallAndInstallUnchangedMissing() { + List intentsToInstall = createFlowRuleIntents(); + List intentsToUninstall = createFlowRuleIntents(); + + IntentData toInstall = new IntentData(createP2PIntent(), + IntentState.INSTALLING, + new WallClockTimestamp()); + toInstall = IntentData.compiled(toInstall, intentsToInstall); + IntentData toUninstall = new IntentData(createP2PIntent(), + IntentState.INSTALLED, + new WallClockTimestamp()); + toUninstall = IntentData.compiled(toUninstall, intentsToUninstall); + + IntentOperationContext operationContext; + IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); + operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + + installer.apply(operationContext); + + IntentOperationContext successContext = intentInstallCoordinator.successContext; + assertEquals(successContext, operationContext); + + assertEquals(0, flowRuleService.flowRulesRemove.size()); + assertEquals(1, flowRuleService.flowRulesAdd.size()); + assertEquals(0, flowRuleService.flowRulesModify.size()); + } + /** * Do both install and uninstall Intents with same flow rule Intent. */ @@ -250,6 +361,8 @@ public void testUninstallAndInstallSame() { IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + flowRuleService.load(operationContext.intentsToUninstall()); + installer.apply(operationContext); IntentOperationContext successContext = intentInstallCoordinator.successContext; @@ -260,6 +373,38 @@ public void testUninstallAndInstallSame() { assertEquals(0, flowRuleService.flowRulesModify.size()); } + /** + * Do both install and uninstall Intents with same flow rule Intent. However, the flow rules do not exist + * in the FlowRuleService. + */ + @Test + public void testUninstallAndInstallSameMissing() { + List intentsToInstall = createFlowRuleIntents(); + List intentsToUninstall = intentsToInstall; + + IntentData toInstall = new IntentData(createP2PIntent(), + IntentState.INSTALLING, + new WallClockTimestamp()); + toInstall = IntentData.compiled(toInstall, intentsToInstall); + IntentData toUninstall = new IntentData(createP2PIntent(), + IntentState.INSTALLED, + new WallClockTimestamp()); + toUninstall = IntentData.compiled(toUninstall, intentsToUninstall); + + IntentOperationContext operationContext; + IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); + operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + + installer.apply(operationContext); + + IntentOperationContext successContext = intentInstallCoordinator.successContext; + assertEquals(successContext, operationContext); + + assertEquals(0, flowRuleService.flowRulesRemove.size()); + assertEquals(1, flowRuleService.flowRulesAdd.size()); + assertEquals(0, flowRuleService.flowRulesModify.size()); + } + /** * Nothing to uninstall or install. */ @@ -327,6 +472,8 @@ public void testRuleModify() { IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + flowRuleService.load(operationContext.intentsToUninstall()); + installer.apply(operationContext); IntentOperationContext successContext = intentInstallCoordinator.successContext; @@ -341,6 +488,42 @@ public void testRuleModify() { assertTrue(flowRuleService.flowRulesModify.containsAll(installedIntent.flowRules())); } + /** + * Test intents with same match rules, should do modify instead of add. However, the flow rules do not exist + * in the FlowRuleService. + */ + @Test + public void testRuleModifyMissing() { + List intentsToInstall = createFlowRuleIntents(); + List intentsToUninstall = createFlowRuleIntentsWithSameMatch(); + + IntentData toInstall = new IntentData(createP2PIntent(), + IntentState.INSTALLING, + new WallClockTimestamp()); + toInstall = IntentData.compiled(toInstall, intentsToInstall); + IntentData toUninstall = new IntentData(createP2PIntent(), + IntentState.INSTALLED, + new WallClockTimestamp()); + toUninstall = IntentData.compiled(toUninstall, intentsToUninstall); + + IntentOperationContext operationContext; + IntentInstallationContext context = new IntentInstallationContext(toUninstall, toInstall); + operationContext = new IntentOperationContext(intentsToUninstall, intentsToInstall, context); + + installer.apply(operationContext); + + IntentOperationContext successContext = intentInstallCoordinator.successContext; + assertEquals(successContext, operationContext); + + assertEquals(0, flowRuleService.flowRulesRemove.size()); + assertEquals(1, flowRuleService.flowRulesAdd.size()); + assertEquals(0, flowRuleService.flowRulesModify.size()); + + FlowRuleIntent installedIntent = (FlowRuleIntent) intentsToInstall.get(0); + assertEquals(flowRuleService.flowRulesAdd.size(), installedIntent.flowRules().size()); + assertTrue(flowRuleService.flowRulesAdd.containsAll(installedIntent.flowRules())); + } + /** * Testing the non-disruptive reallocation. */ @@ -690,15 +873,43 @@ public List createAnotherFlowRuleIntentsNonDisruptive() { return flowRuleIntents; } + + /** * The FlowRuleService for test; always success for any flow rule operations. */ class TestFlowRuleService extends FlowRuleServiceAdapter { + Set flowEntries = Sets.newHashSet(); Set flowRulesAdd = Sets.newHashSet(); Set flowRulesModify = Sets.newHashSet(); Set flowRulesRemove = Sets.newHashSet(); + @Override + public FlowEntry getFlowEntry(FlowRule flowRule) { + for (FlowEntry entry : flowEntries) { + if (entry.id().equals(flowRule.id()) && entry.deviceId().equals(flowRule.deviceId())) { + return entry; + } + } + return null; + } + + @Override + public Iterable getFlowEntries(DeviceId deviceId) { + return flowEntries.stream() + .filter(flow -> flow.deviceId().equals(deviceId)) + .collect(Collectors.toList()); + } + + public void load(List intents) { + for (FlowRuleIntent flowRuleIntent : intents) { + for (FlowRule flowRule : flowRuleIntent.flowRules()) { + flowEntries.add(new DefaultFlowEntry(flowRule, FlowEntry.FlowEntryState.ADDED)); + } + } + } + public void record(FlowRuleOperations ops) { flowRulesAdd.clear(); flowRulesRemove.clear(); @@ -706,12 +917,15 @@ public void record(FlowRuleOperations ops) { stage.forEach(op -> { switch (op.type()) { case ADD: + flowEntries.add(new DefaultFlowEntry(op.rule(), FlowEntry.FlowEntryState.ADDED)); flowRulesAdd.add(op.rule()); break; case REMOVE: + flowEntries.remove(new DefaultFlowEntry(op.rule(), FlowEntry.FlowEntryState.ADDED)); flowRulesRemove.add(op.rule()); break; case MODIFY: + flowEntries.add(new DefaultFlowEntry(op.rule(), FlowEntry.FlowEntryState.ADDED)); flowRulesModify.add(op.rule()); default: break; From 78c3927f536753060f9ff2f65c4ac973c6d7cc38 Mon Sep 17 00:00:00 2001 From: Miguel Borges de Freitas Date: Sat, 9 Oct 2021 19:08:19 +0100 Subject: [PATCH 148/235] [OpenFlow] Save dp_desc as a device annotation dp_desc represents the human readable description of a given datapath and is provided by an OpenFlow switch when it connects to the controller in the response to the OFPMP_DESC request. ONOS already has access to this information when the OpenFlowSwitch object is constructed (accessed via sw.datapathDescription()) but it does not save it or propagate it in any way. dp_desc, unlike the dp_id which is "random", works like a switch label. Accessing this information from the controller app layer is important so that different business logic can be applied according to the provided "marking". Thus, save the value into the Device Annotations if available. Change-Id: Ifaa715a0440e99ce31fdd8d4753c2e892385e33b --- .../src/main/java/org/onosproject/net/AnnotationKeys.java | 7 +++++++ .../provider/of/device/impl/OpenFlowDeviceProvider.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java b/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java index f7eca85d5bc..a22b7688f87 100644 --- a/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java +++ b/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java @@ -265,6 +265,13 @@ private AnnotationKeys() { */ public static final String TIER = "tier"; + /** + * Annotation key for the datapath description. + * Provides a human readable description of a given datapath. Used, for instance, when an Openflow + * switch connects to the controller, in the response to the OFPMP_DESC request + */ + public static final String DATAPATH_DESCRIPTION = "datapathDescription"; + /** * Returns the value annotated object for the specified annotation key. * The annotated value is expected to be String that can be parsed as double. diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java index cb389e34bad..fdc3ff36eb8 100644 --- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java +++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java @@ -797,6 +797,10 @@ public void switchAdded(Dpid dpid) { .set(AnnotationKeys.CHANNEL_ID, sw.channelId()) .set(AnnotationKeys.MANAGEMENT_ADDRESS, sw.channelId().split(":")[0]); + if (sw.datapathDescription() != null && !sw.datapathDescription().isEmpty()) { + annotationsBuilder.set(AnnotationKeys.DATAPATH_DESCRIPTION, sw.datapathDescription()); + } + // FIXME following ignores driver specified by name Driver driver = driverService.getDriver(sw.manufacturerDescription(), sw.hardwareDescription(), From c4d6a7ce658d595d9c8d1c270cf5f469c1d3e1b7 Mon Sep 17 00:00:00 2001 From: David Glantz Date: Wed, 6 Oct 2021 11:33:16 -0500 Subject: [PATCH 149/235] Log exception message when intent compiling fails Change-Id: Ied046c31e512504b45ba92023996d400574d5128 --- .../java/org/onosproject/net/intent/impl/phase/Compiling.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java index 9eb3106ad6c..d42df803ae5 100644 --- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java +++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java @@ -59,7 +59,7 @@ public Optional execute() { stored.map(IntentData::installables).orElse(null)); return Optional.of(new Installing(processor, IntentData.compiled(data, compiled), stored)); } catch (IntentException e) { - log.warn("Unable to compile intent {} due to:", data.intent(), e.getMessage()); + log.warn("Unable to compile intent {} due to:", data.intent(), e); if (stored.filter(x -> !x.installables().isEmpty()).isPresent()) { // removing orphaned flows and deallocating resources return Optional.of(new Withdrawing(processor, IntentData.compiled(data, stored.get().installables()))); From 7aa03d70d9afd41118cc9434c5af2f2e0d159971 Mon Sep 17 00:00:00 2001 From: Sean Condon Date: Thu, 21 Oct 2021 15:37:11 +0100 Subject: [PATCH 150/235] ensure that the tests for forcesvg can be run by inlining JSON Change-Id: I432025c8c02105f4a47fbdbb52384a6514efb495 --- web/gui2-topo-lib/BUILD.bazel | 6 +- .../layer/forcesvg/forcesvg.component.spec.ts | 1801 ++++++++++++++++- .../test-OdtnConfig-topo2CurrentRegion.json | 165 -- .../tests/test-module-topo2CurrentRegion.json | 1204 ----------- .../tests/topo2Highlights-base-data.json | 380 ---- .../tests/topo2Highlights-sample.json | 39 - 6 files changed, 1801 insertions(+), 1794 deletions(-) delete mode 100644 web/gui2-topo-lib/lib/layer/forcesvg/tests/test-OdtnConfig-topo2CurrentRegion.json delete mode 100644 web/gui2-topo-lib/lib/layer/forcesvg/tests/test-module-topo2CurrentRegion.json delete mode 100644 web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-base-data.json delete mode 100644 web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-sample.json diff --git a/web/gui2-topo-lib/BUILD.bazel b/web/gui2-topo-lib/BUILD.bazel index 82052f6b7d0..d104636270a 100644 --- a/web/gui2-topo-lib/BUILD.bazel +++ b/web/gui2-topo-lib/BUILD.bazel @@ -45,7 +45,6 @@ ts_library( # TODO re-enable this test exclude = [ "lib/layer/backgroundsvg/backgroundsvg.component.spec.ts", - "lib/layer/forcesvg/forcesvg.component.spec.ts", "lib/layer/forcesvg/visuals/hostnodesvg/hostnodesvg.component.spec.ts", ], ), @@ -147,6 +146,9 @@ genrule( && echo '});' >> $@""", ) +# These tests are not run as part of CI because they require a browser to be installed +# Run them locally on your system if you are making a change to any of the TypeScript files +# bazel test //web/gui2-topo-lib:test-not-coverage karma_web_test( name = "test-not-coverage", # coverage is to avoid being picked up by 'ot' alias srcs = [ @@ -156,7 +158,7 @@ karma_web_test( "@npm//:node_modules/zone.js/dist/zone-testing-bundle.js", "@npm//:node_modules/reflect-metadata/Reflect.js", ], - config_file = "//web/gui2/src/main/webapp:karma.conf.js", + config_file = "//web/gui2/src/main/webapp:karma.conf.js", # Edit this file to set the Browsers needed tags = ["native"], runtime_deps = [ "//web/gui2/src/main/webapp:initialize_testbed", diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts index ba9c996ab9f..5ebc0d66f19 100644 --- a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts +++ b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts @@ -35,6 +35,1799 @@ import {ChangeDetectorRef, SimpleChange} from '@angular/core'; import {TopologyService} from '../../topology.service'; import {BadgeSvgComponent} from './visuals/badgesvg/badgesvg.component'; +export const test_module_topo2CurrentRegion = `{ + "event": "topo2CurrentRegion", + "payload": { + "id": "(root)", + "subregions": [], + "links": [ + { + "id": "00:AA:00:00:00:03/None~of:0000000000000205/6", + "epA": "00:AA:00:00:00:03/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "6", + "rollup": [ + { + "id": "00:AA:00:00:00:03/None~of:0000000000000205/6", + "epA": "00:AA:00:00:00:03/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "6" + } + ] + }, + { + "id": "of:0000000000000205/3~of:0000000000000227/5", + "epA": "of:0000000000000205/3", + "epB": "of:0000000000000227/5", + "type": "UiDeviceLink", + "portA": "3", + "portB": "5", + "rollup": [ + { + "id": "of:0000000000000205/3~of:0000000000000227/5", + "epA": "of:0000000000000205/3", + "epB": "of:0000000000000227/5", + "type": "UiDeviceLink", + "portA": "3", + "portB": "5" + } + ] + }, + { + "id": "of:0000000000000206/2~of:0000000000000226/8", + "epA": "of:0000000000000206/2", + "epB": "of:0000000000000226/8", + "type": "UiDeviceLink", + "portA": "2", + "portB": "8", + "rollup": [ + { + "id": "of:0000000000000206/2~of:0000000000000226/8", + "epA": "of:0000000000000206/2", + "epB": "of:0000000000000226/8", + "type": "UiDeviceLink", + "portA": "2", + "portB": "8" + } + ] + }, + { + "id": "00:BB:00:00:00:05/None~of:0000000000000203/7", + "epA": "00:BB:00:00:00:05/None", + "epB": "of:0000000000000203", + "type": "UiEdgeLink", + "portB": "7", + "rollup": [ + { + "id": "00:BB:00:00:00:05/None~of:0000000000000203/7", + "epA": "00:BB:00:00:00:05/None", + "epB": "of:0000000000000203", + "type": "UiEdgeLink", + "portB": "7" + } + ] + }, + { + "id": "00:DD:00:00:00:01/None~of:0000000000000207/3", + "epA": "00:DD:00:00:00:01/None", + "epB": "of:0000000000000207", + "type": "UiEdgeLink", + "portB": "3", + "rollup": [ + { + "id": "00:DD:00:00:00:01/None~of:0000000000000207/3", + "epA": "00:DD:00:00:00:01/None", + "epB": "of:0000000000000207", + "type": "UiEdgeLink", + "portB": "3" + } + ] + }, + { + "id": "of:0000000000000203/1~of:0000000000000226/1", + "epA": "of:0000000000000203/1", + "epB": "of:0000000000000226/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1", + "rollup": [ + { + "id": "of:0000000000000203/1~of:0000000000000226/1", + "epA": "of:0000000000000203/1", + "epB": "of:0000000000000226/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1" + } + ] + }, + { + "id": "of:0000000000000207/2~of:0000000000000247/1", + "epA": "of:0000000000000207/2", + "epB": "of:0000000000000247/1", + "type": "UiDeviceLink", + "portA": "2", + "portB": "1", + "rollup": [ + { + "id": "of:0000000000000207/2~of:0000000000000247/1", + "epA": "of:0000000000000207/2", + "epB": "of:0000000000000247/1", + "type": "UiDeviceLink", + "portA": "2", + "portB": "1" + } + ] + }, + { + "id": "00:99:66:00:00:01/None~of:0000000000000205/10", + "epA": "00:99:66:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "10", + "rollup": [ + { + "id": "00:99:66:00:00:01/None~of:0000000000000205/10", + "epA": "00:99:66:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "10" + } + ] + }, + { + "id": "of:0000000000000208/1~of:0000000000000246/2", + "epA": "of:0000000000000208/1", + "epB": "of:0000000000000246/2", + "type": "UiDeviceLink", + "portA": "1", + "portB": "2", + "rollup": [ + { + "id": "of:0000000000000208/1~of:0000000000000246/2", + "epA": "of:0000000000000208/1", + "epB": "of:0000000000000246/2", + "type": "UiDeviceLink", + "portA": "1", + "portB": "2" + } + ] + }, + { + "id": "of:0000000000000206/1~of:0000000000000226/7", + "epA": "of:0000000000000206/1", + "epB": "of:0000000000000226/7", + "type": "UiDeviceLink", + "portA": "1", + "portB": "7", + "rollup": [ + { + "id": "of:0000000000000206/1~of:0000000000000226/7", + "epA": "of:0000000000000206/1", + "epB": "of:0000000000000226/7", + "type": "UiDeviceLink", + "portA": "1", + "portB": "7" + } + ] + }, + { + "id": "of:0000000000000226/9~of:0000000000000246/3", + "epA": "of:0000000000000226/9", + "epB": "of:0000000000000246/3", + "type": "UiDeviceLink", + "portA": "9", + "portB": "3", + "rollup": [ + { + "id": "of:0000000000000226/9~of:0000000000000246/3", + "epA": "of:0000000000000226/9", + "epB": "of:0000000000000246/3", + "type": "UiDeviceLink", + "portA": "9", + "portB": "3" + } + ] + }, + { + "id": "00:AA:00:00:00:04/None~of:0000000000000205/7", + "epA": "00:AA:00:00:00:04/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "7", + "rollup": [ + { + "id": "00:AA:00:00:00:04/None~of:0000000000000205/7", + "epA": "00:AA:00:00:00:04/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "7" + } + ] + }, + { + "id": "00:88:00:00:00:03/110~of:0000000000000205/11", + "epA": "00:88:00:00:00:03/110", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "11", + "rollup": [ + { + "id": "00:88:00:00:00:03/110~of:0000000000000205/11", + "epA": "00:88:00:00:00:03/110", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "11" + } + ] + }, + { + "id": "of:0000000000000204/1~of:0000000000000226/3", + "epA": "of:0000000000000204/1", + "epB": "of:0000000000000226/3", + "type": "UiDeviceLink", + "portA": "1", + "portB": "3", + "rollup": [ + { + "id": "of:0000000000000204/1~of:0000000000000226/3", + "epA": "of:0000000000000204/1", + "epB": "of:0000000000000226/3", + "type": "UiDeviceLink", + "portA": "1", + "portB": "3" + } + ] + }, + { + "id": "of:0000000000000203/2~of:0000000000000226/2", + "epA": "of:0000000000000203/2", + "epB": "of:0000000000000226/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2", + "rollup": [ + { + "id": "of:0000000000000203/2~of:0000000000000226/2", + "epA": "of:0000000000000203/2", + "epB": "of:0000000000000226/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2" + } + ] + }, + { + "id": "00:88:00:00:00:01/None~of:0000000000000205/12", + "epA": "00:88:00:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "12", + "rollup": [ + { + "id": "00:88:00:00:00:01/None~of:0000000000000205/12", + "epA": "00:88:00:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "12" + } + ] + }, + { + "id": "00:88:00:00:00:04/160~of:0000000000000206/6", + "epA": "00:88:00:00:00:04/160", + "epB": "of:0000000000000206", + "type": "UiEdgeLink", + "portB": "6", + "rollup": [ + { + "id": "00:88:00:00:00:04/160~of:0000000000000206/6", + "epA": "00:88:00:00:00:04/160", + "epB": "of:0000000000000206", + "type": "UiEdgeLink", + "portB": "6" + } + ] + }, + { + "id": "00:DD:00:00:00:02/None~of:0000000000000208/3", + "epA": "00:DD:00:00:00:02/None", + "epB": "of:0000000000000208", + "type": "UiEdgeLink", + "portB": "3", + "rollup": [ + { + "id": "00:DD:00:00:00:02/None~of:0000000000000208/3", + "epA": "00:DD:00:00:00:02/None", + "epB": "of:0000000000000208", + "type": "UiEdgeLink", + "portB": "3" + } + ] + }, + { + "id": "of:0000000000000203/3~of:0000000000000227/1", + "epA": "of:0000000000000203/3", + "epB": "of:0000000000000227/1", + "type": "UiDeviceLink", + "portA": "3", + "portB": "1", + "rollup": [ + { + "id": "of:0000000000000203/3~of:0000000000000227/1", + "epA": "of:0000000000000203/3", + "epB": "of:0000000000000227/1", + "type": "UiDeviceLink", + "portA": "3", + "portB": "1" + } + ] + }, + { + "id": "of:0000000000000208/2~of:0000000000000247/2", + "epA": "of:0000000000000208/2", + "epB": "of:0000000000000247/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2", + "rollup": [ + { + "id": "of:0000000000000208/2~of:0000000000000247/2", + "epA": "of:0000000000000208/2", + "epB": "of:0000000000000247/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2" + } + ] + }, + { + "id": "of:0000000000000205/1~of:0000000000000226/5", + "epA": "of:0000000000000205/1", + "epB": "of:0000000000000226/5", + "type": "UiDeviceLink", + "portA": "1", + "portB": "5", + "rollup": [ + { + "id": "of:0000000000000205/1~of:0000000000000226/5", + "epA": "of:0000000000000205/1", + "epB": "of:0000000000000226/5", + "type": "UiDeviceLink", + "portA": "1", + "portB": "5" + } + ] + }, + { + "id": "of:0000000000000204/2~of:0000000000000226/4", + "epA": "of:0000000000000204/2", + "epB": "of:0000000000000226/4", + "type": "UiDeviceLink", + "portA": "2", + "portB": "4", + "rollup": [ + { + "id": "of:0000000000000204/2~of:0000000000000226/4", + "epA": "of:0000000000000204/2", + "epB": "of:0000000000000226/4", + "type": "UiDeviceLink", + "portA": "2", + "portB": "4" + } + ] + }, + { + "id": "00:AA:00:00:00:01/None~of:0000000000000204/6", + "epA": "00:AA:00:00:00:01/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "6", + "rollup": [ + { + "id": "00:AA:00:00:00:01/None~of:0000000000000204/6", + "epA": "00:AA:00:00:00:01/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "6" + } + ] + }, + { + "id": "00:BB:00:00:00:03/None~of:0000000000000205/8", + "epA": "00:BB:00:00:00:03/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "8", + "rollup": [ + { + "id": "00:BB:00:00:00:03/None~of:0000000000000205/8", + "epA": "00:BB:00:00:00:03/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "8" + } + ] + }, + { + "id": "of:0000000000000206/4~of:0000000000000227/8", + "epA": "of:0000000000000206/4", + "epB": "of:0000000000000227/8", + "type": "UiDeviceLink", + "portA": "4", + "portB": "8", + "rollup": [ + { + "id": "of:0000000000000206/4~of:0000000000000227/8", + "epA": "of:0000000000000206/4", + "epB": "of:0000000000000227/8", + "type": "UiDeviceLink", + "portA": "4", + "portB": "8" + } + ] + }, + { + "id": "00:AA:00:00:00:05/None~of:0000000000000203/6", + "epA": "00:AA:00:00:00:05/None", + "epB": "of:0000000000000203", + "type": "UiEdgeLink", + "portB": "6", + "rollup": [ + { + "id": "00:AA:00:00:00:05/None~of:0000000000000203/6", + "epA": "00:AA:00:00:00:05/None", + "epB": "of:0000000000000203", + "type": "UiEdgeLink", + "portB": "6" + } + ] + }, + { + "id": "of:0000000000000205/5~of:0000000000000206/5", + "epA": "of:0000000000000205/5", + "epB": "of:0000000000000206/5", + "type": "UiDeviceLink", + "portA": "5", + "portB": "5", + "rollup": [ + { + "id": "of:0000000000000205/5~of:0000000000000206/5", + "epA": "of:0000000000000205/5", + "epB": "of:0000000000000206/5", + "type": "UiDeviceLink", + "portA": "5", + "portB": "5" + } + ] + }, + { + "id": "00:BB:00:00:00:02/None~of:0000000000000204/9", + "epA": "00:BB:00:00:00:02/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "9", + "rollup": [ + { + "id": "00:BB:00:00:00:02/None~of:0000000000000204/9", + "epA": "00:BB:00:00:00:02/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "9" + } + ] + }, + { + "id": "of:0000000000000204/3~of:0000000000000227/3", + "epA": "of:0000000000000204/3", + "epB": "of:0000000000000227/3", + "type": "UiDeviceLink", + "portA": "3", + "portB": "3", + "rollup": [ + { + "id": "of:0000000000000204/3~of:0000000000000227/3", + "epA": "of:0000000000000204/3", + "epB": "of:0000000000000227/3", + "type": "UiDeviceLink", + "portA": "3", + "portB": "3" + } + ] + }, + { + "id": "00:EE:00:00:00:01/None~of:0000000000000207/4", + "epA": "00:EE:00:00:00:01/None", + "epB": "of:0000000000000207", + "type": "UiEdgeLink", + "portB": "4", + "rollup": [ + { + "id": "00:EE:00:00:00:01/None~of:0000000000000207/4", + "epA": "00:EE:00:00:00:01/None", + "epB": "of:0000000000000207", + "type": "UiEdgeLink", + "portB": "4" + } + ] + }, + { + "id": "of:0000000000000203/4~of:0000000000000227/2", + "epA": "of:0000000000000203/4", + "epB": "of:0000000000000227/2", + "type": "UiDeviceLink", + "portA": "4", + "portB": "2", + "rollup": [ + { + "id": "of:0000000000000203/4~of:0000000000000227/2", + "epA": "of:0000000000000203/4", + "epB": "of:0000000000000227/2", + "type": "UiDeviceLink", + "portA": "4", + "portB": "2" + } + ] + }, + { + "id": "of:0000000000000205/2~of:0000000000000226/6", + "epA": "of:0000000000000205/2", + "epB": "of:0000000000000226/6", + "type": "UiDeviceLink", + "portA": "2", + "portB": "6", + "rollup": [ + { + "id": "of:0000000000000205/2~of:0000000000000226/6", + "epA": "of:0000000000000205/2", + "epB": "of:0000000000000226/6", + "type": "UiDeviceLink", + "portA": "2", + "portB": "6" + } + ] + }, + { + "id": "00:99:00:00:00:01/None~of:0000000000000205/10", + "epA": "00:99:00:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "10", + "rollup": [ + { + "id": "00:99:00:00:00:01/None~of:0000000000000205/10", + "epA": "00:99:00:00:00:01/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "10" + } + ] + }, + { + "id": "of:0000000000000205/4~of:0000000000000227/6", + "epA": "of:0000000000000205/4", + "epB": "of:0000000000000227/6", + "type": "UiDeviceLink", + "portA": "4", + "portB": "6", + "rollup": [ + { + "id": "of:0000000000000205/4~of:0000000000000227/6", + "epA": "of:0000000000000205/4", + "epB": "of:0000000000000227/6", + "type": "UiDeviceLink", + "portA": "4", + "portB": "6" + } + ] + }, + { + "id": "of:0000000000000206/3~of:0000000000000227/7", + "epA": "of:0000000000000206/3", + "epB": "of:0000000000000227/7", + "type": "UiDeviceLink", + "portA": "3", + "portB": "7", + "rollup": [ + { + "id": "of:0000000000000206/3~of:0000000000000227/7", + "epA": "of:0000000000000206/3", + "epB": "of:0000000000000227/7", + "type": "UiDeviceLink", + "portA": "3", + "portB": "7" + } + ] + }, + { + "id": "00:BB:00:00:00:04/None~of:0000000000000205/9", + "epA": "00:BB:00:00:00:04/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "9", + "rollup": [ + { + "id": "00:BB:00:00:00:04/None~of:0000000000000205/9", + "epA": "00:BB:00:00:00:04/None", + "epB": "of:0000000000000205", + "type": "UiEdgeLink", + "portB": "9" + } + ] + }, + { + "id": "00:AA:00:00:00:02/None~of:0000000000000204/7", + "epA": "00:AA:00:00:00:02/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "7", + "rollup": [ + { + "id": "00:AA:00:00:00:02/None~of:0000000000000204/7", + "epA": "00:AA:00:00:00:02/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "7" + } + ] + }, + { + "id": "00:BB:00:00:00:01/None~of:0000000000000204/8", + "epA": "00:BB:00:00:00:01/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "8", + "rollup": [ + { + "id": "00:BB:00:00:00:01/None~of:0000000000000204/8", + "epA": "00:BB:00:00:00:01/None", + "epB": "of:0000000000000204", + "type": "UiEdgeLink", + "portB": "8" + } + ] + }, + { + "id": "of:0000000000000207/1~of:0000000000000246/1", + "epA": "of:0000000000000207/1", + "epB": "of:0000000000000246/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1", + "rollup": [ + { + "id": "of:0000000000000207/1~of:0000000000000246/1", + "epA": "of:0000000000000207/1", + "epB": "of:0000000000000246/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1" + } + ] + }, + { + "id": "00:88:00:00:00:02/None~of:0000000000000206/7", + "epA": "00:88:00:00:00:02/None", + "epB": "of:0000000000000206", + "type": "UiEdgeLink", + "portB": "7", + "rollup": [ + { + "id": "00:88:00:00:00:02/None~of:0000000000000206/7", + "epA": "00:88:00:00:00:02/None", + "epB": "of:0000000000000206", + "type": "UiEdgeLink", + "portB": "7" + } + ] + }, + { + "id": "00:EE:00:00:00:02/None~of:0000000000000208/4", + "epA": "00:EE:00:00:00:02/None", + "epB": "of:0000000000000208", + "type": "UiEdgeLink", + "portB": "4", + "rollup": [ + { + "id": "00:EE:00:00:00:02/None~of:0000000000000208/4", + "epA": "00:EE:00:00:00:02/None", + "epB": "of:0000000000000208", + "type": "UiEdgeLink", + "portB": "4" + } + ] + }, + { + "id": "of:0000000000000204/4~of:0000000000000227/4", + "epA": "of:0000000000000204/4", + "epB": "of:0000000000000227/4", + "type": "UiDeviceLink", + "portA": "4", + "portB": "4", + "rollup": [ + { + "id": "of:0000000000000204/4~of:0000000000000227/4", + "epA": "of:0000000000000204/4", + "epB": "of:0000000000000227/4", + "type": "UiDeviceLink", + "portA": "4", + "portB": "4" + } + ] + }, + { + "id": "of:0000000000000203/5~of:0000000000000204/5", + "epA": "of:0000000000000203/5", + "epB": "of:0000000000000204/5", + "type": "UiDeviceLink", + "portA": "5", + "portB": "5", + "rollup": [ + { + "id": "of:0000000000000203/5~of:0000000000000204/5", + "epA": "of:0000000000000203/5", + "epB": "of:0000000000000204/5", + "type": "UiDeviceLink", + "portA": "5", + "portB": "5" + } + ] + }, + { + "id": "of:0000000000000227/9~of:0000000000000247/3", + "epA": "of:0000000000000227/9", + "epB": "of:0000000000000247/3", + "type": "UiDeviceLink", + "portA": "9", + "portB": "3", + "rollup": [ + { + "id": "of:0000000000000227/9~of:0000000000000247/3", + "epA": "of:0000000000000227/9", + "epB": "of:0000000000000247/3", + "type": "UiDeviceLink", + "portA": "9", + "portB": "3" + } + ] + } + ], + "devices": [ + [], + [], + [ + { + "id": "of:0000000000000246", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "40.15", + "name": "s246", + "locType": "geo", + "channelId": "10.192.19.69:59980", + "longitude": "-121.679" + }, + "location": { + "locType": "geo", + "latOrY": 40.15, + "longOrX": -121.679 + } + }, + { + "id": "of:0000000000000206", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s206", + "locType": "geo", + "channelId": "10.192.19.69:59975", + "longitude": "-92.029" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -92.029 + } + }, + { + "id": "of:0000000000000227", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "44.205", + "name": "s227", + "locType": "geo", + "channelId": "10.192.19.69:59979", + "longitude": "-96.359" + }, + "location": { + "locType": "geo", + "latOrY": 44.205, + "longOrX": -96.359 + } + }, + { + "id": "of:0000000000000208", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s208", + "locType": "geo", + "channelId": "10.192.19.69:59977", + "longitude": "-116.029" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -116.029 + } + }, + { + "id": "of:0000000000000205", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s205", + "locType": "geo", + "channelId": "10.192.19.69:59974", + "longitude": "-96.89" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -96.89 + } + }, + { + "id": "of:0000000000000247", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "40.205", + "name": "s247", + "locType": "geo", + "channelId": "10.192.19.69:59981", + "longitude": "-117.359" + }, + "location": { + "locType": "geo", + "latOrY": 40.205, + "longOrX": -117.359 + } + }, + { + "id": "of:0000000000000226", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "44.15", + "name": "s226", + "locType": "geo", + "channelId": "10.192.19.69:59978", + "longitude": "-107.679" + }, + "location": { + "locType": "geo", + "latOrY": 44.15, + "longOrX": -107.679 + } + }, + { + "id": "of:0000000000000203", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s203", + "locType": "geo", + "channelId": "10.192.19.69:59972", + "longitude": "-111.359" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -111.359 + } + }, + { + "id": "of:0000000000000204", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s204", + "locType": "geo", + "channelId": "10.192.19.69:59973", + "longitude": "-106.359" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -106.359 + } + }, + { + "id": "of:0000000000000207", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "10.192.19.68", + "layer": "def", + "props": { + "managementAddress": "10.192.19.69", + "protocol": "OF_13", + "driver": "ofdpa-ovs", + "latitude": "36.766", + "name": "s207", + "locType": "geo", + "channelId": "10.192.19.69:59976", + "longitude": "-122.359" + }, + "location": { + "locType": "geo", + "latOrY": 36.766, + "longOrX": -122.359 + } + } + ] + ], + "hosts": [ + [], + [], + [ + { + "id": "00:88:00:00:00:03/110", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::288:ff:fe00:3", + "2000::102", + "10.0.1.2" + ], + "props": {}, + "configured": false + }, + { + "id": "00:DD:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:88:00:00:00:04/160", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::288:ff:fe00:4", + "10.0.6.2", + "2000::602" + ], + "props": {}, + "configured": false + }, + { + "id": "00:BB:00:00:00:02/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2bb:ff:fe00:2" + ], + "props": {}, + "configured": false + }, + { + "id": "00:AA:00:00:00:05/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:88:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::288:ff:fe00:1", + "2000::101", + "10.0.1.1" + ], + "props": {}, + "configured": false + }, + { + "id": "00:AA:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:AA:00:00:00:03/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:BB:00:00:00:04/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2bb:ff:fe00:4" + ], + "props": {}, + "configured": false + }, + { + "id": "00:EE:00:00:00:02/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2ee:ff:fe00:2" + ], + "props": {}, + "configured": false + }, + { + "id": "00:99:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "10.0.3.253", + "fe80::299:ff:fe00:1" + ], + "props": {}, + "configured": false + }, + { + "id": "00:99:66:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::299:66ff:fe00:1", + "2000::3fd" + ], + "props": {}, + "configured": false + }, + { + "id": "00:EE:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2ee:ff:fe00:1" + ], + "props": {}, + "configured": false + }, + { + "id": "00:BB:00:00:00:01/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2bb:ff:fe00:1" + ], + "props": {}, + "configured": false + }, + { + "id": "00:BB:00:00:00:03/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2bb:ff:fe00:3" + ], + "props": {}, + "configured": false + }, + { + "id": "00:AA:00:00:00:04/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:BB:00:00:00:05/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::2bb:ff:fe00:5" + ], + "props": {}, + "configured": false + }, + { + "id": "00:88:00:00:00:02/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "fe80::288:ff:fe00:2", + "2000::601", + "10.0.6.1" + ], + "props": {}, + "configured": false + }, + { + "id": "00:AA:00:00:00:02/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + }, + { + "id": "00:DD:00:00:00:02/None", + "nodeType": "host", + "layer": "def", + "ips": [], + "props": {}, + "configured": false + } + ] + ], + "layerOrder": [ + "opt", + "pkt", + "def" + ] + } +}`; + +const test_OdtnConfig_topo2CurrentRegion = `{ + "event": "topo2CurrentRegion", + "payload": { + "id": "(root)", + "subregions": [], + "links": [ + { + "id": "netconf:127.0.0.1:11002/201~netconf:127.0.0.1:11003/201", + "epA": "netconf:127.0.0.1:11002/201", + "epB": "netconf:127.0.0.1:11003/201", + "type": "UiDeviceLink", + "portA": "201", + "portB": "201", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/201~netconf:127.0.0.1:11003/201", + "epA": "netconf:127.0.0.1:11002/201", + "epB": "netconf:127.0.0.1:11003/201", + "type": "UiDeviceLink", + "portA": "201", + "portB": "201" + } + ] + }, + { + "id": "netconf:127.0.0.1:11002/202~netconf:127.0.0.1:11003/202", + "epA": "netconf:127.0.0.1:11002/202", + "epB": "netconf:127.0.0.1:11003/202", + "type": "UiDeviceLink", + "portA": "202", + "portB": "202", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/202~netconf:127.0.0.1:11003/202", + "epA": "netconf:127.0.0.1:11002/202", + "epB": "netconf:127.0.0.1:11003/202", + "type": "UiDeviceLink", + "portA": "202", + "portB": "202" + } + ] + }, + { + "id": "netconf:127.0.0.1:11002/203~netconf:127.0.0.1:11003/203", + "epA": "netconf:127.0.0.1:11002/203", + "epB": "netconf:127.0.0.1:11003/203", + "type": "UiDeviceLink", + "portA": "203", + "portB": "203", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/203~netconf:127.0.0.1:11003/203", + "epA": "netconf:127.0.0.1:11002/203", + "epB": "netconf:127.0.0.1:11003/203", + "type": "UiDeviceLink", + "portA": "203", + "portB": "203" + } + ] + }, + { + "id": "netconf:127.0.0.1:11002/204~netconf:127.0.0.1:11003/204", + "epA": "netconf:127.0.0.1:11002/204", + "epB": "netconf:127.0.0.1:11003/204", + "type": "UiDeviceLink", + "portA": "204", + "portB": "204", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/204~netconf:127.0.0.1:11003/204", + "epA": "netconf:127.0.0.1:11002/204", + "epB": "netconf:127.0.0.1:11003/204", + "type": "UiDeviceLink", + "portA": "204", + "portB": "204" + } + ] + }, + { + "id": "netconf:127.0.0.1:11002/205~netconf:127.0.0.1:11003/205", + "epA": "netconf:127.0.0.1:11002/205", + "epB": "netconf:127.0.0.1:11003/205", + "type": "UiDeviceLink", + "portA": "205", + "portB": "205", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/205~netconf:127.0.0.1:11003/205", + "epA": "netconf:127.0.0.1:11002/205", + "epB": "netconf:127.0.0.1:11003/205", + "type": "UiDeviceLink", + "portA": "205", + "portB": "205" + } + ] + }, + { + "id": "netconf:127.0.0.1:11002/206~netconf:127.0.0.1:11003/206", + "epA": "netconf:127.0.0.1:11002/206", + "epB": "netconf:127.0.0.1:11003/206", + "type": "UiDeviceLink", + "portA": "206", + "portB": "206", + "rollup": [ + { + "id": "netconf:127.0.0.1:11002/206~netconf:127.0.0.1:11003/206", + "epA": "netconf:127.0.0.1:11002/206", + "epB": "netconf:127.0.0.1:11003/206", + "type": "UiDeviceLink", + "portA": "206", + "portB": "206" + } + ] + } + ], + "devices": [ + [], + [], + [ + { + "id": "netconf:127.0.0.1:11002", + "nodeType": "device", + "type": "terminal_device", + "online": true, + "master": "127.0.0.1", + "layer": "def", + "props": { + "ipaddress": "127.0.0.1", + "protocol": "NETCONF", + "driver": "cassini-ocnos", + "port": "11002", + "name": "cassini2", + "locType": "none" + } + }, + { + "id": "netconf:127.0.0.1:11003", + "nodeType": "device", + "type": "terminal_device", + "online": true, + "master": "127.0.0.1", + "layer": "def", + "props": { + "ipaddress": "127.0.0.1", + "protocol": "NETCONF", + "driver": "cassini-ocnos", + "port": "11003", + "name": "cassini1", + "locType": "none" + } + } + ] + ], + "hosts": [ + [], + [], + [] + ], + "layerOrder": [ + "opt", + "pkt", + "def" + ] + } +}`; + +const topo2Highlights_base_data = `{ + "event": "topo2CurrentRegion", + "payload": { + "id": "(root)", + "subregions": [], + "links": [ + { + "id": "device:leaf1/1~device:spine1/1", + "epA": "device:leaf1/1", + "epB": "device:spine1/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1", + "rollup": [ + { + "id": "device:leaf1/1~device:spine1/1", + "epA": "device:leaf1/1", + "epB": "device:spine1/1", + "type": "UiDeviceLink", + "portA": "1", + "portB": "1" + } + ] + }, + { + "id": "device:leaf2/2~device:spine2/2", + "epA": "device:leaf2/2", + "epB": "device:spine2/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2", + "rollup": [ + { + "id": "device:leaf2/2~device:spine2/2", + "epA": "device:leaf2/2", + "epB": "device:spine2/2", + "type": "UiDeviceLink", + "portA": "2", + "portB": "2" + } + ] + }, + { + "id": "00:00:00:00:00:1A/None~device:leaf1/3", + "epA": "00:00:00:00:00:1A/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "3", + "rollup": [ + { + "id": "00:00:00:00:00:1A/None~device:leaf1/3", + "epA": "00:00:00:00:00:1A/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "3" + } + ] + }, + { + "id": "00:00:00:00:00:30/None~device:leaf2/3", + "epA": "00:00:00:00:00:30/None", + "epB": "device:leaf2", + "type": "UiEdgeLink", + "portB": "3", + "rollup": [ + { + "id": "00:00:00:00:00:30/None~device:leaf2/3", + "epA": "00:00:00:00:00:30/None", + "epB": "device:leaf2", + "type": "UiEdgeLink", + "portB": "3" + } + ] + }, + { + "id": "device:leaf1/2~device:spine2/1", + "epA": "device:leaf1/2", + "epB": "device:spine2/1", + "type": "UiDeviceLink", + "portA": "2", + "portB": "1", + "rollup": [ + { + "id": "device:leaf1/2~device:spine2/1", + "epA": "device:leaf1/2", + "epB": "device:spine2/1", + "type": "UiDeviceLink", + "portA": "2", + "portB": "1" + } + ] + }, + { + "id": "device:leaf2/1~device:spine1/2", + "epA": "device:leaf2/1", + "epB": "device:spine1/2", + "type": "UiDeviceLink", + "portA": "1", + "portB": "2", + "rollup": [ + { + "id": "device:leaf2/1~device:spine1/2", + "epA": "device:leaf2/1", + "epB": "device:spine1/2", + "type": "UiDeviceLink", + "portA": "1", + "portB": "2" + } + ] + }, + { + "id": "00:00:00:00:00:20/None~device:leaf1/6", + "epA": "00:00:00:00:00:20/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "6", + "rollup": [ + { + "id": "00:00:00:00:00:20/None~device:leaf1/6", + "epA": "00:00:00:00:00:20/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "6" + } + ] + }, + { + "id": "00:00:00:00:00:1C/None~device:leaf1/5", + "epA": "00:00:00:00:00:1C/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "5", + "rollup": [ + { + "id": "00:00:00:00:00:1C/None~device:leaf1/5", + "epA": "00:00:00:00:00:1C/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "5" + } + ] + }, + { + "id": "00:00:00:00:00:1B/None~device:leaf1/4", + "epA": "00:00:00:00:00:1B/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "4", + "rollup": [ + { + "id": "00:00:00:00:00:1B/None~device:leaf1/4", + "epA": "00:00:00:00:00:1B/None", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "4" + } + ] + } + ], + "devices": [ + [], + [], + [ + { + "id": "device:spine1", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://mininet:50003?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "400.0", + "gridY": "400.0", + "driver": "stratum-bmv2", + "name": "device:spine1", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 400.0, + "longOrX": 400.0 + } + }, + { + "id": "device:spine2", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://mininet:50004?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "600.0", + "gridY": "400.0", + "driver": "stratum-bmv2", + "name": "device:spine2", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 400.0, + "longOrX": 600.0 + } + }, + { + "id": "device:leaf2", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://mininet:50002?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "800.0", + "gridY": "600.0", + "driver": "stratum-bmv2", + "name": "device:leaf2", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 600.0, + "longOrX": 800.0 + } + }, + { + "id": "device:leaf1", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://mininet:50001?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "200.0", + "gridY": "600.0", + "driver": "stratum-bmv2", + "name": "device:leaf1", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 600.0, + "longOrX": 200.0 + } + } + ] + ], + "hosts": [ + [], + [], + [ + { + "id": "00:00:00:00:00:30/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1A/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:1:1::a" + ], + "props": { + "gridX": "100.0", + "gridY": "700.0", + "latitude": null, + "name": "h1a", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 100.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1B/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:1:1::b" + ], + "props": { + "gridX": "100.0", + "gridY": "800.0", + "latitude": null, + "name": "h1b", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 800.0, + "longOrX": 100.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1C/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:1:1::c" + ], + "props": { + "gridX": "250.0", + "gridY": "800.0", + "latitude": null, + "name": "h1c", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 800.0, + "longOrX": 250.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:20/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:1:2::1" + ], + "props": { + "gridX": "400.0", + "gridY": "700.0", + "latitude": null, + "name": "h2", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 400.0 + }, + "configured": false + } + ] + ], + "layerOrder": [ + "opt", + "pkt", + "def" + ] + } +}`; + +const topo2Highlights_sample = ` +{ + "event": "topo2Highlights", + "payload": { + "devices": [], + "hosts": [], + "links": [ + { + "id": "device:leaf2/2~device:spine2/2", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "device:leaf1/1~device:spine1/1", + "label": "3.92 Mbps", + "css": "secondary port-traffic-yellow" + }, + { + "id": "00:00:00:00:00:30/None~device:leaf2/3", + "label": "4.46 Mbps", + "css": "secondary port-traffic-yellow" + }, + { + "id": "device:leaf2/1~device:spine1/2", + "label": "3.53 Mbps", + "css": "secondary port-traffic-yellow" + }, + { + "id": "device:leaf1/2~device:spine2/1", + "label": "1.06 Mbps", + "css": "secondary port-traffic-yellow" + }, + { + "id": "00:00:00:00:00:20/None~device:leaf1/6", + "label": "4.98 Mbps", + "css": "secondary port-traffic-yellow" + } + ] + } +}`; + class MockActivatedRoute extends ActivatedRoute { constructor(params: Params) { super(); @@ -96,16 +1889,16 @@ describe('ForceSvgComponent', () => { let logServiceSpy: jasmine.SpyObj; let component: ForceSvgComponent; let fixture: ComponentFixture; - const openflowSampleData = require('./tests/test-module-topo2CurrentRegion.json'); + const openflowSampleData = JSON.parse(test_module_topo2CurrentRegion); const openflowRegionData: Region = (openflowSampleData.payload); - const odtnSampleData = require('./tests/test-OdtnConfig-topo2CurrentRegion.json'); + const odtnSampleData = JSON.parse(test_OdtnConfig_topo2CurrentRegion); const odtnRegionData: Region = (odtnSampleData.payload); - const topo2BaseData = require('./tests/topo2Highlights-base-data.json'); + const topo2BaseData = JSON.parse(topo2Highlights_base_data); const topo2BaseRegionData: Region = (topo2BaseData.payload); - const highlightSampleData = require('./tests/topo2Highlights-sample.json'); + const highlightSampleData = JSON.parse(topo2Highlights_sample); const linkHightlights: LinkHighlight[] = (highlightSampleData.payload.links); const emptyRegion: Region = {devices: [ [], [], [] ], hosts: [ [], [], [] ], links: []}; diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-OdtnConfig-topo2CurrentRegion.json b/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-OdtnConfig-topo2CurrentRegion.json deleted file mode 100644 index 2087940f7d5..00000000000 --- a/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-OdtnConfig-topo2CurrentRegion.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "event": "topo2CurrentRegion", - "payload": { - "id": "(root)", - "subregions": [], - "links": [ - { - "id": "netconf:127.0.0.1:11002/201~netconf:127.0.0.1:11003/201", - "epA": "netconf:127.0.0.1:11002/201", - "epB": "netconf:127.0.0.1:11003/201", - "type": "UiDeviceLink", - "portA": "201", - "portB": "201", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/201~netconf:127.0.0.1:11003/201", - "epA": "netconf:127.0.0.1:11002/201", - "epB": "netconf:127.0.0.1:11003/201", - "type": "UiDeviceLink", - "portA": "201", - "portB": "201" - } - ] - }, - { - "id": "netconf:127.0.0.1:11002/202~netconf:127.0.0.1:11003/202", - "epA": "netconf:127.0.0.1:11002/202", - "epB": "netconf:127.0.0.1:11003/202", - "type": "UiDeviceLink", - "portA": "202", - "portB": "202", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/202~netconf:127.0.0.1:11003/202", - "epA": "netconf:127.0.0.1:11002/202", - "epB": "netconf:127.0.0.1:11003/202", - "type": "UiDeviceLink", - "portA": "202", - "portB": "202" - } - ] - }, - { - "id": "netconf:127.0.0.1:11002/203~netconf:127.0.0.1:11003/203", - "epA": "netconf:127.0.0.1:11002/203", - "epB": "netconf:127.0.0.1:11003/203", - "type": "UiDeviceLink", - "portA": "203", - "portB": "203", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/203~netconf:127.0.0.1:11003/203", - "epA": "netconf:127.0.0.1:11002/203", - "epB": "netconf:127.0.0.1:11003/203", - "type": "UiDeviceLink", - "portA": "203", - "portB": "203" - } - ] - }, - { - "id": "netconf:127.0.0.1:11002/204~netconf:127.0.0.1:11003/204", - "epA": "netconf:127.0.0.1:11002/204", - "epB": "netconf:127.0.0.1:11003/204", - "type": "UiDeviceLink", - "portA": "204", - "portB": "204", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/204~netconf:127.0.0.1:11003/204", - "epA": "netconf:127.0.0.1:11002/204", - "epB": "netconf:127.0.0.1:11003/204", - "type": "UiDeviceLink", - "portA": "204", - "portB": "204" - } - ] - }, - { - "id": "netconf:127.0.0.1:11002/205~netconf:127.0.0.1:11003/205", - "epA": "netconf:127.0.0.1:11002/205", - "epB": "netconf:127.0.0.1:11003/205", - "type": "UiDeviceLink", - "portA": "205", - "portB": "205", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/205~netconf:127.0.0.1:11003/205", - "epA": "netconf:127.0.0.1:11002/205", - "epB": "netconf:127.0.0.1:11003/205", - "type": "UiDeviceLink", - "portA": "205", - "portB": "205" - } - ] - }, - { - "id": "netconf:127.0.0.1:11002/206~netconf:127.0.0.1:11003/206", - "epA": "netconf:127.0.0.1:11002/206", - "epB": "netconf:127.0.0.1:11003/206", - "type": "UiDeviceLink", - "portA": "206", - "portB": "206", - "rollup": [ - { - "id": "netconf:127.0.0.1:11002/206~netconf:127.0.0.1:11003/206", - "epA": "netconf:127.0.0.1:11002/206", - "epB": "netconf:127.0.0.1:11003/206", - "type": "UiDeviceLink", - "portA": "206", - "portB": "206" - } - ] - } - ], - "devices": [ - [], - [], - [ - { - "id": "netconf:127.0.0.1:11002", - "nodeType": "device", - "type": "terminal_device", - "online": true, - "master": "127.0.0.1", - "layer": "def", - "props": { - "ipaddress": "127.0.0.1", - "protocol": "NETCONF", - "driver": "cassini-ocnos", - "port": "11002", - "name": "cassini2", - "locType": "none" - } - }, - { - "id": "netconf:127.0.0.1:11003", - "nodeType": "device", - "type": "terminal_device", - "online": true, - "master": "127.0.0.1", - "layer": "def", - "props": { - "ipaddress": "127.0.0.1", - "protocol": "NETCONF", - "driver": "cassini-ocnos", - "port": "11003", - "name": "cassini1", - "locType": "none" - } - } - ] - ], - "hosts": [ - [], - [], - [] - ], - "layerOrder": [ - "opt", - "pkt", - "def" - ] - } -} diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-module-topo2CurrentRegion.json b/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-module-topo2CurrentRegion.json deleted file mode 100644 index e8af22fc780..00000000000 --- a/web/gui2-topo-lib/lib/layer/forcesvg/tests/test-module-topo2CurrentRegion.json +++ /dev/null @@ -1,1204 +0,0 @@ -{ - "event": "topo2CurrentRegion", - "payload": { - "id": "(root)", - "subregions": [], - "links": [ - { - "id": "00:AA:00:00:00:03/None~of:0000000000000205/6", - "epA": "00:AA:00:00:00:03/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "6", - "rollup": [ - { - "id": "00:AA:00:00:00:03/None~of:0000000000000205/6", - "epA": "00:AA:00:00:00:03/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "6" - } - ] - }, - { - "id": "of:0000000000000205/3~of:0000000000000227/5", - "epA": "of:0000000000000205/3", - "epB": "of:0000000000000227/5", - "type": "UiDeviceLink", - "portA": "3", - "portB": "5", - "rollup": [ - { - "id": "of:0000000000000205/3~of:0000000000000227/5", - "epA": "of:0000000000000205/3", - "epB": "of:0000000000000227/5", - "type": "UiDeviceLink", - "portA": "3", - "portB": "5" - } - ] - }, - { - "id": "of:0000000000000206/2~of:0000000000000226/8", - "epA": "of:0000000000000206/2", - "epB": "of:0000000000000226/8", - "type": "UiDeviceLink", - "portA": "2", - "portB": "8", - "rollup": [ - { - "id": "of:0000000000000206/2~of:0000000000000226/8", - "epA": "of:0000000000000206/2", - "epB": "of:0000000000000226/8", - "type": "UiDeviceLink", - "portA": "2", - "portB": "8" - } - ] - }, - { - "id": "00:BB:00:00:00:05/None~of:0000000000000203/7", - "epA": "00:BB:00:00:00:05/None", - "epB": "of:0000000000000203", - "type": "UiEdgeLink", - "portB": "7", - "rollup": [ - { - "id": "00:BB:00:00:00:05/None~of:0000000000000203/7", - "epA": "00:BB:00:00:00:05/None", - "epB": "of:0000000000000203", - "type": "UiEdgeLink", - "portB": "7" - } - ] - }, - { - "id": "00:DD:00:00:00:01/None~of:0000000000000207/3", - "epA": "00:DD:00:00:00:01/None", - "epB": "of:0000000000000207", - "type": "UiEdgeLink", - "portB": "3", - "rollup": [ - { - "id": "00:DD:00:00:00:01/None~of:0000000000000207/3", - "epA": "00:DD:00:00:00:01/None", - "epB": "of:0000000000000207", - "type": "UiEdgeLink", - "portB": "3" - } - ] - }, - { - "id": "of:0000000000000203/1~of:0000000000000226/1", - "epA": "of:0000000000000203/1", - "epB": "of:0000000000000226/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1", - "rollup": [ - { - "id": "of:0000000000000203/1~of:0000000000000226/1", - "epA": "of:0000000000000203/1", - "epB": "of:0000000000000226/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1" - } - ] - }, - { - "id": "of:0000000000000207/2~of:0000000000000247/1", - "epA": "of:0000000000000207/2", - "epB": "of:0000000000000247/1", - "type": "UiDeviceLink", - "portA": "2", - "portB": "1", - "rollup": [ - { - "id": "of:0000000000000207/2~of:0000000000000247/1", - "epA": "of:0000000000000207/2", - "epB": "of:0000000000000247/1", - "type": "UiDeviceLink", - "portA": "2", - "portB": "1" - } - ] - }, - { - "id": "00:99:66:00:00:01/None~of:0000000000000205/10", - "epA": "00:99:66:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "10", - "rollup": [ - { - "id": "00:99:66:00:00:01/None~of:0000000000000205/10", - "epA": "00:99:66:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "10" - } - ] - }, - { - "id": "of:0000000000000208/1~of:0000000000000246/2", - "epA": "of:0000000000000208/1", - "epB": "of:0000000000000246/2", - "type": "UiDeviceLink", - "portA": "1", - "portB": "2", - "rollup": [ - { - "id": "of:0000000000000208/1~of:0000000000000246/2", - "epA": "of:0000000000000208/1", - "epB": "of:0000000000000246/2", - "type": "UiDeviceLink", - "portA": "1", - "portB": "2" - } - ] - }, - { - "id": "of:0000000000000206/1~of:0000000000000226/7", - "epA": "of:0000000000000206/1", - "epB": "of:0000000000000226/7", - "type": "UiDeviceLink", - "portA": "1", - "portB": "7", - "rollup": [ - { - "id": "of:0000000000000206/1~of:0000000000000226/7", - "epA": "of:0000000000000206/1", - "epB": "of:0000000000000226/7", - "type": "UiDeviceLink", - "portA": "1", - "portB": "7" - } - ] - }, - { - "id": "of:0000000000000226/9~of:0000000000000246/3", - "epA": "of:0000000000000226/9", - "epB": "of:0000000000000246/3", - "type": "UiDeviceLink", - "portA": "9", - "portB": "3", - "rollup": [ - { - "id": "of:0000000000000226/9~of:0000000000000246/3", - "epA": "of:0000000000000226/9", - "epB": "of:0000000000000246/3", - "type": "UiDeviceLink", - "portA": "9", - "portB": "3" - } - ] - }, - { - "id": "00:AA:00:00:00:04/None~of:0000000000000205/7", - "epA": "00:AA:00:00:00:04/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "7", - "rollup": [ - { - "id": "00:AA:00:00:00:04/None~of:0000000000000205/7", - "epA": "00:AA:00:00:00:04/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "7" - } - ] - }, - { - "id": "00:88:00:00:00:03/110~of:0000000000000205/11", - "epA": "00:88:00:00:00:03/110", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "11", - "rollup": [ - { - "id": "00:88:00:00:00:03/110~of:0000000000000205/11", - "epA": "00:88:00:00:00:03/110", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "11" - } - ] - }, - { - "id": "of:0000000000000204/1~of:0000000000000226/3", - "epA": "of:0000000000000204/1", - "epB": "of:0000000000000226/3", - "type": "UiDeviceLink", - "portA": "1", - "portB": "3", - "rollup": [ - { - "id": "of:0000000000000204/1~of:0000000000000226/3", - "epA": "of:0000000000000204/1", - "epB": "of:0000000000000226/3", - "type": "UiDeviceLink", - "portA": "1", - "portB": "3" - } - ] - }, - { - "id": "of:0000000000000203/2~of:0000000000000226/2", - "epA": "of:0000000000000203/2", - "epB": "of:0000000000000226/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2", - "rollup": [ - { - "id": "of:0000000000000203/2~of:0000000000000226/2", - "epA": "of:0000000000000203/2", - "epB": "of:0000000000000226/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2" - } - ] - }, - { - "id": "00:88:00:00:00:01/None~of:0000000000000205/12", - "epA": "00:88:00:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "12", - "rollup": [ - { - "id": "00:88:00:00:00:01/None~of:0000000000000205/12", - "epA": "00:88:00:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "12" - } - ] - }, - { - "id": "00:88:00:00:00:04/160~of:0000000000000206/6", - "epA": "00:88:00:00:00:04/160", - "epB": "of:0000000000000206", - "type": "UiEdgeLink", - "portB": "6", - "rollup": [ - { - "id": "00:88:00:00:00:04/160~of:0000000000000206/6", - "epA": "00:88:00:00:00:04/160", - "epB": "of:0000000000000206", - "type": "UiEdgeLink", - "portB": "6" - } - ] - }, - { - "id": "00:DD:00:00:00:02/None~of:0000000000000208/3", - "epA": "00:DD:00:00:00:02/None", - "epB": "of:0000000000000208", - "type": "UiEdgeLink", - "portB": "3", - "rollup": [ - { - "id": "00:DD:00:00:00:02/None~of:0000000000000208/3", - "epA": "00:DD:00:00:00:02/None", - "epB": "of:0000000000000208", - "type": "UiEdgeLink", - "portB": "3" - } - ] - }, - { - "id": "of:0000000000000203/3~of:0000000000000227/1", - "epA": "of:0000000000000203/3", - "epB": "of:0000000000000227/1", - "type": "UiDeviceLink", - "portA": "3", - "portB": "1", - "rollup": [ - { - "id": "of:0000000000000203/3~of:0000000000000227/1", - "epA": "of:0000000000000203/3", - "epB": "of:0000000000000227/1", - "type": "UiDeviceLink", - "portA": "3", - "portB": "1" - } - ] - }, - { - "id": "of:0000000000000208/2~of:0000000000000247/2", - "epA": "of:0000000000000208/2", - "epB": "of:0000000000000247/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2", - "rollup": [ - { - "id": "of:0000000000000208/2~of:0000000000000247/2", - "epA": "of:0000000000000208/2", - "epB": "of:0000000000000247/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2" - } - ] - }, - { - "id": "of:0000000000000205/1~of:0000000000000226/5", - "epA": "of:0000000000000205/1", - "epB": "of:0000000000000226/5", - "type": "UiDeviceLink", - "portA": "1", - "portB": "5", - "rollup": [ - { - "id": "of:0000000000000205/1~of:0000000000000226/5", - "epA": "of:0000000000000205/1", - "epB": "of:0000000000000226/5", - "type": "UiDeviceLink", - "portA": "1", - "portB": "5" - } - ] - }, - { - "id": "of:0000000000000204/2~of:0000000000000226/4", - "epA": "of:0000000000000204/2", - "epB": "of:0000000000000226/4", - "type": "UiDeviceLink", - "portA": "2", - "portB": "4", - "rollup": [ - { - "id": "of:0000000000000204/2~of:0000000000000226/4", - "epA": "of:0000000000000204/2", - "epB": "of:0000000000000226/4", - "type": "UiDeviceLink", - "portA": "2", - "portB": "4" - } - ] - }, - { - "id": "00:AA:00:00:00:01/None~of:0000000000000204/6", - "epA": "00:AA:00:00:00:01/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "6", - "rollup": [ - { - "id": "00:AA:00:00:00:01/None~of:0000000000000204/6", - "epA": "00:AA:00:00:00:01/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "6" - } - ] - }, - { - "id": "00:BB:00:00:00:03/None~of:0000000000000205/8", - "epA": "00:BB:00:00:00:03/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "8", - "rollup": [ - { - "id": "00:BB:00:00:00:03/None~of:0000000000000205/8", - "epA": "00:BB:00:00:00:03/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "8" - } - ] - }, - { - "id": "of:0000000000000206/4~of:0000000000000227/8", - "epA": "of:0000000000000206/4", - "epB": "of:0000000000000227/8", - "type": "UiDeviceLink", - "portA": "4", - "portB": "8", - "rollup": [ - { - "id": "of:0000000000000206/4~of:0000000000000227/8", - "epA": "of:0000000000000206/4", - "epB": "of:0000000000000227/8", - "type": "UiDeviceLink", - "portA": "4", - "portB": "8" - } - ] - }, - { - "id": "00:AA:00:00:00:05/None~of:0000000000000203/6", - "epA": "00:AA:00:00:00:05/None", - "epB": "of:0000000000000203", - "type": "UiEdgeLink", - "portB": "6", - "rollup": [ - { - "id": "00:AA:00:00:00:05/None~of:0000000000000203/6", - "epA": "00:AA:00:00:00:05/None", - "epB": "of:0000000000000203", - "type": "UiEdgeLink", - "portB": "6" - } - ] - }, - { - "id": "of:0000000000000205/5~of:0000000000000206/5", - "epA": "of:0000000000000205/5", - "epB": "of:0000000000000206/5", - "type": "UiDeviceLink", - "portA": "5", - "portB": "5", - "rollup": [ - { - "id": "of:0000000000000205/5~of:0000000000000206/5", - "epA": "of:0000000000000205/5", - "epB": "of:0000000000000206/5", - "type": "UiDeviceLink", - "portA": "5", - "portB": "5" - } - ] - }, - { - "id": "00:BB:00:00:00:02/None~of:0000000000000204/9", - "epA": "00:BB:00:00:00:02/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "9", - "rollup": [ - { - "id": "00:BB:00:00:00:02/None~of:0000000000000204/9", - "epA": "00:BB:00:00:00:02/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "9" - } - ] - }, - { - "id": "of:0000000000000204/3~of:0000000000000227/3", - "epA": "of:0000000000000204/3", - "epB": "of:0000000000000227/3", - "type": "UiDeviceLink", - "portA": "3", - "portB": "3", - "rollup": [ - { - "id": "of:0000000000000204/3~of:0000000000000227/3", - "epA": "of:0000000000000204/3", - "epB": "of:0000000000000227/3", - "type": "UiDeviceLink", - "portA": "3", - "portB": "3" - } - ] - }, - { - "id": "00:EE:00:00:00:01/None~of:0000000000000207/4", - "epA": "00:EE:00:00:00:01/None", - "epB": "of:0000000000000207", - "type": "UiEdgeLink", - "portB": "4", - "rollup": [ - { - "id": "00:EE:00:00:00:01/None~of:0000000000000207/4", - "epA": "00:EE:00:00:00:01/None", - "epB": "of:0000000000000207", - "type": "UiEdgeLink", - "portB": "4" - } - ] - }, - { - "id": "of:0000000000000203/4~of:0000000000000227/2", - "epA": "of:0000000000000203/4", - "epB": "of:0000000000000227/2", - "type": "UiDeviceLink", - "portA": "4", - "portB": "2", - "rollup": [ - { - "id": "of:0000000000000203/4~of:0000000000000227/2", - "epA": "of:0000000000000203/4", - "epB": "of:0000000000000227/2", - "type": "UiDeviceLink", - "portA": "4", - "portB": "2" - } - ] - }, - { - "id": "of:0000000000000205/2~of:0000000000000226/6", - "epA": "of:0000000000000205/2", - "epB": "of:0000000000000226/6", - "type": "UiDeviceLink", - "portA": "2", - "portB": "6", - "rollup": [ - { - "id": "of:0000000000000205/2~of:0000000000000226/6", - "epA": "of:0000000000000205/2", - "epB": "of:0000000000000226/6", - "type": "UiDeviceLink", - "portA": "2", - "portB": "6" - } - ] - }, - { - "id": "00:99:00:00:00:01/None~of:0000000000000205/10", - "epA": "00:99:00:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "10", - "rollup": [ - { - "id": "00:99:00:00:00:01/None~of:0000000000000205/10", - "epA": "00:99:00:00:00:01/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "10" - } - ] - }, - { - "id": "of:0000000000000205/4~of:0000000000000227/6", - "epA": "of:0000000000000205/4", - "epB": "of:0000000000000227/6", - "type": "UiDeviceLink", - "portA": "4", - "portB": "6", - "rollup": [ - { - "id": "of:0000000000000205/4~of:0000000000000227/6", - "epA": "of:0000000000000205/4", - "epB": "of:0000000000000227/6", - "type": "UiDeviceLink", - "portA": "4", - "portB": "6" - } - ] - }, - { - "id": "of:0000000000000206/3~of:0000000000000227/7", - "epA": "of:0000000000000206/3", - "epB": "of:0000000000000227/7", - "type": "UiDeviceLink", - "portA": "3", - "portB": "7", - "rollup": [ - { - "id": "of:0000000000000206/3~of:0000000000000227/7", - "epA": "of:0000000000000206/3", - "epB": "of:0000000000000227/7", - "type": "UiDeviceLink", - "portA": "3", - "portB": "7" - } - ] - }, - { - "id": "00:BB:00:00:00:04/None~of:0000000000000205/9", - "epA": "00:BB:00:00:00:04/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "9", - "rollup": [ - { - "id": "00:BB:00:00:00:04/None~of:0000000000000205/9", - "epA": "00:BB:00:00:00:04/None", - "epB": "of:0000000000000205", - "type": "UiEdgeLink", - "portB": "9" - } - ] - }, - { - "id": "00:AA:00:00:00:02/None~of:0000000000000204/7", - "epA": "00:AA:00:00:00:02/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "7", - "rollup": [ - { - "id": "00:AA:00:00:00:02/None~of:0000000000000204/7", - "epA": "00:AA:00:00:00:02/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "7" - } - ] - }, - { - "id": "00:BB:00:00:00:01/None~of:0000000000000204/8", - "epA": "00:BB:00:00:00:01/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "8", - "rollup": [ - { - "id": "00:BB:00:00:00:01/None~of:0000000000000204/8", - "epA": "00:BB:00:00:00:01/None", - "epB": "of:0000000000000204", - "type": "UiEdgeLink", - "portB": "8" - } - ] - }, - { - "id": "of:0000000000000207/1~of:0000000000000246/1", - "epA": "of:0000000000000207/1", - "epB": "of:0000000000000246/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1", - "rollup": [ - { - "id": "of:0000000000000207/1~of:0000000000000246/1", - "epA": "of:0000000000000207/1", - "epB": "of:0000000000000246/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1" - } - ] - }, - { - "id": "00:88:00:00:00:02/None~of:0000000000000206/7", - "epA": "00:88:00:00:00:02/None", - "epB": "of:0000000000000206", - "type": "UiEdgeLink", - "portB": "7", - "rollup": [ - { - "id": "00:88:00:00:00:02/None~of:0000000000000206/7", - "epA": "00:88:00:00:00:02/None", - "epB": "of:0000000000000206", - "type": "UiEdgeLink", - "portB": "7" - } - ] - }, - { - "id": "00:EE:00:00:00:02/None~of:0000000000000208/4", - "epA": "00:EE:00:00:00:02/None", - "epB": "of:0000000000000208", - "type": "UiEdgeLink", - "portB": "4", - "rollup": [ - { - "id": "00:EE:00:00:00:02/None~of:0000000000000208/4", - "epA": "00:EE:00:00:00:02/None", - "epB": "of:0000000000000208", - "type": "UiEdgeLink", - "portB": "4" - } - ] - }, - { - "id": "of:0000000000000204/4~of:0000000000000227/4", - "epA": "of:0000000000000204/4", - "epB": "of:0000000000000227/4", - "type": "UiDeviceLink", - "portA": "4", - "portB": "4", - "rollup": [ - { - "id": "of:0000000000000204/4~of:0000000000000227/4", - "epA": "of:0000000000000204/4", - "epB": "of:0000000000000227/4", - "type": "UiDeviceLink", - "portA": "4", - "portB": "4" - } - ] - }, - { - "id": "of:0000000000000203/5~of:0000000000000204/5", - "epA": "of:0000000000000203/5", - "epB": "of:0000000000000204/5", - "type": "UiDeviceLink", - "portA": "5", - "portB": "5", - "rollup": [ - { - "id": "of:0000000000000203/5~of:0000000000000204/5", - "epA": "of:0000000000000203/5", - "epB": "of:0000000000000204/5", - "type": "UiDeviceLink", - "portA": "5", - "portB": "5" - } - ] - }, - { - "id": "of:0000000000000227/9~of:0000000000000247/3", - "epA": "of:0000000000000227/9", - "epB": "of:0000000000000247/3", - "type": "UiDeviceLink", - "portA": "9", - "portB": "3", - "rollup": [ - { - "id": "of:0000000000000227/9~of:0000000000000247/3", - "epA": "of:0000000000000227/9", - "epB": "of:0000000000000247/3", - "type": "UiDeviceLink", - "portA": "9", - "portB": "3" - } - ] - } - ], - "devices": [ - [], - [], - [ - { - "id": "of:0000000000000246", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "40.15", - "name": "s246", - "locType": "geo", - "channelId": "10.192.19.69:59980", - "longitude": "-121.679" - }, - "location": { - "locType": "geo", - "latOrY": 40.15, - "longOrX": -121.679 - } - }, - { - "id": "of:0000000000000206", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s206", - "locType": "geo", - "channelId": "10.192.19.69:59975", - "longitude": "-92.029" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -92.029 - } - }, - { - "id": "of:0000000000000227", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "44.205", - "name": "s227", - "locType": "geo", - "channelId": "10.192.19.69:59979", - "longitude": "-96.359" - }, - "location": { - "locType": "geo", - "latOrY": 44.205, - "longOrX": -96.359 - } - }, - { - "id": "of:0000000000000208", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s208", - "locType": "geo", - "channelId": "10.192.19.69:59977", - "longitude": "-116.029" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -116.029 - } - }, - { - "id": "of:0000000000000205", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s205", - "locType": "geo", - "channelId": "10.192.19.69:59974", - "longitude": "-96.89" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -96.89 - } - }, - { - "id": "of:0000000000000247", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "40.205", - "name": "s247", - "locType": "geo", - "channelId": "10.192.19.69:59981", - "longitude": "-117.359" - }, - "location": { - "locType": "geo", - "latOrY": 40.205, - "longOrX": -117.359 - } - }, - { - "id": "of:0000000000000226", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "44.15", - "name": "s226", - "locType": "geo", - "channelId": "10.192.19.69:59978", - "longitude": "-107.679" - }, - "location": { - "locType": "geo", - "latOrY": 44.15, - "longOrX": -107.679 - } - }, - { - "id": "of:0000000000000203", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s203", - "locType": "geo", - "channelId": "10.192.19.69:59972", - "longitude": "-111.359" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -111.359 - } - }, - { - "id": "of:0000000000000204", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s204", - "locType": "geo", - "channelId": "10.192.19.69:59973", - "longitude": "-106.359" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -106.359 - } - }, - { - "id": "of:0000000000000207", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "10.192.19.68", - "layer": "def", - "props": { - "managementAddress": "10.192.19.69", - "protocol": "OF_13", - "driver": "ofdpa-ovs", - "latitude": "36.766", - "name": "s207", - "locType": "geo", - "channelId": "10.192.19.69:59976", - "longitude": "-122.359" - }, - "location": { - "locType": "geo", - "latOrY": 36.766, - "longOrX": -122.359 - } - } - ] - ], - "hosts": [ - [], - [], - [ - { - "id": "00:88:00:00:00:03/110", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::288:ff:fe00:3", - "2000::102", - "10.0.1.2" - ], - "props": {}, - "configured": false - }, - { - "id": "00:DD:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:88:00:00:00:04/160", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::288:ff:fe00:4", - "10.0.6.2", - "2000::602" - ], - "props": {}, - "configured": false - }, - { - "id": "00:BB:00:00:00:02/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2bb:ff:fe00:2" - ], - "props": {}, - "configured": false - }, - { - "id": "00:AA:00:00:00:05/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:88:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::288:ff:fe00:1", - "2000::101", - "10.0.1.1" - ], - "props": {}, - "configured": false - }, - { - "id": "00:AA:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:AA:00:00:00:03/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:BB:00:00:00:04/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2bb:ff:fe00:4" - ], - "props": {}, - "configured": false - }, - { - "id": "00:EE:00:00:00:02/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2ee:ff:fe00:2" - ], - "props": {}, - "configured": false - }, - { - "id": "00:99:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "10.0.3.253", - "fe80::299:ff:fe00:1" - ], - "props": {}, - "configured": false - }, - { - "id": "00:99:66:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::299:66ff:fe00:1", - "2000::3fd" - ], - "props": {}, - "configured": false - }, - { - "id": "00:EE:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2ee:ff:fe00:1" - ], - "props": {}, - "configured": false - }, - { - "id": "00:BB:00:00:00:01/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2bb:ff:fe00:1" - ], - "props": {}, - "configured": false - }, - { - "id": "00:BB:00:00:00:03/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2bb:ff:fe00:3" - ], - "props": {}, - "configured": false - }, - { - "id": "00:AA:00:00:00:04/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:BB:00:00:00:05/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::2bb:ff:fe00:5" - ], - "props": {}, - "configured": false - }, - { - "id": "00:88:00:00:00:02/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "fe80::288:ff:fe00:2", - "2000::601", - "10.0.6.1" - ], - "props": {}, - "configured": false - }, - { - "id": "00:AA:00:00:00:02/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - }, - { - "id": "00:DD:00:00:00:02/None", - "nodeType": "host", - "layer": "def", - "ips": [], - "props": {}, - "configured": false - } - ] - ], - "layerOrder": [ - "opt", - "pkt", - "def" - ] - } -} diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-base-data.json b/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-base-data.json deleted file mode 100644 index ae1b9f257d3..00000000000 --- a/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-base-data.json +++ /dev/null @@ -1,380 +0,0 @@ -{ - "event": "topo2CurrentRegion", - "payload": { - "id": "(root)", - "subregions": [], - "links": [ - { - "id": "device:leaf1/1~device:spine1/1", - "epA": "device:leaf1/1", - "epB": "device:spine1/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1", - "rollup": [ - { - "id": "device:leaf1/1~device:spine1/1", - "epA": "device:leaf1/1", - "epB": "device:spine1/1", - "type": "UiDeviceLink", - "portA": "1", - "portB": "1" - } - ] - }, - { - "id": "device:leaf2/2~device:spine2/2", - "epA": "device:leaf2/2", - "epB": "device:spine2/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2", - "rollup": [ - { - "id": "device:leaf2/2~device:spine2/2", - "epA": "device:leaf2/2", - "epB": "device:spine2/2", - "type": "UiDeviceLink", - "portA": "2", - "portB": "2" - } - ] - }, - { - "id": "00:00:00:00:00:1A/None~device:leaf1/3", - "epA": "00:00:00:00:00:1A/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "3", - "rollup": [ - { - "id": "00:00:00:00:00:1A/None~device:leaf1/3", - "epA": "00:00:00:00:00:1A/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "3" - } - ] - }, - { - "id": "00:00:00:00:00:30/None~device:leaf2/3", - "epA": "00:00:00:00:00:30/None", - "epB": "device:leaf2", - "type": "UiEdgeLink", - "portB": "3", - "rollup": [ - { - "id": "00:00:00:00:00:30/None~device:leaf2/3", - "epA": "00:00:00:00:00:30/None", - "epB": "device:leaf2", - "type": "UiEdgeLink", - "portB": "3" - } - ] - }, - { - "id": "device:leaf1/2~device:spine2/1", - "epA": "device:leaf1/2", - "epB": "device:spine2/1", - "type": "UiDeviceLink", - "portA": "2", - "portB": "1", - "rollup": [ - { - "id": "device:leaf1/2~device:spine2/1", - "epA": "device:leaf1/2", - "epB": "device:spine2/1", - "type": "UiDeviceLink", - "portA": "2", - "portB": "1" - } - ] - }, - { - "id": "device:leaf2/1~device:spine1/2", - "epA": "device:leaf2/1", - "epB": "device:spine1/2", - "type": "UiDeviceLink", - "portA": "1", - "portB": "2", - "rollup": [ - { - "id": "device:leaf2/1~device:spine1/2", - "epA": "device:leaf2/1", - "epB": "device:spine1/2", - "type": "UiDeviceLink", - "portA": "1", - "portB": "2" - } - ] - }, - { - "id": "00:00:00:00:00:20/None~device:leaf1/6", - "epA": "00:00:00:00:00:20/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "6", - "rollup": [ - { - "id": "00:00:00:00:00:20/None~device:leaf1/6", - "epA": "00:00:00:00:00:20/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "6" - } - ] - }, - { - "id": "00:00:00:00:00:1C/None~device:leaf1/5", - "epA": "00:00:00:00:00:1C/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "5", - "rollup": [ - { - "id": "00:00:00:00:00:1C/None~device:leaf1/5", - "epA": "00:00:00:00:00:1C/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "5" - } - ] - }, - { - "id": "00:00:00:00:00:1B/None~device:leaf1/4", - "epA": "00:00:00:00:00:1B/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "4", - "rollup": [ - { - "id": "00:00:00:00:00:1B/None~device:leaf1/4", - "epA": "00:00:00:00:00:1B/None", - "epB": "device:leaf1", - "type": "UiEdgeLink", - "portB": "4" - } - ] - } - ], - "devices": [ - [], - [], - [ - { - "id": "device:spine1", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "172.24.0.3", - "layer": "def", - "props": { - "managementAddress": "grpc://mininet:50003?device_id=1", - "protocol": "P4Runtime, gNMI, gNOI", - "gridX": "400.0", - "gridY": "400.0", - "driver": "stratum-bmv2", - "name": "device:spine1", - "p4DeviceId": "1", - "locType": "grid" - }, - "location": { - "locType": "grid", - "latOrY": 400.0, - "longOrX": 400.0 - } - }, - { - "id": "device:spine2", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "172.24.0.3", - "layer": "def", - "props": { - "managementAddress": "grpc://mininet:50004?device_id=1", - "protocol": "P4Runtime, gNMI, gNOI", - "gridX": "600.0", - "gridY": "400.0", - "driver": "stratum-bmv2", - "name": "device:spine2", - "p4DeviceId": "1", - "locType": "grid" - }, - "location": { - "locType": "grid", - "latOrY": 400.0, - "longOrX": 600.0 - } - }, - { - "id": "device:leaf2", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "172.24.0.3", - "layer": "def", - "props": { - "managementAddress": "grpc://mininet:50002?device_id=1", - "protocol": "P4Runtime, gNMI, gNOI", - "gridX": "800.0", - "gridY": "600.0", - "driver": "stratum-bmv2", - "name": "device:leaf2", - "p4DeviceId": "1", - "locType": "grid" - }, - "location": { - "locType": "grid", - "latOrY": 600.0, - "longOrX": 800.0 - } - }, - { - "id": "device:leaf1", - "nodeType": "device", - "type": "switch", - "online": true, - "master": "172.24.0.3", - "layer": "def", - "props": { - "managementAddress": "grpc://mininet:50001?device_id=1", - "protocol": "P4Runtime, gNMI, gNOI", - "gridX": "200.0", - "gridY": "600.0", - "driver": "stratum-bmv2", - "name": "device:leaf1", - "p4DeviceId": "1", - "locType": "grid" - }, - "location": { - "locType": "grid", - "latOrY": 600.0, - "longOrX": 200.0 - } - } - ] - ], - "hosts": [ - [], - [], - [ - { - "id": "00:00:00:00:00:30/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "2001:2:3::1" - ], - "props": { - "gridX": "750.0", - "gridY": "700.0", - "latitude": null, - "name": "h3", - "locType": "grid", - "longitude": null - }, - "location": { - "locType": "grid", - "latOrY": 700.0, - "longOrX": 750.0 - }, - "configured": false - }, - { - "id": "00:00:00:00:00:1A/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "2001:1:1::a" - ], - "props": { - "gridX": "100.0", - "gridY": "700.0", - "latitude": null, - "name": "h1a", - "locType": "grid", - "longitude": null - }, - "location": { - "locType": "grid", - "latOrY": 700.0, - "longOrX": 100.0 - }, - "configured": false - }, - { - "id": "00:00:00:00:00:1B/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "2001:1:1::b" - ], - "props": { - "gridX": "100.0", - "gridY": "800.0", - "latitude": null, - "name": "h1b", - "locType": "grid", - "longitude": null - }, - "location": { - "locType": "grid", - "latOrY": 800.0, - "longOrX": 100.0 - }, - "configured": false - }, - { - "id": "00:00:00:00:00:1C/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "2001:1:1::c" - ], - "props": { - "gridX": "250.0", - "gridY": "800.0", - "latitude": null, - "name": "h1c", - "locType": "grid", - "longitude": null - }, - "location": { - "locType": "grid", - "latOrY": 800.0, - "longOrX": 250.0 - }, - "configured": false - }, - { - "id": "00:00:00:00:00:20/None", - "nodeType": "host", - "layer": "def", - "ips": [ - "2001:1:2::1" - ], - "props": { - "gridX": "400.0", - "gridY": "700.0", - "latitude": null, - "name": "h2", - "locType": "grid", - "longitude": null - }, - "location": { - "locType": "grid", - "latOrY": 700.0, - "longOrX": 400.0 - }, - "configured": false - } - ] - ], - "layerOrder": [ - "opt", - "pkt", - "def" - ] - } -} diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-sample.json b/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-sample.json deleted file mode 100644 index 50995c8f22d..00000000000 --- a/web/gui2-topo-lib/lib/layer/forcesvg/tests/topo2Highlights-sample.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "event": "topo2Highlights", - "payload": { - "devices": [], - "hosts": [], - "links": [ - { - "id": "device:leaf2/2~device:spine2/2", - "label": "964.91 Kbps", - "css": "secondary port-traffic-green" - }, - { - "id": "device:leaf1/1~device:spine1/1", - "label": "3.92 Mbps", - "css": "secondary port-traffic-yellow" - }, - { - "id": "00:00:00:00:00:30/None~device:leaf2/3", - "label": "4.46 Mbps", - "css": "secondary port-traffic-yellow" - }, - { - "id": "device:leaf2/1~device:spine1/2", - "label": "3.53 Mbps", - "css": "secondary port-traffic-yellow" - }, - { - "id": "device:leaf1/2~device:spine2/1", - "label": "1.06 Mbps", - "css": "secondary port-traffic-yellow" - }, - { - "id": "00:00:00:00:00:20/None~device:leaf1/6", - "label": "4.98 Mbps", - "css": "secondary port-traffic-yellow" - } - ] - } -} From eda832a6d36182175367af60197683ec28787599 Mon Sep 17 00:00:00 2001 From: Anurag Chadha Date: Wed, 29 Sep 2021 12:40:26 +0530 Subject: [PATCH 151/235] [ONOS-8149] Fix for updating version stored in application store when doint upgrade using issu Change-Id: I72cd8d0793464252045f98d856592ca4cc238fd6 --- .../app/DistributedApplicationStore.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java b/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java index d71c1b06333..79e19b9e71f 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java @@ -187,6 +187,12 @@ public void activate() { .withCompatibilityFunction(this::convertApplication) .build(); + /* To update the version in application store if it does not matche with the local system. + This will happen only when upgrading onos using issu or during rollback if upgrade does not work. + */ + apps.asJavaMap().forEach((appId, holder) -> apps.asJavaMap() + .put(appId, convertApplication(holder, versionService.version()))); + appActivationTopic = storageService.topicBuilder() .withName("onos-apps-activation-topic") .withSerializer(Serializer.using(KryoNamespaces.API)) @@ -215,13 +221,20 @@ public void activate() { } /** - * Converts the versions of stored applications propagated from the prior version to the local application versions. + * Converts the version of the application in store to the version of the local application. */ private InternalApplicationHolder convertApplication(InternalApplicationHolder appHolder, Version version) { // Load the application description from disk. If the version doesn't match the persisted // version, update the stored application with the new version. - ApplicationDescription appDesc = getApplicationDescription(appHolder.app.id().name()); - if (!appDesc.version().equals(appHolder.app().version())) { + ApplicationDescription appDesc = null; + try { + appDesc = getApplicationDescription(appHolder.app.id().name()); + } catch (ApplicationException e) { + // If external application is not present then just ignore it as it will be installed from other onos nodes + log.warn("Application : {} not found in disk", appHolder.app.id().name()); + } + if (appDesc != null && !appDesc.version().equals(appHolder.app().version())) { + log.info("Updating app version to : {} in store for app : {}", appDesc.version(), appHolder.app.id()); Application newApplication = DefaultApplication.builder(appDesc) .withAppId(appHolder.app.id()) .build(); @@ -250,6 +263,7 @@ private Application convertApplication(Application app, Version version) { * Downloads any missing bits for installed applications. */ private void downloadMissingApplications() { + log.info("Going to download missing applications"); apps.asJavaMap().forEach((appId, holder) -> fetchBitsIfNeeded(holder.app)); } @@ -257,6 +271,7 @@ private void downloadMissingApplications() { * Activates applications that should be activated according to the distributed store. */ private void activateExistingApplications() { + log.info("Going to activate existing applications"); getApplicationNames().forEach(appName -> { // Only update the application version if the application has already been installed. ApplicationId appId = getId(appName); @@ -264,10 +279,16 @@ private void activateExistingApplications() { ApplicationDescription appDesc = getApplicationDescription(appName); InternalApplicationHolder appHolder = Versioned.valueOrNull(apps.get(appId)); + if (appHolder != null && appHolder.state == ACTIVATED) { + log.debug("App name and version from local system : {}, {}", appDesc.name(), appDesc.version()); + log.debug("App name and version from app store : {}, {}", appHolder.app.id(), + appHolder.app().version()); + } // If the application has already been activated, set the local state to active. if (appHolder != null && appDesc.version().equals(appHolder.app().version()) && appHolder.state == ACTIVATED) { + log.info("Going to activate app : {}", appHolder.app.id()); setActive(appName); updateTime(appName); } @@ -663,7 +684,7 @@ private void fetchBits(Application app, boolean delegateInstallation) { // FIXME: send message with name & version to make sure we don't get served old bits - log.info("Downloading bits for application {}", app.id().name()); + log.info("Downloading bits for application {} for version : {}", app.id().name(), app.version()); for (ControllerNode node : clusterService.getNodes()) { if (latch.getCount() == 0) { break; From 365751943b0c5316e79fbc1201a8d7af659e5008 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Mon, 25 Oct 2021 12:33:01 +0200 Subject: [PATCH 152/235] [ONOS-8150][VOL-4414] Fix for NPE in rest API after app gets uninstalled Change-Id: I1cf0b330af43be8ea2211c5831ef715c1eafdea9 --- .../src/main/java/org/onlab/util/Tools.java | 3 +++ .../resources/ApplicationsWebResource.java | 24 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/utils/misc/src/main/java/org/onlab/util/Tools.java b/utils/misc/src/main/java/org/onlab/util/Tools.java index 596e34bdb45..2dd43a05cd4 100644 --- a/utils/misc/src/main/java/org/onlab/util/Tools.java +++ b/utils/misc/src/main/java/org/onlab/util/Tools.java @@ -188,6 +188,7 @@ public static boolean isNullOrEmpty(Collection collection) { */ public static T nullIsNotFound(T item, String message) { if (item == null) { + log.error(message); throw new ItemNotFoundException(message); } return item; @@ -205,6 +206,7 @@ public static T nullIsNotFound(T item, String message) { */ public static Set emptyIsNotFound(Set item, String message) { if (item == null || item.isEmpty()) { + log.error(message); throw new ItemNotFoundException(message); } return item; @@ -222,6 +224,7 @@ public static Set emptyIsNotFound(Set item, String message) { */ public static T nullIsIllegal(T item, String message) { if (item == null) { + log.error(message); throw new IllegalArgumentException(message); } return item; diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java index b2ee977ff8d..3787113dd9c 100644 --- a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java +++ b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java @@ -39,7 +39,9 @@ import java.io.InputStream; import java.net.URL; import java.util.Set; +import org.slf4j.Logger; +import static org.slf4j.LoggerFactory.getLogger; import static org.onlab.util.Tools.nullIsNotFound; import static org.onlab.util.Tools.readTreeFromStream; @@ -49,6 +51,9 @@ @Path("applications") public class ApplicationsWebResource extends AbstractWebResource { + private static final Logger log = getLogger(ApplicationsWebResource.class); + + private static final String APP_ID_NOT_FOUND = "Application ID is not found"; private static final String APP_NOT_FOUND = "Application is not found"; private static final String APP_READY = "ready"; @@ -83,7 +88,7 @@ public Response getApps() { @Path("{name}") public Response getApp(@PathParam("name") String name) { ApplicationAdminService service = get(ApplicationAdminService.class); - ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND); + ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND + ":" + name); return response(service, appId); } @@ -97,10 +102,14 @@ public Response getApp(@PathParam("name") String name) { @Path("{name}/health") public Response health(@PathParam("name") String name) { ApplicationAdminService service = get(ApplicationAdminService.class); - ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND); + ApplicationId appId = service.getId(name); + nullIsNotFound(appId, APP_ID_NOT_FOUND + ": " + name); + + Application app = service.getApplication(appId); + nullIsNotFound(app, APP_NOT_FOUND + ": " + appId); ComponentsMonitorService componentsMonitorService = get(ComponentsMonitorService.class); - boolean ready = componentsMonitorService.isFullyStarted(service.getApplication(appId).features()); + boolean ready = componentsMonitorService.isFullyStarted(app.features()); return Response.ok(mapper().createObjectNode().put("message", ready ? APP_READY : APP_PENDING)).build(); } @@ -193,7 +202,7 @@ public Response uninstallApp(@PathParam("name") String name) { @Path("{name}/active") public Response activateApp(@PathParam("name") String name) { ApplicationAdminService service = get(ApplicationAdminService.class); - ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND); + ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND + ": " + name); service.activate(appId); return response(service, appId); } @@ -245,7 +254,7 @@ public Response registerAppId(@PathParam("name") String name) { @Path("{name}/bits") public Response getAppBits(@PathParam("name") String name) { ApplicationAdminService service = get(ApplicationAdminService.class); - ApplicationId appId = nullIsNotFound(service.getId(name), APP_ID_NOT_FOUND); + ApplicationId appId = nullIsNotFound(service.getId(name), APP_ID_NOT_FOUND + ": " + name); InputStream bits = service.getApplicationArchive(appId); return ok(bits).build(); } @@ -290,12 +299,13 @@ public Response getAppIds() { } private Response response(ApplicationAdminService service, ApplicationId appId) { - Application app = nullIsNotFound(service.getApplication(appId), APP_NOT_FOUND); + Application app = nullIsNotFound(service.getApplication(appId), + APP_NOT_FOUND + ": " + appId); return ok(codec(Application.class).encode(app, this)).build(); } private Response response(ApplicationId appId) { - ApplicationId checkedAppId = nullIsNotFound(appId, APP_ID_NOT_FOUND); + ApplicationId checkedAppId = nullIsNotFound(appId, APP_ID_NOT_FOUND + ": " + appId); return ok(codec(ApplicationId.class).encode(checkedAppId, this)).build(); } } From a3fa26c1f7d0fc7245f29a93ea4d9e2fdf2bdc88 Mon Sep 17 00:00:00 2001 From: Miguel Borges de Freitas Date: Wed, 13 Oct 2021 10:39:54 +0100 Subject: [PATCH 153/235] [OVSDB] Fix ovsdb passive mode connections Currently ovsdb passive connections are broken. This happens because the eventloop is never initialized. As a result, in connectRetry() (called in connect()) the workerGroup is null and the connection to the switch can't be established. Change-Id: Ic20a3f699e49f119bd2ba6edb6eb8ad94ba09009 --- .../java/org/onosproject/ovsdb/controller/impl/Controller.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/Controller.java b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/Controller.java index 86998c0f64d..c4616be89de 100644 --- a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/Controller.java +++ b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/Controller.java @@ -254,6 +254,8 @@ public void start(OvsdbAgent agent, Callback monitorCallback, boolean mode) { log.warn("Interrupted while waiting to start"); Thread.currentThread().interrupt(); } + } else { + initEventLoopGroup(); } } From 2c39deac5ae8ee150c8ed8d479470e3c7f31f7fc Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 25 Oct 2021 12:54:48 +0200 Subject: [PATCH 154/235] [SDFAB-713] Ensure TrafficMonitor is properly shutdown This fixes also a potential leak of memory and thread Change-Id: I266a37365cef3776463a1aca2c1e2717507b4f30 --- .../ui/impl/topo/Topo2TrafficMessageHandler.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java index a6e0e9d1893..9c84563b327 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java @@ -97,6 +97,12 @@ public void init(UiConnection connection, ServiceDirectory directory) { topoSession = ((UiWebSocket) connection).topoSession(); } + @Override + public void destroy() { + super.destroy(); + traffic2.stopMonitoring(); + } + @Override protected Collection createRequestHandlers() { return ImmutableSet.of( From 178046ba11ab21d94a1e818fb893931bb015734b Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 20 Oct 2021 17:37:52 +0200 Subject: [PATCH 155/235] [SDFAB-705] Fix GUI for the control and data plane resiliency Additionally, fix similar issues in GUI2 and add initial support for ports with name in GUI/GUI2. This is also the first step towards supporting port with name widely in ONOS Change-Id: Ib04f780bf0b7171e82a6beb69b39c0aaeb4be957 --- .../org/onosproject/net/ConnectPoint.java | 17 +- .../onosproject/ui/topo/NodeSelection.java | 6 +- .../org/onosproject/net/ConnectPointTest.java | 49 ++- .../ui/impl/PortViewMessageHandler.java | 2 +- .../ui/impl/TopologyViewMessageHandler.java | 8 +- .../impl/TopologyViewMessageHandlerBase.java | 6 +- .../layer/forcesvg/forcesvg.component.spec.ts | 354 +++++++++++++++++- .../lib/layer/forcesvg/forcesvg.component.ts | 1 + .../lib/layer/forcesvg/models/link.ts | 43 ++- 9 files changed, 464 insertions(+), 22 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java index 7a311aa80db..ac04a05d9d4 100644 --- a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java +++ b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java @@ -178,14 +178,25 @@ public static ConnectPoint fromString(String string) { * - scheme:ip:port/path/cp * * The assumption is the last `/` will separate the device ID - * from the connection point number. + * from the connection point number. If the cp is a named port + * `/` can be included in the port name. We use `[` as heuristic + * to separate the device ID from the port number. */ checkNotNull(string); int idx = string.lastIndexOf("/"); checkArgument(idx != -1, NO_SEP_SPECIFIED); - String id = string.substring(0, idx); - String cp = string.substring(idx + 1); + String id = ""; + String cp = ""; + // deviceId/[ which means the id is 2 chars behind + int nameIdx = string.lastIndexOf("["); + if (nameIdx > 0) { + id = string.substring(0, nameIdx - 1); + cp = string.substring(nameIdx); + } else if (nameIdx < 0) { + id = string.substring(0, idx); + cp = string.substring(idx + 1); + } checkArgument(!cp.isEmpty(), SEP_NO_VALUE); return new ConnectPoint(DeviceId.deviceId(id), PortNumber.fromString(cp)); diff --git a/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java b/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java index 85c51f6cb3a..ae9d4459286 100644 --- a/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java +++ b/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java @@ -36,7 +36,7 @@ import java.util.Set; import static com.google.common.base.Strings.isNullOrEmpty; -import static org.onosproject.net.ConnectPoint.deviceConnectPoint; +import static org.onosproject.net.ConnectPoint.fromString; import static org.onosproject.net.DeviceId.deviceId; import static org.onosproject.net.HostId.hostId; @@ -301,8 +301,8 @@ private Set findLinks(Set ids) { continue; } - cpSrc = deviceConnectPoint(connectPoints[0]); - cpDst = deviceConnectPoint(connectPoints[1]); + cpSrc = fromString(connectPoints[0]); + cpDst = fromString(connectPoints[1]); link = linkService.getLink(cpSrc, cpDst); if (link != null) { diff --git a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java index 73dfe79d368..0a7516de9f9 100644 --- a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java +++ b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java @@ -71,14 +71,47 @@ public void testParseDeviceConnectPoint() { } @Test - public void testParseFromString() { + public void testParseFromStringOF() { + String cp = "of:0011223344556677/1"; + + ConnectPoint connectPoint = ConnectPoint.fromString(cp); + assertEquals("of:0011223344556677", connectPoint.deviceId().toString()); + assertEquals("1", connectPoint.port().toString()); + + expectStringParseException("["); + expectStringParseException("1/["); + expectStringParseException("1/[aasksk"); + expectStringParseException("1/[alksas]"); + } + + @Test + public void testParseFromStringNetconf() { String cp = "netconf:127.0.0.1/[TYPE](1)"; ConnectPoint connectPoint = ConnectPoint.fromString(cp); assertEquals("netconf:127.0.0.1", connectPoint.deviceId().toString()); assertEquals("[TYPE](1)", connectPoint.port().toString()); assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString())); + } + + @Test + public void testParseFromStringBmv2() { + String cp = "device:leaf1/[leaf1-eth4](1)"; + ConnectPoint connectPoint = ConnectPoint.fromString(cp); + assertEquals("device:leaf1", connectPoint.deviceId().toString()); + assertEquals("[leaf1-eth4](1)", connectPoint.port().toString()); + assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString())); + } + + @Test + public void testParseFromStringStratum() { + String cp = "device:leaf1/[3/0](1)"; + + ConnectPoint connectPoint = ConnectPoint.fromString(cp); + assertEquals("device:leaf1", connectPoint.deviceId().toString()); + assertEquals("[3/0](1)", connectPoint.port().toString()); + assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString())); } /** @@ -95,6 +128,20 @@ private static void expectDeviceParseException(String string) { } } + /** + * Parse a string connect point and expect an exception to be thrown. + * + * @param string string to parse + */ + private static void expectStringParseException(String string) { + try { + ConnectPoint.fromString(string); + fail(String.format("Expected exception was not thrown for '%s'", string)); + } catch (Exception e) { + assertTrue(true); + } + } + @Test public void testParseHostConnectPoint() { String cp = "16:3A:BD:6E:31:E4/-1/1"; diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java index 311d44f9c8a..92a051c0d2c 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java @@ -131,7 +131,7 @@ protected void populateTable(TableModel tm, ObjectNode payload) { } private void populateRow(TableModel.Row row, PortStatistics stat) { - row.cell(ID, stat.portNumber().toLong()) + row.cell(ID, stat.portNumber()) .cell(PKT_RX, stat.packetsReceived()) .cell(PKT_TX, stat.packetsSent()) .cell(BYTES_RX, stat.bytesReceived()) diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java index 02bc1ff8817..776ea58f5cf 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java @@ -81,7 +81,7 @@ import static java.util.concurrent.Executors.newSingleThreadExecutor; import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED; -import static org.onosproject.net.ConnectPoint.deviceConnectPoint; +import static org.onosproject.net.ConnectPoint.fromString; import static org.onosproject.net.DeviceId.deviceId; import static org.onosproject.net.HostId.hostId; import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED; @@ -394,7 +394,7 @@ public void process(ObjectNode payload) { if (isEdgeLink) { HostId hid = hostId(srcId); String cpstr = tgtId + SLASH + string(payload, TARGET_PORT); - ConnectPoint cp = deviceConnectPoint(cpstr); + ConnectPoint cp = fromString(cpstr); pp = edgeLinkDetails(hid, cp); overlayCache.currentOverlay().modifyEdgeLinkDetails(pp, hid, cp); @@ -402,8 +402,8 @@ public void process(ObjectNode payload) { } else { String cpAstr = srcId + SLASH + string(payload, SOURCE_PORT); String cpBstr = tgtId + SLASH + string(payload, TARGET_PORT); - ConnectPoint cpA = deviceConnectPoint(cpAstr); - ConnectPoint cpB = deviceConnectPoint(cpBstr); + ConnectPoint cpA = fromString(cpAstr); + ConnectPoint cpB = fromString(cpBstr); pp = infraLinkDetails(cpA, cpB); overlayCache.currentOverlay().modifyInfraLinkDetails(pp, cpA, cpB); diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java index ff52584362d..3bd49856a97 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java @@ -377,7 +377,7 @@ private void addAllCps(Set locations, ObjectNode payload) { private ObjectNode hostConnect(HostLocation location) { return objectNode() .put("device", location.deviceId().toString()) - .put("port", location.port().toLong()); + .put("port", location.port().toString()); } // Encodes the specified list of labels a JSON array. @@ -639,7 +639,7 @@ private void addLinkCpAProps(PropertyPanel pp, ConnectPoint cp, LionBundle lion) pp.addProp(LPL_A_TYPE, lion.getSafe(LPL_A_TYPE), lion.getSafe(DEVICE)) .addProp(LPL_A_ID, lion.getSafe(LPL_A_ID), did.toString()) .addProp(LPL_A_FRIENDLY, lion.getSafe(LPL_A_FRIENDLY), friendlyDevice(did)) - .addProp(LPL_A_PORT, lion.getSafe(LPL_A_PORT), cp.port().toLong()) + .addProp(LPL_A_PORT, lion.getSafe(LPL_A_PORT), cp.port().toString()) .addSeparator(); } @@ -649,7 +649,7 @@ private void addLinkCpBProps(PropertyPanel pp, ConnectPoint cp, LionBundle lion) pp.addProp(LPL_B_TYPE, lion.getSafe(LPL_B_TYPE), lion.getSafe(DEVICE)) .addProp(LPL_B_ID, lion.getSafe(LPL_B_ID), did.toString()) .addProp(LPL_B_FRIENDLY, lion.getSafe(LPL_B_FRIENDLY), friendlyDevice(did)) - .addProp(LPL_B_PORT, lion.getSafe(LPL_B_PORT), cp.port().toLong()) + .addProp(LPL_B_PORT, lion.getSafe(LPL_B_PORT), cp.port().toString()) .addSeparator(); } diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts index 5ebc0d66f19..96142af6889 100644 --- a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts +++ b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.spec.ts @@ -30,7 +30,7 @@ import {DeviceNodeSvgComponent} from './visuals/devicenodesvg/devicenodesvg.comp import {SubRegionNodeSvgComponent} from './visuals/subregionnodesvg/subregionnodesvg.component'; import {HostNodeSvgComponent} from './visuals/hostnodesvg/hostnodesvg.component'; import {LinkSvgComponent} from './visuals/linksvg/linksvg.component'; -import {Device, Host, Link, LinkType, LinkHighlight, Region} from './models'; +import {Device, Host, Link, LinkType, LinkHighlight, Region, Node} from './models'; import {ChangeDetectorRef, SimpleChange} from '@angular/core'; import {TopologyService} from '../../topology.service'; import {BadgeSvgComponent} from './visuals/badgesvg/badgesvg.component'; @@ -1412,6 +1412,122 @@ const topo2Highlights_base_data = `{ "id": "(root)", "subregions": [], "links": [ + { + "id": "00:00:00:00:00:22/120~device:leaf4/[3/0](3)", + "epA": "00:00:00:00:00:22/120", + "epB": "device:leaf4", + "type": "UiEdgeLink", + "portB": "[3/0](3)", + "rollup": [ + { + "id": "00:00:00:00:00:22/120~device:leaf4/[3/0](3)", + "epA": "00:00:00:00:00:22/120", + "epB": "device:leaf4", + "type": "UiEdgeLink", + "portB": "[3/0](3)" + } + ] + }, + { + "id": "00:00:00:00:00:1E/None~device:leaf4/[2/0](2)", + "epA": "00:00:00:00:00:1E/None", + "epB": "device:leaf4", + "type": "UiEdgeLink", + "portB": "[2/0](2)", + "rollup": [ + { + "id": "00:00:00:00:00:1E/None~device:leaf4/[2/0](2)", + "epA": "00:00:00:00:00:1E/None", + "epB": "device:leaf4", + "type": "UiEdgeLink", + "portB": "[2/0](2)" + } + ] + }, + { + "id": "device:leaf4/[1/0](1)~device:spine1/[3/0](3)", + "epA": "device:leaf4/[1/0](1)", + "epB": "device:spine1/[3/0](3)", + "type": "UiDeviceLink", + "portA": "[1/0](1)", + "portB": "[3/0](3)", + "rollup": [ + { + "id": "device:leaf4/[1/0](1)~device:spine1/[3/0](3)", + "epA": "device:leaf4/[1/0](1)", + "epB": "device:spine1/[3/0](3)", + "type": "UiDeviceLink", + "portA": "[1/0](1)", + "portB": "[3/0](3)" + } + ] + }, + { + "id": "00:00:00:00:00:21/120~device:leaf3/[leaf3-eth3](3)", + "epA": "00:00:00:00:00:21/120", + "epB": "device:leaf3", + "type": "UiEdgeLink", + "portB": "[leaf3-eth3](3)", + "rollup": [ + { + "id": "00:00:00:00:00:21/120~device:leaf3/[leaf3-eth3](3)", + "epA": "00:00:00:00:00:21/120", + "epB": "device:leaf3", + "type": "UiEdgeLink", + "portB": "[leaf3-eth3](3)" + } + ] + }, + { + "id": "00:00:00:00:00:1D/None~device:leaf3/[leaf3-eth2](2)", + "epA": "00:00:00:00:00:1D/None", + "epB": "device:leaf3", + "type": "UiEdgeLink", + "portB": "[leaf3-eth2](2)", + "rollup": [ + { + "id": "00:00:00:00:00:1D/None~device:leaf3/[leaf3-eth2](2)", + "epA": "00:00:00:00:00:1D/None", + "epB": "device:leaf3", + "type": "UiEdgeLink", + "portB": "[leaf3-eth2](2)" + } + ] + }, + { + "id": "device:leaf3/[leaf3-eth1](1)~device:spine1/[spine1-eth3](3)", + "epA": "device:leaf3/[leaf3-eth1](1)", + "epB": "device:spine1/[spine1-eth3](3)", + "type": "UiDeviceLink", + "portA": "[leaf3-eth1](1)", + "portB": "[spine1-eth3](3)", + "rollup": [ + { + "id": "device:leaf3/[leaf3-eth1](1)~device:spine1/[spine1-eth3](3)", + "epA": "device:leaf3/[leaf3-eth1](1)", + "epB": "device:spine1/[spine1-eth3](3)", + "type": "UiDeviceLink", + "portA": "[leaf3-eth1](1)", + "portB": "[spine1-eth3](3)" + } + ] + }, + { + "id": "00:00:00:00:00:1F/120~device:leaf1/7", + "epA": "00:00:00:00:00:1F/120", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "7", + "rollup": [ + { + "id": "00:00:00:00:00:1F/120~device:leaf1/7", + "epA": "00:00:00:00:00:1F/120", + "epB": "device:leaf1", + "type": "UiEdgeLink", + "portB": "7" + } + ] + }, { "id": "device:leaf1/1~device:spine1/1", "epA": "device:leaf1/1", @@ -1569,6 +1685,52 @@ const topo2Highlights_base_data = `{ [], [], [ + { + "id": "device:leaf4", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://pippo:50003?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "400.0", + "gridY": "400.0", + "driver": "stratum-tofino", + "name": "device:leaf4", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 400.0, + "longOrX": 400.0 + } + }, + { + "id": "device:leaf3", + "nodeType": "device", + "type": "switch", + "online": true, + "master": "172.24.0.3", + "layer": "def", + "props": { + "managementAddress": "grpc://mininet:50003?device_id=1", + "protocol": "P4Runtime, gNMI, gNOI", + "gridX": "400.0", + "gridY": "400.0", + "driver": "stratum-bmv2", + "name": "device:leaf3", + "p4DeviceId": "1", + "locType": "grid" + }, + "location": { + "locType": "grid", + "latOrY": 400.0, + "longOrX": 400.0 + } + }, { "id": "device:spine1", "nodeType": "device", @@ -1667,6 +1829,116 @@ const topo2Highlights_base_data = `{ [], [], [ + { + "id": "00:00:00:00:00:22/120", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:21/120", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1F/120", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1E/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, + { + "id": "00:00:00:00:00:1D/None", + "nodeType": "host", + "layer": "def", + "ips": [ + "2001:2:3::1" + ], + "props": { + "gridX": "750.0", + "gridY": "700.0", + "latitude": null, + "name": "h3", + "locType": "grid", + "longitude": null + }, + "location": { + "locType": "grid", + "latOrY": 700.0, + "longOrX": 750.0 + }, + "configured": false + }, { "id": "00:00:00:00:00:30/None", "nodeType": "host", @@ -1794,6 +2066,41 @@ const topo2Highlights_sample = ` "devices": [], "hosts": [], "links": [ + { + "id": "00:00:00:00:00:22/120~device:leaf4/[3/0](3)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "00:00:00:00:00:1E/None~device:leaf4/[2/0](2)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "device:leaf4/[1/0](1)~device:spine1/[3/0](3)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "00:00:00:00:00:21/120~device:leaf3/[leaf3-eth3](3)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "00:00:00:00:00:1D/None~device:leaf3/[leaf3-eth2](2)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "device:leaf3/[leaf3-eth1](1)~device:spine1/[spine1-eth3](3)", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, + { + "id": "00:00:00:00:00:1F/120~device:leaf1/7", + "label": "964.91 Kbps", + "css": "secondary port-traffic-green" + }, { "id": "device:leaf2/2~device:spine2/2", "label": "964.91 Kbps", @@ -1828,6 +2135,16 @@ const topo2Highlights_sample = ` } }`; +const topo2Highlights_sample2 = ` +{ + "event": "topo2Highlights", + "payload": { + "devices": [], + "hosts": [], + "links": [] + } +}`; + class MockActivatedRoute extends ActivatedRoute { constructor(params: Params) { super(); @@ -2071,6 +2388,23 @@ describe('ForceSvgComponent', () => { // Like epB of second example in sampleData file - endPtStr does not contain port number expect(ForceSvgComponent.extractNodeName('of:0000000000000206', '6')) .toEqual('of:0000000000000206'); + + // bmv2 case - no port in the endpoint + expect(ForceSvgComponent.extractNodeName('device:leaf1', '[leaf1-eth1](1)')) + .toEqual('device:leaf1'); + + // bmv2 case - port in the endpoint + expect(ForceSvgComponent.extractNodeName('device:leaf1/[leaf1-eth1](1)', '[leaf1-eth1](1)')) + .toEqual('device:leaf1'); + + // tofino case - no port in the endpoint + expect(ForceSvgComponent.extractNodeName('device:leaf1', '[1/0](1)')) + .toEqual('device:leaf1'); + + // tofino case - port in the endpoint + expect(ForceSvgComponent.extractNodeName('device:leaf1/[1/0](1)', '[1/0](1)')) + .toEqual('device:leaf1'); + }); it('should handle openflow regionData change - sample Region', () => { @@ -2100,9 +2434,23 @@ describe('ForceSvgComponent', () => { component.ngOnChanges( {'regionData' : new SimpleChange({}, topo2BaseRegionData, true)}); - expect(component.graph.links.length).toBe(9); + expect(component.graph.links.length).toBe(16); + expect(component.graph.nodes.length).toBe(16) + expect(linkHightlights.length).toBe(13); - expect(linkHightlights.length).toBe(6); + // sanitize deviceNameFromEp + component.graph.links.forEach((l: Link) => { + if (LinkType[l.type] === LinkType.UiEdgeLink) { + // edge link has only one epoint valid (the other is not deviceId) + const foundNode = component.graph.nodes.find((n: Node) => n.id === Link.deviceNameFromEp(l.epB)); + expect(foundNode).toBeDefined(); + } else { + var foundNode = component.graph.nodes.find((n: Node) => n.id === Link.deviceNameFromEp(l.epA)); + expect(foundNode).toBeDefined(); + foundNode = component.graph.nodes.find((n: Node) => n.id === Link.deviceNameFromEp(l.epB)); + expect(foundNode).toBeDefined(); + } + }); // should be able to find all of the highlighted links in the original data set linkHightlights.forEach((lh: LinkHighlight) => { diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.ts b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.ts index dc67bc242d7..234f1e9cc13 100644 --- a/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.ts +++ b/web/gui2-topo-lib/lib/layer/forcesvg/forcesvg.component.ts @@ -123,6 +123,7 @@ export class ForceSvgComponent implements OnInit, OnDestroy, OnChanges { * In some cases - have to remove the port number from the end of a device * name * @param endPtStr The end point name + * @param portStr The port name */ static extractNodeName(endPtStr: string, portStr: string): string { if (portStr === undefined || endPtStr === undefined) { diff --git a/web/gui2-topo-lib/lib/layer/forcesvg/models/link.ts b/web/gui2-topo-lib/lib/layer/forcesvg/models/link.ts index d5ff2a797a9..f3b839c2113 100644 --- a/web/gui2-topo-lib/lib/layer/forcesvg/models/link.ts +++ b/web/gui2-topo-lib/lib/layer/forcesvg/models/link.ts @@ -55,7 +55,12 @@ export class Link implements UiElement, d3.SimulationLinkDatum { public static deviceNameFromEp(ep: string): string { if (ep !== undefined && ep.lastIndexOf('/') > 0) { - return ep.substr(0, ep.lastIndexOf('/')); + // named port format is [name](number) + if (ep.includes('[')) { + return ep.substr(0, ep.lastIndexOf('[') - 1); + } else { + return ep.substr(0, ep.lastIndexOf('/')); + } } return ep; } @@ -66,17 +71,47 @@ export class Link implements UiElement, d3.SimulationLinkDatum { * @param linkId The id of the link in either format */ public static linkIdFromShowHighlights(linkId: string) { - if (linkId.includes('-')) { - const parts: string[] = linkId.split('-'); + // Already in the right format + if (linkId.includes('~')) { + const parts: string[] = linkId.split('~'); + // remove host part if needed const part0 = Link.removeHostPortNum(parts[0]); const part1 = Link.removeHostPortNum(parts[1]); return part0 + '~' + part1; } + + // Custom traffic highlight + if (linkId.includes('-')) { + // "-" is used only as separator between the links + if (linkId.indexOf('-') === linkId.lastIndexOf('-')) { + const parts: string[] = linkId.split('-'); + const part0 = Link.removeHostPortNum(parts[0]); + const part1 = Link.removeHostPortNum(parts[1]); + return part0 + '~' + part1; + } else if (linkId.includes(')')) { + // "-" is used in the port name + var index = linkId.indexOf(')'); + // the format is [name](number) on both ends + if (linkId.charAt(index + 1) === '-') { + const part0 = Link.removeHostPortNum(linkId.substr(0, index + 1)); + const part1 = Link.removeHostPortNum(linkId.substr(index + 2, linkId.length)); + return part0 + '~' + part1; + } else { + index = linkId.indexOf('-'); + const part0 = Link.removeHostPortNum(linkId.substr(0, index)); + const part1 = Link.removeHostPortNum(linkId.substr(index + 1, linkId.length)); + return part0 + '~' + part1; + } + } + } + + // unknown format return linkId; } private static removeHostPortNum(hostStr: string) { - if (hostStr.includes('/None/')) { + // Regex is for the tagged hosts + if (hostStr.includes('/None/') || hostStr.match('/[+-]?[0-9]+/')) { const subparts = hostStr.split('/'); return subparts[0] + '/' + subparts[1]; } From 757307bea9baff81746305a5878cbdb5ef0eaa21 Mon Sep 17 00:00:00 2001 From: Miguel Borges de Freitas Date: Wed, 20 Oct 2021 17:12:02 +0100 Subject: [PATCH 156/235] [P4Runtime] Make sure write requests contain the codec failure reason The submit() method of p4 WriteRequestImpl is returning an empty response if there are no update messages. However, one of the reasons for updates to be empty is the fact the catch block in appendToRequestMsg is reached due to some invalid usage of the p4runtime contract. In such situations, not only the user doesn't know why the request is failing (absence of logging in ONOS) but the responseBuilder which contains the failure is also not propagated. As a result, a future call to P4RuntimeWriteClient.WriteResponse.isSuccess() will return true (as if the request actually succeeded) and .all() will also not contain the failedResponse appended during the CodecException. Added a test to illustrate the issue. Change-Id: I0acfd3b34b3ed1db2d91f91fed08f9d00800dda4 (cherry picked from commit 89e3d23d2b865d1f94c3f5d31c792ffe33d01311) --- .../ctl/client/WriteRequestImpl.java | 3 ++- .../p4runtime/ctl/P4RuntimeGroupTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/WriteRequestImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/WriteRequestImpl.java index 2201948433e..45e2c75b610 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/WriteRequestImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/WriteRequestImpl.java @@ -169,7 +169,7 @@ public CompletableFuture submit() { client.deviceId(), writeRequest.getUpdatesCount()); if (writeRequest.getUpdatesCount() == 0) { // No need to ask the server. - return completedFuture(WriteResponseImpl.EMPTY); + return completedFuture(responseBuilder.buildAsIs()); } final CompletableFuture future = new CompletableFuture<>(); @@ -243,6 +243,7 @@ private void appendToRequestMsg(P4RuntimeWriteClient.UpdateType updateType, piEntity == null ? handle : piEntity); } } catch (CodecException e) { + log.error("Failed to add {} to write request for {}: {}", updateType, handle.deviceId(), e.getMessage()); responseBuilder.addFailedResponse( handle, piEntity, updateType, e.getMessage(), P4RuntimeWriteClient.EntityUpdateStatus.CODEC_ERROR); diff --git a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java index 146f10218c1..b7e806b68eb 100644 --- a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java +++ b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java @@ -45,6 +45,7 @@ import org.onosproject.net.pi.runtime.PiActionProfileGroupId; import org.onosproject.net.pi.runtime.PiActionProfileMember; import org.onosproject.net.pi.runtime.PiActionProfileMemberId; +import org.onosproject.p4runtime.api.P4RuntimeWriteClient; import org.onosproject.p4runtime.ctl.client.P4RuntimeClientImpl; import org.onosproject.p4runtime.ctl.controller.P4RuntimeControllerImpl; import p4.v1.P4RuntimeOuterClass.ActionProfileGroup; @@ -167,6 +168,27 @@ public void teardown() { client.shutdown(); } + @Test + public void testInvalidPiActionProfileMember() { + PiActionParam param = new PiActionParam(PORT_PARAM_ID, "invalidString"); + PiAction piAction = PiAction.builder() + .withId(EGRESS_PORT_ACTION_ID) + .withParameter(param).build(); + PiActionProfileMember actionProfileMember = PiActionProfileMember.builder() + .forActionProfile(ACT_PROF_ID) + .withAction(piAction) + .withId(PiActionProfileMemberId.of(BASE_MEM_ID + 1)) + .build(); + P4RuntimeWriteClient.WriteRequest writeRequest = client.write(P4_DEVICE_ID, PIPECONF); + writeRequest.insert(actionProfileMember); + P4RuntimeWriteClient.WriteResponse response = writeRequest.submitSync(); + + assertEquals(false, response.isSuccess()); + assertEquals(1, response.all().size()); + assertEquals("Wrong size for param 'port' of action 'set_egress_port', expected 2 bytes, but found 13", + response.all().iterator().next().explanation()); + } + @Test public void testInsertPiActionProfileGroup() throws Exception { CompletableFuture complete = p4RuntimeServerImpl.expectRequests(1); From 3a615560678cb83fa41f393fa59c346cdae659e2 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 25 Oct 2021 18:49:09 +0200 Subject: [PATCH 157/235] Fix npe during hostVanished handling java.lang.NullPointerException: null at org.onosproject.net.host.impl.HostManager$InternalHostProviderService.hostVanished(HostManager.java:573) ~[?:?] at org.onosproject.provider.netcfghost.NetworkConfigHostProvider.removeHost(NetworkConfigHostProvider.java:189) ~[?:?] at org.onosproject.provider.netcfghost.NetworkConfigHostProvider$InternalNetworkConfigListener.event(NetworkConfigHostProvider.java:274) ~[?:?] at org.onosproject.provider.netcfghost.NetworkConfigHostProvider$InternalNetworkConfigListener.event(NetworkConfigHostProvider.java:222) ~[?:?] at org.onosproject.event.ListenerRegistry.process(ListenerRegistry.java:66) [!/:?] at org.onosproject.event.impl.CoreEventDispatcher$DispatchLoop.process(CoreEventDispatcher.java:198) [!/:?] at org.onosproject.event.impl.CoreEventDispatcher$DispatchLoop.run(CoreEventDispatcher.java:180) [!/:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?] at java.lang.Thread.run(Thread.java:834) [?:?] Change-Id: If6e3978798d5fb11b3f5b1344b551b9f3cd3e51d --- .../java/org/onosproject/net/host/impl/HostManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java index 46cbc0a7dab..a02159c9333 100644 --- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java +++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java @@ -562,6 +562,7 @@ public void removeDuplicates(HostId hostId, HostDescription desc) { public void hostVanished(HostId hostId) { checkNotNull(hostId, HOST_ID_NULL); checkValidity(); + // TODO SDFAB-718 rethink HostStore APIs to allow atomic operations Host host = store.getHost(hostId); if (!allowedToChange(hostId)) { @@ -569,6 +570,11 @@ public void hostVanished(HostId hostId) { return; } + if (host == null) { + log.info("Request to remove {} is ignored due to host not present in the store", hostId); + return; + } + if (monitorHosts) { host.ipAddresses().forEach(ip -> { monitor.stopMonitoring(ip); From 597195054b6aee415e14258afb089ad23c005e3d Mon Sep 17 00:00:00 2001 From: David Glantz Date: Mon, 4 Oct 2021 09:10:20 -0500 Subject: [PATCH 158/235] Return intent collection with details Added backwards compatible flag to GET /intents/ to return full intent JSON. Added GET /intents/application/{appId} to return application specifc intents. Extended IntentService to include getIntentsByAppId(appId). Removed hard-coded intent codec lookup in IntentWebResource. Change-Id: I38e7b1dbd7669e654afe723f6ec3a4eb7a9af6fb --- .../impl/VirtualNetworkIntentManager.java | 14 + .../onosproject/net/intent/IntentService.java | 9 + .../net/intent/FakeIntentManager.java | 11 + .../net/intent/IntentServiceAdapter.java | 7 + .../net/intent/IntentTestsMocks.java | 7 + .../net/intent/impl/IntentManager.java | 19 +- .../net/intent/impl/IntentManagerTest.java | 14 +- .../rest/resources/IntentsWebResource.java | 91 ++-- .../rest/resources/IntentsResourceTest.java | 445 +++++++++++++++++- 9 files changed, 565 insertions(+), 52 deletions(-) diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java index f4c1137e234..475bf6e75c7 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java @@ -16,6 +16,7 @@ package org.onosproject.incubator.net.virtual.impl; +import com.google.common.collect.ImmutableSet; import org.onlab.util.Tools; import org.onosproject.incubator.net.virtual.NetworkId; import org.onosproject.incubator.net.virtual.VirtualNetworkIntent; @@ -33,6 +34,7 @@ import org.onosproject.incubator.net.virtual.impl.intent.phase.VirtualIntentProcessPhase; import org.onosproject.incubator.net.virtual.impl.intent.VirtualIntentProcessor; import org.onosproject.incubator.net.virtual.impl.intent.VirtualIntentSkipped; +import org.onosproject.core.ApplicationId; import org.onosproject.net.ConnectPoint; import org.onosproject.net.DeviceId; import org.onosproject.net.Port; @@ -222,6 +224,18 @@ public Iterable getIntents() { return intentStore.getIntents(networkId); } + @Override + public Iterable getIntentsByAppId(ApplicationId id) { + ImmutableSet.Builder builder = ImmutableSet.builder(); + for (Intent intent : intentStore.getIntents(networkId)) { + if (intent.appId().equals(id)) { + builder.add(intent); + } + } + + return builder.build(); + } + @Override public void addPending(IntentData intentData) { checkNotNull(intentData, INTENT_NULL); diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentService.java b/core/api/src/main/java/org/onosproject/net/intent/IntentService.java index 595e7e333ae..745d7f4609c 100644 --- a/core/api/src/main/java/org/onosproject/net/intent/IntentService.java +++ b/core/api/src/main/java/org/onosproject/net/intent/IntentService.java @@ -17,6 +17,7 @@ import com.google.common.annotations.Beta; +import org.onosproject.core.ApplicationId; import org.onosproject.event.ListenerService; import java.util.List; @@ -71,6 +72,14 @@ public interface IntentService */ Iterable getIntents(); + /** + * Returns an iterable of all intents with this application ID. + * + * @param id the application ID to look up + * @return collection of intents + */ + Iterable getIntentsByAppId(ApplicationId id); + /** * Adds an intent data object to the pending map for processing. *

diff --git a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java index e3e6277f4db..870ad0b8ca3 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java +++ b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java @@ -16,6 +16,7 @@ package org.onosproject.net.intent; import com.google.common.collect.ImmutableMap; +import org.onosproject.core.ApplicationId; import java.util.ArrayList; import java.util.Collections; @@ -26,6 +27,7 @@ import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; /** * Fake implementation of the intent service to assist in developing tests of @@ -178,6 +180,15 @@ public Set getIntents() { return Collections.unmodifiableSet(new HashSet<>(intents.values())); } + @Override + public Set getIntentsByAppId(ApplicationId id) { + return Collections.unmodifiableSet( + intents.values().stream() + .filter(intent -> intent.appId().equals(id)) + .collect(Collectors.toSet()) + ); + } + @Override public void addPending(IntentData intentData) { throw new UnsupportedOperationException(); diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java index 850344790e3..17f489e38f4 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java +++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java @@ -16,6 +16,8 @@ package org.onosproject.net.intent; +import org.onosproject.core.ApplicationId; + import java.util.List; /** @@ -42,6 +44,11 @@ public Iterable getIntents() { return null; } + @Override + public Iterable getIntentsByAppId(ApplicationId id) { + return null; + } + @Override public void addPending(IntentData intentData) { diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java index 642830e71d5..bdfa10641f4 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java +++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java @@ -19,6 +19,7 @@ import com.google.common.collect.Sets; import org.onlab.graph.ScalarWeight; import org.onlab.graph.Weight; +import org.onosproject.core.ApplicationId; import org.onosproject.core.GroupId; import org.onosproject.net.ConnectPoint; import org.onosproject.net.DefaultLink; @@ -557,6 +558,12 @@ public MockIntent(Long number) { this.number = number; } + public MockIntent(Long number, ApplicationId appId) { + super(appId, null, Collections.emptyList(), + Intent.DEFAULT_INTENT_PRIORITY, null); + this.number = number; + } + public MockIntent(Long number, Collection resources) { super(NetTestTools.APP_ID, null, resources, Intent.DEFAULT_INTENT_PRIORITY, null); this.number = number; diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java index 2b83fa8a029..da13b76a663 100644 --- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java +++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java @@ -15,8 +15,10 @@ */ package org.onosproject.net.intent.impl; +import com.google.common.collect.ImmutableSet; import org.onlab.util.Tools; import org.onosproject.cfg.ComponentConfigService; +import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.core.IdGenerator; import org.onosproject.event.AbstractListenerManager; @@ -87,8 +89,7 @@ import static org.onosproject.net.intent.constraint.PartialFailureConstraint.intentAllowsPartialFailure; import static org.onosproject.net.intent.impl.phase.IntentProcessPhase.newInitialPhase; import static org.onosproject.security.AppGuard.checkPermission; -import static org.onosproject.security.AppPermission.Type.INTENT_READ; -import static org.onosproject.security.AppPermission.Type.INTENT_WRITE; +import static org.onosproject.security.AppPermission.Type.*; import static org.slf4j.LoggerFactory.getLogger; /** @@ -290,6 +291,20 @@ public Iterable getIntents() { return store.getIntents(); } + @Override + public Iterable getIntentsByAppId(ApplicationId id) { + checkPermission(INTENT_READ); + + ImmutableSet.Builder builder = ImmutableSet.builder(); + for (Intent intent : store.getIntents()) { + if (intent.appId().equals(id)) { + builder.add(intent); + } + } + + return builder.build(); + } + @Override public void addPending(IntentData intentData) { checkPermission(INTENT_WRITE); diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java index 14fb3803708..db92800ee53 100644 --- a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java @@ -32,6 +32,7 @@ import org.onosproject.common.event.impl.TestEventDispatcher; import org.onosproject.core.ApplicationId; import org.onosproject.core.impl.TestCoreManager; +import org.onosproject.net.NetTestTools; import org.onosproject.net.NetworkResource; import org.onosproject.net.flow.FlowRuleOperations; import org.onosproject.net.flow.FlowRuleOperationsContext; @@ -557,8 +558,8 @@ public void testIntentFetching() { intents = Lists.newArrayList(service.getIntents()); assertThat(intents, hasSize(0)); - final MockIntent intent1 = new MockIntent(MockIntent.nextId()); - final MockIntent intent2 = new MockIntent(MockIntent.nextId()); + final MockIntent intent1 = new MockIntent(MockIntent.nextId(), NetTestTools.APP_ID); + final MockIntent intent2 = new MockIntent(MockIntent.nextId(), NetTestTools.APP_ID_2); listener.setLatch(2, Type.INSTALL_REQ); listener.setLatch(2, Type.INSTALLED); @@ -575,6 +576,15 @@ public void testIntentFetching() { assertThat(intents, hasIntentWithId(intent1.id())); assertThat(intents, hasIntentWithId(intent2.id())); verifyState(); + + List intentsAppId = Lists.newArrayList(service.getIntentsByAppId(NetTestTools.APP_ID)); + assertThat(intentsAppId, hasSize(1)); + assertThat(intentsAppId, hasIntentWithId(intent1.id())); + + List intentsAppId2 = Lists.newArrayList(service.getIntentsByAppId(NetTestTools.APP_ID_2)); + assertThat(intentsAppId2, hasSize(1)); + assertThat(intentsAppId2, hasIntentWithId(intent2.id())); + verifyState(); } /** diff --git a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java index 297f70e5181..4a76749afe2 100644 --- a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java +++ b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java @@ -17,14 +17,11 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.onosproject.codec.JsonCodec; import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.intent.SinglePointToMultiPointIntent; -import org.onosproject.net.intent.MultiPointToSinglePointIntent; -import org.onosproject.net.intent.PointToPointIntent; -import org.onosproject.net.intent.HostToHostIntent; import org.onosproject.net.intent.Intent; import org.onosproject.net.intent.IntentState; import org.onosproject.net.intent.IntentEvent; @@ -43,6 +40,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -53,6 +51,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -72,14 +71,7 @@ public class IntentsWebResource extends AbstractWebResource { private static final int WITHDRAW_EVENT_TIMEOUT_SECONDS = 5; private static final String APP_ID_NOT_FOUND = "Application Id not found"; - private static final String HOST_TO_HOST_INTENT = "HostToHostIntent"; - private static final String POINT_TO_POINT_INTENT = "PointToPointIntent"; - private static final String SINGLE_TO_MULTI_POINT_INTENT = - "SinglePointToMultiPointIntent"; - private static final String MULTI_TO_SINGLE_POINT_INTENT = - "MultiPointToSinglePointIntent"; - - private static final String INTENT = "Intent"; + private static final String INTENTS = "intents"; private static final String APP_ID = "appId"; private static final String ID = "id"; private static final String INTENT_PATHS = "paths"; @@ -89,18 +81,38 @@ public class IntentsWebResource extends AbstractWebResource { @Context private UriInfo uriInfo; + /** + * Returns the JSON codec for the specified intent. + * + * @param intent the intent instance + * @return JSON codec + */ + public JsonCodec codec(Intent intent) { + return Optional.ofNullable((JsonCodec) codec(intent.getClass())) + .orElse(codec(Intent.class)); + } + /** * Gets all intents. * Returns array containing all the intents in the system. + * @param detail flag to return full details of intents in list. * * @return 200 OK with array of all the intents in the system * @onos.rsModel Intents */ @GET @Produces(MediaType.APPLICATION_JSON) - public Response getIntents() { + public Response getIntents(@QueryParam("detail") boolean detail) { + ObjectNode root = null; final Iterable intents = get(IntentService.class).getIntents(); - final ObjectNode root = encodeArray(Intent.class, "intents", intents); + if (detail) { + root = mapper().createObjectNode(); + ArrayNode intentsNode = root.putArray(INTENTS); + intents.forEach(intent -> intentsNode.add(codec(intent).encode(intent, this))); + } else { + root = encodeArray(Intent.class, INTENTS, intents); + } + return ok(root).build(); } @@ -179,18 +191,37 @@ public Response getIntentById(@PathParam("appId") String appId, } nullIsNotFound(intent, INTENT_NOT_FOUND); - final ObjectNode root; - if (intent instanceof HostToHostIntent) { - root = codec(HostToHostIntent.class).encode((HostToHostIntent) intent, this); - } else if (intent instanceof PointToPointIntent) { - root = codec(PointToPointIntent.class).encode((PointToPointIntent) intent, this); - } else if (intent instanceof SinglePointToMultiPointIntent) { - root = codec(SinglePointToMultiPointIntent.class).encode((SinglePointToMultiPointIntent) intent, this); - } else if (intent instanceof MultiPointToSinglePointIntent) { - root = codec(MultiPointToSinglePointIntent.class).encode((MultiPointToSinglePointIntent) intent, this); + final ObjectNode root = codec(intent).encode(intent, this); + + return ok(root).build(); + } + + /** + * Gets intents by application. + * Returns the intents specified by the application id. + * @param detail flag to return full details of intents in list. + * + * @param appId application identifier + * @return 200 OK with a collection of intents of given application id + * @onos.rsModel Intents + */ + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("application/{appId}") + public Response getIntentsByAppId(@PathParam("appId") String appId, @QueryParam("detail") boolean detail) { + final ApplicationId app = get(CoreService.class).getAppId(appId); + nullIsNotFound(app, APP_ID_NOT_FOUND); + + final Iterable intents = get(IntentService.class).getIntentsByAppId(app); + ObjectNode root = null; + if (detail) { + root = mapper().createObjectNode(); + ArrayNode intentsNode = root.putArray(INTENTS); + intents.forEach(intent -> intentsNode.add(codec(intent).encode(intent, this))); } else { - root = codec(Intent.class).encode(intent, this); + root = encodeArray(Intent.class, INTENTS, intents); } + return ok(root).build(); } @@ -230,17 +261,7 @@ public Response getIntentFlowsById(@PathParam("appId") String appId, List installables = intentService.getInstallableIntents(intent.key()); - if (intent instanceof HostToHostIntent) { - root.put(INTENT_TYPE, HOST_TO_HOST_INTENT); - } else if (intent instanceof PointToPointIntent) { - root.put(INTENT_TYPE, POINT_TO_POINT_INTENT); - } else if (intent instanceof SinglePointToMultiPointIntent) { - root.put(INTENT_TYPE, SINGLE_TO_MULTI_POINT_INTENT); - } else if (intent instanceof MultiPointToSinglePointIntent) { - root.put(INTENT_TYPE, MULTI_TO_SINGLE_POINT_INTENT); - } else { - root.put(INTENT_TYPE, INTENT); - } + root.put(INTENT_TYPE, intent.getClass().getSimpleName()); ArrayNode pathsNode = root.putArray(INTENT_PATHS); diff --git a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java index 318f90d36ce..7867ab6a41f 100644 --- a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java +++ b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java @@ -39,6 +39,8 @@ import org.onosproject.net.ConnectPoint; import org.onosproject.net.DefaultLink; import org.onosproject.net.DeviceId; +import org.onosproject.net.FilteredConnectPoint; +import org.onosproject.net.HostId; import org.onosproject.net.Link; import org.onosproject.net.NetworkResource; import org.onosproject.net.PortNumber; @@ -54,14 +56,17 @@ import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; import org.onosproject.net.flow.instructions.Instruction; +import org.onosproject.net.intent.ConnectivityIntent; import org.onosproject.net.intent.FakeIntentManager; import org.onosproject.net.intent.FlowRuleIntent; +import org.onosproject.net.intent.HostToHostIntent; import org.onosproject.net.intent.Intent; import org.onosproject.net.intent.IntentService; import org.onosproject.net.intent.IntentState; import org.onosproject.net.intent.Key; import org.onosproject.net.intent.MockIdGenerator; import org.onosproject.net.intent.PathIntent; +import org.onosproject.net.intent.PointToPointIntent; import org.onosproject.net.provider.ProviderId; @@ -85,6 +90,7 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +import static org.onosproject.net.NetTestTools.hid; import static org.onosproject.net.intent.IntentTestsMocks.MockIntent; /** @@ -116,6 +122,10 @@ public class IntentsResourceTest extends ResourceTest { final HashSet intents = new HashSet<>(); final List installableIntents = new ArrayList<>(); private static final ApplicationId APP_ID = new DefaultApplicationId(1, "test"); + private static final ApplicationId APP_ID_2 = new DefaultApplicationId(2, "test2"); + + private final HostId hostId1 = hid("12:34:56:78:91:ab/1"); + private final HostId hostId2 = hid("12:34:56:78:92:ab/1"); final DeviceId deviceId1 = DeviceId.deviceId("1"); final DeviceId deviceId2 = DeviceId.deviceId("2"); @@ -364,12 +374,18 @@ public boolean exactMatch(FlowRule rule) { */ public static class IntentJsonMatcher extends TypeSafeMatcher { private final Intent intent; + private boolean detail = false; private String reason = ""; public IntentJsonMatcher(Intent intentValue) { intent = intentValue; } + public IntentJsonMatcher(Intent intentValue, boolean detailValue) { + intent = intentValue; + detail = detailValue; + } + @Override public boolean matchesSafely(JsonObject jsonIntent) { // check id @@ -449,9 +465,139 @@ public boolean matchesSafely(JsonObject jsonIntent) { reason = "resources array empty"; return false; } + + if (intent instanceof ConnectivityIntent && detail) { + return matchConnectivityIntent(jsonIntent); + } + + return true; + } + + public boolean matchesConnectPoint(ConnectPoint connectPoint, JsonObject jsonConnectPoint) { + // check device + final String jsonDevice = jsonConnectPoint.get("device").asString(); + final String device = connectPoint.deviceId().toString(); + if (!jsonDevice.equals(device)) { + reason = "device was " + jsonDevice; + return false; + } + + // check port + final String jsonPort = jsonConnectPoint.get("port").asString(); + final String port = connectPoint.port().toString(); + if (!jsonPort.equals(port)) { + reason = "port was " + jsonPort; + return false; + } + + return true; + } + + private boolean matchHostToHostIntent(JsonObject jsonIntent) { + final HostToHostIntent hostToHostIntent = (HostToHostIntent) intent; + + // check host one + final String host1 = hostToHostIntent.one().toString(); + final String jsonHost1 = jsonIntent.get("one").asString(); + if (!host1.equals(jsonHost1)) { + reason = "host one was " + jsonHost1; + return false; + } + + // check host 2 + final String host2 = hostToHostIntent.two().toString(); + final String jsonHost2 = jsonIntent.get("two").asString(); + if (!host2.equals(jsonHost2)) { + reason = "host two was " + jsonHost2; + return false; + } return true; } + /** + * Matches the JSON representation of a point to point intent. + * + * @param jsonIntent JSON representation of the intent + * @return true if the JSON matches the intent, false otherwise + */ + private boolean matchPointToPointIntent(JsonObject jsonIntent) { + final PointToPointIntent pointToPointIntent = (PointToPointIntent) intent; + + // check ingress connection + final ConnectPoint ingress = pointToPointIntent.filteredIngressPoint().connectPoint(); + final JsonObject jsonIngress = jsonIntent.get("ingressPoint").asObject(); + final boolean ingressMatches = matchesConnectPoint(ingress, jsonIngress); + + if (!ingressMatches) { + reason = "ingress was " + jsonIngress; + return false; + } + + // check egress connection + final ConnectPoint egress = pointToPointIntent.filteredEgressPoint().connectPoint(); + final JsonObject jsonEgress = jsonIntent.get("egressPoint").asObject(); + final boolean egressMatches = matchesConnectPoint(egress, jsonEgress); + + if (!egressMatches) { + reason = "egress was " + jsonEgress; + return false; + } + + return true; + } + + /** + * Matches the JSON representation of a connectivity intent. Calls the + * matcher for the connectivity intent subtype. + * + * @param jsonIntent JSON representation of the intent + * @return true if the JSON matches the intent, false otherwise + */ + private boolean matchConnectivityIntent(JsonObject jsonIntent) { + final ConnectivityIntent connectivityIntent = (ConnectivityIntent) intent; + + // check selector + final JsonObject jsonSelector = jsonIntent.get("selector").asObject(); + final TrafficSelector selector = connectivityIntent.selector(); + final Set criteria = selector.criteria(); + final JsonArray jsonCriteria = jsonSelector.get("criteria").asArray(); + if (jsonCriteria.size() != criteria.size()) { + reason = "size of criteria array is " + Integer.toString(jsonCriteria.size()); + return false; + } + + // check treatment + final JsonObject jsonTreatment = jsonIntent.get("treatment").asObject(); + final TrafficTreatment treatment = connectivityIntent.treatment(); + final List instructions = treatment.immediate(); + final JsonArray jsonInstructions = jsonTreatment.get("instructions").asArray(); + if (jsonInstructions.size() != instructions.size()) { + reason = "size of instructions array is " + Integer.toString(jsonInstructions.size()); + return false; + } + + // Check constraints + final JsonArray jsonConstraints = jsonIntent.get("constraints").asArray(); + if (connectivityIntent.constraints() != null) { + if (connectivityIntent.constraints().size() != jsonConstraints.size()) { + reason = "constraints array size was " + Integer.toString(jsonConstraints.size()); + return false; + } + } else if (jsonConstraints.size() != 0) { + reason = "constraint array not empty"; + return false; + } + + if (connectivityIntent instanceof HostToHostIntent) { + return matchHostToHostIntent(jsonIntent); + } else if (connectivityIntent instanceof PointToPointIntent) { + return matchPointToPointIntent(jsonIntent); + } else { + reason = "class of connectivity intent is unknown"; + return false; + } + } + @Override public void describeTo(Description description) { description.appendText(reason); @@ -462,10 +608,11 @@ public void describeTo(Description description) { * Factory to allocate an intent matcher. * * @param intent intent object we are looking for + * @param detail flag to verify if JSON contains detailed attributes for the intent's implementation class. * @return matcher */ - private static IntentJsonMatcher matchesIntent(Intent intent) { - return new IntentJsonMatcher(intent); + private static IntentJsonMatcher matchesIntent(Intent intent, boolean detail) { + return new IntentJsonMatcher(intent, detail); } /** @@ -668,10 +815,12 @@ public void describeTo(Description description) { */ public static class IntentJsonArrayMatcher extends TypeSafeMatcher { private final Intent intent; + private boolean detail = false; private String reason = ""; - public IntentJsonArrayMatcher(Intent intentValue) { + public IntentJsonArrayMatcher(Intent intentValue, boolean detailValue) { intent = intentValue; + detail = detailValue; } @Override @@ -683,7 +832,7 @@ public boolean matchesSafely(JsonArray json) { final JsonObject jsonIntent = json.get(jsonIntentIndex).asObject(); - if (jsonIntent.names().size() != expectedAttributes) { + if (jsonIntent.names().size() != expectedAttributes && !detail) { reason = "Found an intent with the wrong number of attributes"; return false; } @@ -693,7 +842,7 @@ public boolean matchesSafely(JsonArray json) { intentFound = true; // We found the correct intent, check attribute values - assertThat(jsonIntent, matchesIntent(intent)); + assertThat(jsonIntent, matchesIntent(intent, detail)); } } if (!intentFound) { @@ -714,10 +863,11 @@ public void describeTo(Description description) { * Factory to allocate an intent array matcher. * * @param intent intent object we are looking for + * @param detail flag to verify if JSON contains detailed attributes for the intent's implementation class. * @return matcher */ - private static IntentJsonArrayMatcher hasIntent(Intent intent) { - return new IntentJsonArrayMatcher(intent); + private static IntentJsonArrayMatcher hasIntent(Intent intent, boolean detail) { + return new IntentJsonArrayMatcher(intent, detail); } /** @@ -793,8 +943,8 @@ public void testIntentsArray() { final JsonArray jsonIntents = result.get("intents").asArray(); assertThat(jsonIntents, notNullValue()); - assertThat(jsonIntents, hasIntent(intent1)); - assertThat(jsonIntents, hasIntent(intent2)); + assertThat(jsonIntents, hasIntent(intent1, false)); + assertThat(jsonIntents, hasIntent(intent2, false)); } /** @@ -832,13 +982,282 @@ public void testIntentsSingle() { final String response = wt.path("intents/" + APP_ID.name() + "/0").request().get(String.class); final JsonObject result = Json.parse(response).asObject(); - assertThat(result, matchesIntent(intent)); + assertThat(result, matchesIntent(intent, true)); // Test get using numeric value final String responseNumeric = wt.path("intents/" + APP_ID.name() + "/0x0").request().get(String.class); final JsonObject resultNumeric = Json.parse(responseNumeric).asObject(); - assertThat(resultNumeric, matchesIntent(intent)); + assertThat(resultNumeric, matchesIntent(intent, true)); + } + + /** + * Tests the result of the rest api GET when intents are defined and the detail flag is false. + */ + @Test + public void testIntentsArrayWithoutDetail() { + replay(mockIntentService); + + final PointToPointIntent intent1 = + PointToPointIntent.builder() + .appId(APP_ID) + .selector(selector1) + .treatment(treatment1) + .filteredIngressPoint(new FilteredConnectPoint(connectPoint1)) + .filteredEgressPoint(new FilteredConnectPoint(connectPoint2)) + .build(); + + final HashSet resources = new HashSet<>(); + resources.add(new MockResource(1)); + resources.add(new MockResource(2)); + resources.add(new MockResource(3)); + + final HostToHostIntent intent2 = + HostToHostIntent.builder() + .appId(APP_ID) + .selector(selector2) + .treatment(treatment2) + .one(hostId1) + .two(hostId2) + .build(); + + intents.add(intent1); + intents.add(intent2); + + final WebTarget wt = target(); + final String response = wt.path("intents").queryParam("detail", false).request().get(String.class); + assertThat(response, containsString("{\"intents\":[")); + + final JsonObject result = Json.parse(response).asObject(); + assertThat(result, notNullValue()); + + assertThat(result.names(), hasSize(1)); + assertThat(result.names().get(0), is("intents")); + + final JsonArray jsonIntents = result.get("intents").asArray(); + assertThat(jsonIntents, notNullValue()); + + assertThat(jsonIntents, hasIntent(intent1, false)); + } + + /** + * Tests the result of the rest api GET when intents are defined and the detail flag is true. + */ + @Test + public void testIntentsArrayWithDetail() { + replay(mockIntentService); + + final PointToPointIntent intent1 = + PointToPointIntent.builder() + .appId(APP_ID) + .selector(selector1) + .treatment(treatment1) + .filteredIngressPoint(new FilteredConnectPoint(connectPoint1)) + .filteredEgressPoint(new FilteredConnectPoint(connectPoint2)) + .build(); + + final HashSet resources = new HashSet<>(); + resources.add(new MockResource(1)); + resources.add(new MockResource(2)); + resources.add(new MockResource(3)); + + final HostToHostIntent intent2 = + HostToHostIntent.builder() + .appId(APP_ID) + .selector(selector2) + .treatment(treatment2) + .one(hostId1) + .two(hostId2) + .build(); + + intents.add(intent1); + intents.add(intent2); + + final WebTarget wt = target(); + final String response = wt.path("intents").queryParam("detail", true).request().get(String.class); + assertThat(response, containsString("{\"intents\":[")); + + final JsonObject result = Json.parse(response).asObject(); + assertThat(result, notNullValue()); + + assertThat(result.names(), hasSize(1)); + assertThat(result.names().get(0), is("intents")); + + final JsonArray jsonIntents = result.get("intents").asArray(); + assertThat(jsonIntents, notNullValue()); + + assertThat(jsonIntents, hasIntent(intent1, true)); + } + + /** + * Tests the result of the rest api GET when intents are defined. + */ + @Test + public void testIntentsForApplicationWithoutDetail() { + final Intent intent1 = + PointToPointIntent.builder() + .key(Key.of(0, APP_ID)) + .appId(APP_ID) + .selector(selector1) + .treatment(treatment1) + .filteredIngressPoint(new FilteredConnectPoint(connectPoint1)) + .filteredEgressPoint(new FilteredConnectPoint(connectPoint2)) + .build(); + + final HostToHostIntent intent2 = + HostToHostIntent.builder() + .key(Key.of(1, APP_ID_2)) + .appId(APP_ID_2) + .selector(selector2) + .treatment(treatment2) + .one(hostId1) + .two(hostId2) + .build(); + + intents.add(intent1); + List appIntents1 = new ArrayList<>(); + appIntents1.add(intent1); + + intents.add(intent2); + List appIntents2 = new ArrayList<>(); + appIntents2.add(intent2); + + expect(mockIntentService.getIntentsByAppId(APP_ID)) + .andReturn(appIntents1) + .anyTimes(); + expect(mockIntentService.getIntentsByAppId(APP_ID_2)) + .andReturn(appIntents2) + .anyTimes(); + replay(mockIntentService); + + expect(mockCoreService.getAppId(APP_ID.name())) + .andReturn(APP_ID).anyTimes(); + expect(mockCoreService.getAppId(APP_ID_2.name())) + .andReturn(APP_ID_2).anyTimes(); + replay(mockCoreService); + + + final WebTarget wt = target(); + // Verify intents for app_id + final String response1 = wt.path("intents/application/" + APP_ID.name()).request().get(String.class); + assertThat(response1, containsString("{\"intents\":[")); + + final JsonObject result1 = Json.parse(response1).asObject(); + assertThat(result1, notNullValue()); + + assertThat(result1.names(), hasSize(1)); + assertThat(result1.names().get(0), is("intents")); + + final JsonArray jsonIntents1 = result1.get("intents").asArray(); + assertThat(jsonIntents1, notNullValue()); + assertThat(jsonIntents1.size(), is(1)); + + assertThat(jsonIntents1, hasIntent(intent1, false)); + assertThat(jsonIntents1, is(not(hasIntent(intent2, false)))); + + // Verify intents for app_id_2 with detail = false + final String response2 = wt.path("intents/application/" + APP_ID_2.name()) + .queryParam("detail", false).request().get(String.class); + assertThat(response2, containsString("{\"intents\":[")); + + final JsonObject result2 = Json.parse(response2).asObject(); + assertThat(result2, notNullValue()); + + assertThat(result2.names(), hasSize(1)); + assertThat(result2.names().get(0), is("intents")); + + final JsonArray jsonIntents2 = result2.get("intents").asArray(); + assertThat(jsonIntents2, notNullValue()); + assertThat(jsonIntents2.size(), is(1)); + + assertThat(jsonIntents2, hasIntent(intent2, false)); + assertThat(jsonIntents2, is(not(hasIntent(intent1, false)))); + } + + /** + * Tests the result of the rest api GET when intents are defined and the detail flag is true. + */ + @Test + public void testIntentsForApplicationWithDetail() { + final Intent intent1 = + PointToPointIntent.builder() + .key(Key.of(0, APP_ID)) + .appId(APP_ID) + .selector(selector1) + .treatment(treatment1) + .filteredIngressPoint(new FilteredConnectPoint(connectPoint1)) + .filteredEgressPoint(new FilteredConnectPoint(connectPoint2)) + .build(); + + final HostToHostIntent intent2 = + HostToHostIntent.builder() + .key(Key.of(1, APP_ID_2)) + .appId(APP_ID_2) + .selector(selector2) + .treatment(treatment2) + .one(hostId1) + .two(hostId2) + .build(); + + intents.add(intent1); + List appIntents1 = new ArrayList<>(); + appIntents1.add(intent1); + + intents.add(intent2); + List appIntents2 = new ArrayList<>(); + appIntents2.add(intent2); + + expect(mockIntentService.getIntentsByAppId(APP_ID)) + .andReturn(appIntents1) + .anyTimes(); + expect(mockIntentService.getIntentsByAppId(APP_ID_2)) + .andReturn(appIntents2) + .anyTimes(); + replay(mockIntentService); + + expect(mockCoreService.getAppId(APP_ID.name())) + .andReturn(APP_ID).anyTimes(); + expect(mockCoreService.getAppId(APP_ID_2.name())) + .andReturn(APP_ID_2).anyTimes(); + replay(mockCoreService); + + + final WebTarget wt = target(); + // Verify intents for app_id + final String response1 = wt.path("intents/application/" + APP_ID.name()) + .queryParam("detail", true).request().get(String.class); + assertThat(response1, containsString("{\"intents\":[")); + + final JsonObject result1 = Json.parse(response1).asObject(); + assertThat(result1, notNullValue()); + + assertThat(result1.names(), hasSize(1)); + assertThat(result1.names().get(0), is("intents")); + + final JsonArray jsonIntents1 = result1.get("intents").asArray(); + assertThat(jsonIntents1, notNullValue()); + assertThat(jsonIntents1.size(), is(1)); + + assertThat(jsonIntents1, hasIntent(intent1, true)); + assertThat(jsonIntents1, is(not(hasIntent(intent2, true)))); + + // Verify intents for app_id_2 + final String response2 = wt.path("intents/application/" + APP_ID_2.name()) + .queryParam("detail", true).request().get(String.class); + assertThat(response2, containsString("{\"intents\":[")); + + final JsonObject result2 = Json.parse(response2).asObject(); + assertThat(result2, notNullValue()); + + assertThat(result2.names(), hasSize(1)); + assertThat(result2.names().get(0), is("intents")); + + final JsonArray jsonIntents2 = result2.get("intents").asArray(); + assertThat(jsonIntents2, notNullValue()); + assertThat(jsonIntents2.size(), is(1)); + + assertThat(jsonIntents2, hasIntent(intent2, true)); + assertThat(jsonIntents2, is(not(hasIntent(intent1, true)))); } /** @@ -975,13 +1394,13 @@ public void testIntentInstallables() { final String response = wt.path("intents/installables/" + APP_ID.name() + "/" + intentId).request().get(String.class); final JsonObject result = Json.parse(response).asObject(); - assertThat(result.get(INSTALLABLES).asArray(), hasIntent(flowRuleIntent)); + assertThat(result.get(INSTALLABLES).asArray(), hasIntent(flowRuleIntent, false)); // Test get using numeric value final String responseNumeric = wt.path("intents/installables/" + APP_ID.name() + "/" + Long.toHexString(intentId)).request().get(String.class); final JsonObject resultNumeric = Json.parse(responseNumeric).asObject(); - assertThat(resultNumeric.get(INSTALLABLES).asArray(), hasIntent(flowRuleIntent)); + assertThat(resultNumeric.get(INSTALLABLES).asArray(), hasIntent(flowRuleIntent, false)); } /** From fa5dc3c137a4deaa020a669388470b511c2b6a8e Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 5 Nov 2021 15:37:32 +0100 Subject: [PATCH 159/235] [SDFAB-753] Improve ONOS cluster event Main idea of this change is to add an additional parameter in the event that carries information about the failed instance. Additionally, prevents several NPE by using hostname as id when controller hostname cannot be resolved into an ip. Change-Id: Id9886afe3f1e5ecee0f1414b2722c340680a813e --- .../org/onosproject/cli/NodesListCommand.java | 4 +- .../cli/StorageNodesListCommand.java | 4 +- .../org/onosproject/cluster/ClusterEvent.java | 61 +++++++++++++++- .../onosproject/cluster/ClusterEventTest.java | 72 +++++++++++++++++++ .../codec/impl/ControllerNodeCodec.java | 3 +- .../cluster/impl/AtomixClusterStore.java | 38 +++++++--- .../ui/impl/ClusterViewMessageHandler.java | 25 ++++--- .../impl/TopologyViewMessageHandlerBase.java | 5 +- .../org/onosproject/ui/impl/UiWebSocket.java | 4 +- .../ui/impl/topo/Topo2Jsonifier.java | 30 ++++---- 10 files changed, 205 insertions(+), 41 deletions(-) diff --git a/cli/src/main/java/org/onosproject/cli/NodesListCommand.java b/cli/src/main/java/org/onosproject/cli/NodesListCommand.java index ac6a5ec19d9..da769504507 100644 --- a/cli/src/main/java/org/onosproject/cli/NodesListCommand.java +++ b/cli/src/main/java/org/onosproject/cli/NodesListCommand.java @@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.onlab.packet.IpAddress; import org.onosproject.cluster.ClusterAdminService; import org.onosproject.cluster.ControllerNode; import org.onosproject.core.Version; @@ -70,9 +71,10 @@ private JsonNode json(ClusterAdminService service, List nodes) { for (ControllerNode node : nodes) { ControllerNode.State nodeState = service.getState(node.id()); Version nodeVersion = service.getVersion(node.id()); + IpAddress nodeIp = node.ip(); ObjectNode newNode = mapper.createObjectNode() .put("id", node.id().toString()) - .put("ip", node.ip().toString()) + .put("ip", nodeIp != null ? nodeIp.toString() : node.host()) .put("tcpPort", node.tcpPort()) .put("self", node.equals(self)); if (nodeState != null) { diff --git a/cli/src/main/java/org/onosproject/cli/StorageNodesListCommand.java b/cli/src/main/java/org/onosproject/cli/StorageNodesListCommand.java index 7cbf61930e2..4687139b472 100644 --- a/cli/src/main/java/org/onosproject/cli/StorageNodesListCommand.java +++ b/cli/src/main/java/org/onosproject/cli/StorageNodesListCommand.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.onlab.packet.IpAddress; import org.onosproject.cluster.ClusterAdminService; import org.onosproject.cluster.Node; @@ -58,9 +59,10 @@ private JsonNode json(List nodes) { ObjectMapper mapper = new ObjectMapper(); ArrayNode result = mapper.createArrayNode(); for (Node node : nodes) { + IpAddress nodeIp = node.ip(); ObjectNode newNode = mapper.createObjectNode() .put("id", node.id().toString()) - .put("ip", node.ip().toString()) + .put("ip", nodeIp != null ? nodeIp.toString() : node.host()) .put("host", node.host()) .put("tcpPort", node.tcpPort()); result.add(newNode); diff --git a/core/api/src/main/java/org/onosproject/cluster/ClusterEvent.java b/core/api/src/main/java/org/onosproject/cluster/ClusterEvent.java index 6d905b2a44d..d4ec6785b27 100644 --- a/core/api/src/main/java/org/onosproject/cluster/ClusterEvent.java +++ b/core/api/src/main/java/org/onosproject/cluster/ClusterEvent.java @@ -55,6 +55,25 @@ public enum Type { INSTANCE_DEACTIVATED } + public enum InstanceType { + /** + * Signifies that the event refers to an ONOS instance. + */ + ONOS, + + /** + * Signifies that the event refers to an Atomix instance. + */ + STORAGE, + + /** + * Signifies that the event refers to an Unknown instance. + */ + UNKNOWN + } + + private final InstanceType instanceType; + /** * Creates an event of a given type and for the specified instance and the * current time. @@ -63,7 +82,7 @@ public enum Type { * @param instance cluster device subject */ public ClusterEvent(Type type, ControllerNode instance) { - super(type, instance); + this(type, instance, InstanceType.UNKNOWN); } /** @@ -74,13 +93,47 @@ public ClusterEvent(Type type, ControllerNode instance) { * @param time occurrence time */ public ClusterEvent(Type type, ControllerNode instance, long time) { + this(type, instance, time, InstanceType.UNKNOWN); + } + + /** + * Creates an event of a given type and for the specified instance and the + * current time. + * + * @param type cluster event type + * @param instance cluster device subject + * @param instanceType instance type + */ + public ClusterEvent(Type type, ControllerNode instance, InstanceType instanceType) { + super(type, instance); + this.instanceType = instanceType; + } + + /** + * Creates an event of a given type and for the specified device and time. + * + * @param type device event type + * @param instance event device subject + * @param time occurrence time + * @param instanceType instance type + */ + public ClusterEvent(Type type, ControllerNode instance, long time, InstanceType instanceType) { super(type, instance, time); + this.instanceType = instanceType; } + /** + * Returns the instance type subject. + * + * @return instance type subject or UNKNOWN if the event is not instance type specific. + */ + public InstanceType instanceType() { + return instanceType; + } @Override public int hashCode() { - return Objects.hash(type(), subject(), time()); + return Objects.hash(type(), subject(), time(), instanceType()); } @Override @@ -92,7 +145,8 @@ public boolean equals(Object obj) { final ClusterEvent other = (ClusterEvent) obj; return Objects.equals(this.type(), other.type()) && Objects.equals(this.subject(), other.subject()) && - Objects.equals(this.time(), other.time()); + Objects.equals(this.time(), other.time()) && + Objects.equals(this.instanceType(), other.instanceType()); } return false; } @@ -103,6 +157,7 @@ public String toString() { .add("type", type()) .add("subject", subject()) .add("time", time()) + .add("instanceType", instanceType()) .toString(); } diff --git a/core/api/src/test/java/org/onosproject/cluster/ClusterEventTest.java b/core/api/src/test/java/org/onosproject/cluster/ClusterEventTest.java index 8995062a840..f5e1f1ee3eb 100644 --- a/core/api/src/test/java/org/onosproject/cluster/ClusterEventTest.java +++ b/core/api/src/test/java/org/onosproject/cluster/ClusterEventTest.java @@ -49,6 +49,26 @@ public class ClusterEventTest { new ClusterEvent(ClusterEvent.Type.INSTANCE_READY, cNode2, time); private final ClusterEvent sameAsEvent7 = new ClusterEvent(ClusterEvent.Type.INSTANCE_READY, cNode2, time); + private final ClusterEvent event8 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_ADDED, cNode2, ClusterEvent.InstanceType.ONOS); + private final ClusterEvent event9 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_ADDED, cNode2, ClusterEvent.InstanceType.STORAGE); + private final ClusterEvent event10 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_REMOVED, cNode2, ClusterEvent.InstanceType.ONOS); + private final ClusterEvent event11 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_REMOVED, cNode2, ClusterEvent.InstanceType.STORAGE); + private final ClusterEvent event12 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_ACTIVATED, cNode1, ClusterEvent.InstanceType.ONOS); + private final ClusterEvent event13 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_ACTIVATED, cNode1, ClusterEvent.InstanceType.STORAGE); + private final ClusterEvent event14 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_READY, cNode1, ClusterEvent.InstanceType.ONOS); + private final ClusterEvent event15 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_READY, cNode1, ClusterEvent.InstanceType.STORAGE); + private final ClusterEvent event16 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_DEACTIVATED, cNode1, ClusterEvent.InstanceType.ONOS); + private final ClusterEvent event17 = + new ClusterEvent(ClusterEvent.Type.INSTANCE_DEACTIVATED, cNode1, ClusterEvent.InstanceType.STORAGE); /** * Tests for proper operation of equals(), hashCode() and toString() methods. @@ -63,6 +83,16 @@ public void checkEquals() { .addEqualityGroup(event5) .addEqualityGroup(event6) .addEqualityGroup(event7, sameAsEvent7) + .addEqualityGroup(event8) + .addEqualityGroup(event9) + .addEqualityGroup(event10) + .addEqualityGroup(event11) + .addEqualityGroup(event12) + .addEqualityGroup(event13) + .addEqualityGroup(event14) + .addEqualityGroup(event15) + .addEqualityGroup(event16) + .addEqualityGroup(event17) .testEquals(); } @@ -73,10 +103,52 @@ public void checkEquals() { public void checkConstruction() { assertThat(event1.type(), is(ClusterEvent.Type.INSTANCE_ADDED)); assertThat(event1.subject(), is(cNode1)); + assertThat(event1.instanceType(), is(ClusterEvent.InstanceType.UNKNOWN)); assertThat(event7.time(), is(time)); assertThat(event7.type(), is(ClusterEvent.Type.INSTANCE_READY)); assertThat(event7.subject(), is(cNode2)); + assertThat(event7.instanceType(), is(ClusterEvent.InstanceType.UNKNOWN)); + + assertThat(event8.type(), is(ClusterEvent.Type.INSTANCE_ADDED)); + assertThat(event8.subject(), is(cNode2)); + assertThat(event8.instanceType(), is(ClusterEvent.InstanceType.ONOS)); + + assertThat(event9.type(), is(ClusterEvent.Type.INSTANCE_ADDED)); + assertThat(event9.subject(), is(cNode2)); + assertThat(event9.instanceType(), is(ClusterEvent.InstanceType.STORAGE)); + + assertThat(event10.type(), is(ClusterEvent.Type.INSTANCE_REMOVED)); + assertThat(event10.subject(), is(cNode2)); + assertThat(event10.instanceType(), is(ClusterEvent.InstanceType.ONOS)); + + assertThat(event11.type(), is(ClusterEvent.Type.INSTANCE_REMOVED)); + assertThat(event11.subject(), is(cNode2)); + assertThat(event11.instanceType(), is(ClusterEvent.InstanceType.STORAGE)); + + assertThat(event12.type(), is(ClusterEvent.Type.INSTANCE_ACTIVATED)); + assertThat(event12.subject(), is(cNode1)); + assertThat(event12.instanceType(), is(ClusterEvent.InstanceType.ONOS)); + + assertThat(event13.type(), is(ClusterEvent.Type.INSTANCE_ACTIVATED)); + assertThat(event13.subject(), is(cNode1)); + assertThat(event13.instanceType(), is(ClusterEvent.InstanceType.STORAGE)); + + assertThat(event14.type(), is(ClusterEvent.Type.INSTANCE_READY)); + assertThat(event14.subject(), is(cNode1)); + assertThat(event14.instanceType(), is(ClusterEvent.InstanceType.ONOS)); + + assertThat(event15.type(), is(ClusterEvent.Type.INSTANCE_READY)); + assertThat(event15.subject(), is(cNode1)); + assertThat(event15.instanceType(), is(ClusterEvent.InstanceType.STORAGE)); + + assertThat(event16.type(), is(ClusterEvent.Type.INSTANCE_DEACTIVATED)); + assertThat(event16.subject(), is(cNode1)); + assertThat(event16.instanceType(), is(ClusterEvent.InstanceType.ONOS)); + + assertThat(event17.type(), is(ClusterEvent.Type.INSTANCE_DEACTIVATED)); + assertThat(event17.subject(), is(cNode1)); + assertThat(event17.instanceType(), is(ClusterEvent.InstanceType.STORAGE)); } } diff --git a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java index 07d8e454528..e59de95eefb 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java @@ -36,9 +36,10 @@ public final class ControllerNodeCodec extends JsonCodec { public ObjectNode encode(ControllerNode node, CodecContext context) { checkNotNull(node, "Controller node cannot be null"); ClusterService service = context.getService(ClusterService.class); + IpAddress nodeIp = node.ip(); return context.mapper().createObjectNode() .put("id", node.id().toString()) - .put("ip", node.ip().toString()) + .put("ip", nodeIp != null ? nodeIp.toString() : node.host()) .put("tcpPort", node.tcpPort()) .put("status", service.getState(node.id()).toString()) .put("lastUpdate", Long.toString(service.getLastUpdatedInstant(node.id()).toEpochMilli())) diff --git a/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java b/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java index ca828916051..f53174680ee 100644 --- a/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java +++ b/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java @@ -47,6 +47,7 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Strings.isNullOrEmpty; /** * Atomix cluster store. @@ -57,6 +58,8 @@ public class AtomixClusterStore extends AbstractStore getStorageNodes() { return membershipService.getMembers() .stream() - .filter(member -> !Objects.equals(member.properties().getProperty("type"), "onos")) + .filter(member -> !Objects.equals(member.properties().getProperty(TYPE_KEY), TYPE_ONOS)) .map(this::toControllerNode) .collect(Collectors.toSet()); } @@ -179,7 +183,7 @@ public Set getStorageNodes() { public Set getNodes() { return membershipService.getMembers() .stream() - .filter(member -> Objects.equals(member.properties().getProperty("type"), "onos")) + .filter(member -> Objects.equals(member.properties().getProperty(TYPE_KEY), TYPE_ONOS)) .map(this::toControllerNode) .collect(Collectors.toSet()); } @@ -221,8 +225,9 @@ public ControllerNode addNode(NodeId nodeId, IpAddress ip, int tcpPort) { nodes.put(node.id(), node); ControllerNode.State state = node.equals(localNode) ? ControllerNode.State.ACTIVE : ControllerNode.State.INACTIVE; - membershipService.getMember(node.id().id()).properties().setProperty(STATE_KEY, state.name()); - notifyDelegate(new ClusterEvent(ClusterEvent.Type.INSTANCE_ADDED, node)); + Member member = membershipService.getMember(node.id().id()); + member.properties().setProperty(STATE_KEY, state.name()); + notifyDelegate(clusterEvent(ClusterEvent.Type.INSTANCE_ADDED, member, node)); return node; } @@ -232,7 +237,20 @@ public void removeNode(NodeId nodeId) { ControllerNode node = nodes.remove(nodeId); if (node != null) { states.remove(nodeId); - notifyDelegate(new ClusterEvent(ClusterEvent.Type.INSTANCE_REMOVED, node)); + notifyDelegate(clusterEvent(ClusterEvent.Type.INSTANCE_REMOVED, + membershipService.getMember(node.id().id()), node)); } } + + private ClusterEvent clusterEvent(ClusterEvent.Type type, Member member, ControllerNode node) { + // Atomix nodes do not set the property TYPE. Nowadays, the internal else is not used. + if (member != null && !isNullOrEmpty(member.properties().getProperty(TYPE_KEY))) { + if (Objects.equals(member.properties().getProperty(TYPE_KEY), TYPE_ONOS)) { + return new ClusterEvent(type, node, ClusterEvent.InstanceType.ONOS); + } else { + return new ClusterEvent(type, node, ClusterEvent.InstanceType.STORAGE); + } + } + return new ClusterEvent(type, node, ClusterEvent.InstanceType.STORAGE); + } } diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java index 980d7f69398..7243818bbe5 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.collect.ImmutableSet; +import org.onlab.packet.IpAddress; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.ControllerNode; import org.onosproject.cluster.NodeId; @@ -170,27 +171,31 @@ private ObjectNode deviceData(Device d) { @Override public void process(ObjectNode payload) { + ObjectNode rootNode = objectNode(); + ObjectNode data = objectNode(); + ArrayNode devices = arrayNode(); String id = string(payload, ID); ClusterService cs = get(ClusterService.class); ControllerNode node = cs.getNode(new NodeId(id)); + if (node != null) { + IpAddress nodeIp = node.ip(); + List deviceList = populateDevices(node); - ObjectNode data = objectNode(); - ArrayNode devices = arrayNode(); - List deviceList = populateDevices(node); + data.put(ID, node.id().toString()); + data.put(IP, nodeIp != null ? nodeIp.toString() : node.host()); - data.put(ID, node.id().toString()); - data.put(IP, node.ip().toString()); + for (Device d : deviceList) { + devices.add(deviceData(d)); + } - for (Device d : deviceList) { - devices.add(deviceData(d)); + } else { + data.put(ID, "NONE"); + data.put(IP, "NONE"); } - data.set(DEVICES, devices); //TODO put more detail info to data - - ObjectNode rootNode = objectNode(); rootNode.set(DETAILS, data); sendMessage(CLUSTER_DETAILS_RESP, rootNode); } diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java index 3bd49856a97..79a335ff49d 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java @@ -261,10 +261,11 @@ private ObjectNode message(String severity, String message) { // Produces a cluster instance message to the client. protected ObjectNode instanceMessage(ClusterEvent event, String msgType) { ControllerNode node = event.subject(); + IpAddress nodeIp = node.ip(); int switchCount = services.mastership().getDevicesOf(node.id()).size(); ObjectNode payload = objectNode() .put("id", node.id().toString()) - .put("ip", node.ip().toString()) + .put("ip", nodeIp != null ? nodeIp.toString() : node.host()) .put("online", services.cluster().getState(node.id()).isActive()) .put("ready", services.cluster().getState(node.id()).isReady()) .put("uiAttached", node.equals(services.cluster().getLocalNode())) @@ -272,7 +273,7 @@ protected ObjectNode instanceMessage(ClusterEvent event, String msgType) { ArrayNode labels = arrayNode(); labels.add(node.id().toString()); - labels.add(node.ip().toString()); + labels.add(nodeIp != null ? nodeIp.toString() : node.host()); // Add labels, props and stuff the payload into envelope. payload.set("labels", labels); diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java index 2e7e643ead6..0ed48ad6389 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java @@ -22,6 +22,7 @@ import org.eclipse.jetty.websocket.api.WebSocketAdapter; import org.onlab.osgi.ServiceDirectory; import org.onlab.osgi.ServiceNotFoundException; +import org.onlab.packet.IpAddress; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.ControllerNode; import org.onosproject.ui.GlyphConstants; @@ -438,9 +439,10 @@ private void sendBootstrapData() { ArrayNode instances = arrayNode(); for (ControllerNode node : service.getNodes()) { + IpAddress nodeIp = node.ip(); ObjectNode instance = objectNode() .put(ID, node.id().toString()) - .put(IP, node.ip().toString()) + .put(IP, nodeIp != null ? nodeIp.toString() : node.host()) .put(GlyphConstants.UI_ATTACHED, node.equals(service.getLocalNode())); instances.add(instance); diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java index 0ef6fafb65a..8ae6e6d7e5e 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java @@ -201,13 +201,7 @@ ObjectNode instances(List instances) { private ObjectNode json(UiClusterMember member, boolean isUiAttached) { int switchCount = mastershipService.getDevicesOf(member.id()).size(); - ControllerNode.State state = clusterService.getState(member.id()); - return objectNode() - .put("id", member.id().toString()) - .put("ip", member.ip().toString()) - .put("online", state.isActive()) - .put("ready", state.isReady()) - .put("uiAttached", isUiAttached) + return jsonCommon(member).put("uiAttached", isUiAttached) .put("switches", switchCount); } @@ -637,14 +631,26 @@ private ObjectNode json(UiLink link) { } private ObjectNode json(UiClusterMember member) { + return jsonCommon(member).put(GlyphConstants.UI_ATTACHED, + clusterService.getLocalNode().equals(member.backingNode())); + } + + private ObjectNode jsonCommon(UiClusterMember member) { ControllerNode.State state = clusterService.getState(member.id()); + ControllerNode node = member.backingNode(); + if (node != null) { + IpAddress nodeIp = member.backingNode().ip(); + return objectNode() + .put("id", member.idAsString()) + .put("ip", nodeIp != null ? nodeIp.toString() : node.host()) + .put("online", state.isActive()) + .put("ready", state.isReady()); + } return objectNode() .put("id", member.idAsString()) - .put("ip", member.ip().toString()) - .put("online", state.isActive()) - .put("ready", state.isReady()) - .put(GlyphConstants.UI_ATTACHED, - member.backingNode().equals(clusterService.getLocalNode())); + .put("ip", "NONE") + .put("online", false) + .put("ready", false); } private ObjectNode jsonClosedRegion(String ridStr, UiRegion region) { From 75ac28406acc3adf639385694ebb458d52ad8c88 Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 9 Nov 2021 20:06:01 +0100 Subject: [PATCH 160/235] [SDFAB-753] Optimize several ONOS components Leverage the improved ClusterEvent to optimize several ONOS components. The idea behind is that there is no need to react for these components when an Atomix goes down. Actually, reacting will put additional pressure in the Atomix nodes for no reason. Moreover, any operation done in this period can potentially timeout Change-Id: I5edeb3c1189e4255cdb1efb712da33d397da27bf --- .../routeservice/impl/RouteMonitor.java | 5 ++++ .../onosproject/routing/fpm/FpmManager.java | 5 ++++ .../ui/impl/TopologyViewMessageHandler.java | 6 +++- .../topo/model/UiSharedTopologyModel.java | 28 ++++++++++--------- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteMonitor.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteMonitor.java index 5ae26289c34..1ee7daa4a0f 100644 --- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteMonitor.java +++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteMonitor.java @@ -152,6 +152,11 @@ private class InternalClusterListener implements ClusterEventListener { @Override public void event(ClusterEvent event) { eventExecutor.execute(() -> { + if (event.instanceType() == ClusterEvent.InstanceType.STORAGE) { + log.debug("Skipping cluster event for {}", event.subject().id().id()); + return; + } + switch (event.type()) { case INSTANCE_DEACTIVATED: NodeId id = event.subject().id(); diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java index 6b6df43e1e2..41f31032841 100644 --- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java +++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java @@ -830,6 +830,11 @@ private class InternalClusterListener implements ClusterEventListener { @Override public void event(ClusterEvent event) { clusterEventExecutor.execute(() -> { + if (event.instanceType() == ClusterEvent.InstanceType.STORAGE) { + log.debug("Skipping cluster event for {}", event.subject().id().id()); + return; + } + log.info("Receives ClusterEvent {} for {}", event.type(), event.subject().id()); switch (event.type()) { case INSTANCE_READY: diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java index 776ea58f5cf..c8680ba018b 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java @@ -922,7 +922,11 @@ private synchronized void removeListeners() { private class InternalClusterListener implements ClusterEventListener { @Override public void event(ClusterEvent event) { - msgSender.execute(() -> sendMessage(instanceMessage(event, null))); + msgSender.execute(() -> { + if (event.instanceType() == ClusterEvent.InstanceType.ONOS) { + sendMessage(instanceMessage(event, null)); + } + }); } } diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java index 6f8a7061454..474bb4b85da 100644 --- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java +++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java @@ -380,23 +380,25 @@ public void event(ClusterEvent event) { } private void handleEvent(ClusterEvent event) { - ControllerNode cnode = event.subject(); + if (event.instanceType() == ClusterEvent.InstanceType.ONOS) { + ControllerNode cnode = event.subject(); - switch (event.type()) { + switch (event.type()) { - case INSTANCE_ADDED: - case INSTANCE_ACTIVATED: - case INSTANCE_READY: - case INSTANCE_DEACTIVATED: - cache.addOrUpdateClusterMember(cnode); - break; + case INSTANCE_ADDED: + case INSTANCE_ACTIVATED: + case INSTANCE_READY: + case INSTANCE_DEACTIVATED: + cache.addOrUpdateClusterMember(cnode); + break; - case INSTANCE_REMOVED: - cache.removeClusterMember(cnode); - break; + case INSTANCE_REMOVED: + cache.removeClusterMember(cnode); + break; - default: - break; + default: + break; + } } } } From ce9942049825c51c0a0818ad4b89395321aa82b3 Mon Sep 17 00:00:00 2001 From: Emanuele Gallone Date: Sun, 14 Nov 2021 22:39:35 +0100 Subject: [PATCH 161/235] Add architecture method to PiPipelineModel Interface. The field `pkg_info:arch` is now parsed, when parsing a P4Info file. Change-Id: Ia1b24b929fe4ed8ac2a2becfa0ce7678642e9037 --- .../net/pi/model/PiPipelineModel.java | 7 +++ .../behaviour/upf/MockPiPipelineModel.java | 5 ++ .../p4runtime/model/P4InfoParser.java | 9 +++ .../p4runtime/model/P4PipelineModel.java | 9 +++ .../p4runtime/model/P4InfoParserTest.java | 62 +++++++++++++------ .../p4runtime/model/P4PipelineModelTest.java | 16 +++-- 6 files changed, 83 insertions(+), 25 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineModel.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineModel.java index bddbae8fad4..2efa40fd6b9 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineModel.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineModel.java @@ -27,6 +27,13 @@ @Beta public interface PiPipelineModel { + /** + * Returns the data plane target architecture supported by this pipeline model. + * + * @return optional architecture string. + */ + Optional architecture(); + /** * Returns the table model associated with the given ID, if present. * diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java index db438b50bfa..2560346d79b 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java @@ -48,6 +48,11 @@ public MockPiPipelineModel(Collection tables, Collection architecture() { + return Optional.empty(); + } + @Override public Optional table(PiTableId tableId) { return Optional.ofNullable(tableMap.getOrDefault(tableId, null)); diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java index 0bb03604bc9..85deacc29b9 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java @@ -155,6 +155,8 @@ public static PiPipelineModel parse(URL p4InfoUrl) throws P4InfoParserException // Start by parsing and mapping instances to to their integer P4Info IDs. // Convenient to build the table model at the end. + final String architecture = parseArchitecture(p4info); + // Counters. final Map counterMap = Maps.newHashMap(); counterMap.putAll(parseCounters(p4info)); @@ -263,9 +265,16 @@ public static PiPipelineModel parse(URL p4InfoUrl) throws P4InfoParserException registerImmMap, actProfileImmMap, ImmutableMap.copyOf(pktOpMap), + architecture, fingerprint); } + private static String parseArchitecture(P4Info p4info) { + if (p4info.hasPkgInfo()) { + return p4info.getPkgInfo().getArch(); + } + return null; + } private static Map parseCounters(P4Info p4info) throws P4InfoParserException { diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java index 28e5372df2e..46889a6ccf0 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PipelineModel.java @@ -48,6 +48,7 @@ final class P4PipelineModel implements PiPipelineModel { private final ImmutableMap registers; private final ImmutableMap actionProfiles; private final ImmutableMap packetOperations; + private final String architecture; private final int fingerprint; P4PipelineModel( @@ -57,6 +58,7 @@ final class P4PipelineModel implements PiPipelineModel { ImmutableMap registers, ImmutableMap actionProfiles, ImmutableMap packetOperations, + String architecture, int fingerprint) { this.tables = tables; this.counters = counters; @@ -65,6 +67,12 @@ final class P4PipelineModel implements PiPipelineModel { this.actionProfiles = actionProfiles; this.packetOperations = packetOperations; this.fingerprint = fingerprint; + this.architecture = architecture; + } + + @Override + public Optional architecture() { + return Optional.ofNullable(this.architecture); } @Override @@ -160,6 +168,7 @@ public String toString() { .add("actionProfiles", actionProfiles.values()) .add("packetOperations", packetOperations.values()) .add("fingerprint", fingerprint) + .add("architecture", architecture) .toString(); } } diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java index 558acb144e3..22d3e110f6a 100644 --- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java +++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java @@ -59,6 +59,7 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.core.IsNull.notNullValue; +import static org.hamcrest.core.IsNull.nullValue; /** * Test for P4Info Parser. @@ -74,26 +75,49 @@ public class P4InfoParserTest { private static final Long DEFAULT_MAX_ACTION_PROFILE_SIZE = 64L; private static final int DEFAULT_MAX_GROUP_SIZE = 16; + /** + * Tests the parsing of the architecture field. + * @throws Exception if the equality group objects does not match expected + */ + @Test + public void testParseArchitecture() throws Exception { + // Generate two PiPipelineModels from the same p4Info file + PiPipelineModel model = P4InfoParser.parse(p4InfoUrl); + PiPipelineModel sameAsModel = P4InfoParser.parse(p4InfoUrl); + + PiPipelineModel model3 = P4InfoParser.parse(p4InfoUrl2); + + String architecture1 = model.architecture().orElse(null); + String architecture2 = sameAsModel.architecture().orElse(null); + + assertThat("null value is returned if `arch` not present in P4Info", + architecture1, + is(nullValue())); + assertThat("null value is returned if `arch` not present in P4Info", + architecture2, + is(nullValue())); + + String architecture3 = model3.architecture().orElse(null); + assertThat("test that `arch` field is correctly parsed", + architecture3, + is("v1model")); + } + /** * Tests parse method. * @throws Exception if equality group objects dose not match as expected */ @Test public void testParse() throws Exception { - // Generate two PiPipelineModels from p4Info file + // Generate two PiPipelineModels from the same p4Info file PiPipelineModel model = P4InfoParser.parse(p4InfoUrl); - PiPipelineModel model2 = P4InfoParser.parse(p4InfoUrl); + PiPipelineModel sameAsModel = P4InfoParser.parse(p4InfoUrl); // Check equality - new EqualsTester().addEqualityGroup(model, model2).testEquals(); + new EqualsTester().addEqualityGroup(model, sameAsModel).testEquals(); // Generate a P4Info object from the file - final P4Info p4info; - try { - p4info = getP4InfoMessage(p4InfoUrl); - } catch (IOException e) { - throw new P4InfoParserException("Unable to parse protobuf " + p4InfoUrl.toString(), e); - } + final P4Info p4info = getP4InfoMessage(p4InfoUrl); List tableMsgs = p4info.getTablesList(); PiTableId table0Id = PiTableId.of(tableMsgs.get(0).getPreamble().getName()); @@ -102,8 +126,8 @@ public void testParse() throws Exception { //parse tables PiTableModel table0Model = model.table(table0Id).orElse(null); PiTableModel wcmpTableModel = model.table(wcmpTableId).orElse(null); - PiTableModel table0Model2 = model2.table(table0Id).orElse(null); - PiTableModel wcmpTableModel2 = model2.table(wcmpTableId).orElse(null); + PiTableModel table0Model2 = sameAsModel.table(table0Id).orElse(null); + PiTableModel wcmpTableModel2 = sameAsModel.table(wcmpTableId).orElse(null); new EqualsTester().addEqualityGroup(table0Model, table0Model2) .addEqualityGroup(wcmpTableModel, wcmpTableModel2).testEquals(); @@ -211,7 +235,7 @@ public void testParse() throws Exception { true, DEFAULT_MAX_ACTION_PROFILE_SIZE, DEFAULT_MAX_GROUP_SIZE); PiActionProfileModel wcmpSelector = model.actionProfiles(actionProfileId).orElse(null); - PiActionProfileModel wcmpSelector2 = model2.actionProfiles(actionProfileId).orElse(null); + PiActionProfileModel wcmpSelector2 = sameAsModel.actionProfiles(actionProfileId).orElse(null); new EqualsTester().addEqualityGroup(wcmpSelector, wcmpSelector2, wcmpSelector3).testEquals(); @@ -232,13 +256,13 @@ public void testParse() throws Exception { model.counter(PiCounterId.of("wcmp_control.wcmp_table_counter")).orElse(null); PiCounterModel ingressPortCounterModel2 = - model2.counter(PiCounterId.of("port_counters_ingress.ingress_port_counter")).orElse(null); + sameAsModel.counter(PiCounterId.of("port_counters_ingress.ingress_port_counter")).orElse(null); PiCounterModel egressPortCounterModel2 = - model2.counter(PiCounterId.of("port_counters_egress.egress_port_counter")).orElse(null); + sameAsModel.counter(PiCounterId.of("port_counters_egress.egress_port_counter")).orElse(null); PiCounterModel table0CounterModel2 = - model2.counter(PiCounterId.of("table0_control.table0_counter")).orElse(null); + sameAsModel.counter(PiCounterId.of("table0_control.table0_counter")).orElse(null); PiCounterModel wcmpTableCounterModel2 = - model2.counter(PiCounterId.of("wcmp_control.wcmp_table_counter")).orElse(null); + sameAsModel.counter(PiCounterId.of("wcmp_control.wcmp_table_counter")).orElse(null); new EqualsTester() .addEqualityGroup(ingressPortCounterModel, ingressPortCounterModel2) @@ -254,7 +278,7 @@ public void testParse() throws Exception { //Parse meters Collection meterModel = model.meters(); - Collection meterModel2 = model2.meters(); + Collection meterModel2 = sameAsModel.meters(); assertThat("model pased meter collaction should be empty", meterModel.isEmpty(), is(true)); assertThat("model pased meter collaction should be empty", meterModel2.isEmpty(), is(true)); @@ -266,9 +290,9 @@ public void testParse() throws Exception { model.packetOperationModel(PiPacketOperationType.PACKET_OUT).orElse(null); PiPacketOperationModel packetInOperationalModel2 = - model2.packetOperationModel(PiPacketOperationType.PACKET_IN).orElse(null); + sameAsModel.packetOperationModel(PiPacketOperationType.PACKET_IN).orElse(null); PiPacketOperationModel packetOutOperationalModel2 = - model2.packetOperationModel(PiPacketOperationType.PACKET_OUT).orElse(null); + sameAsModel.packetOperationModel(PiPacketOperationType.PACKET_OUT).orElse(null); new EqualsTester() .addEqualityGroup(packetInOperationalModel, packetInOperationalModel2) diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java index fdc3d2ea80b..8aa222d2ccd 100644 --- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java +++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java @@ -27,8 +27,6 @@ import org.onosproject.net.pi.model.PiActionParamModel; import org.onosproject.net.pi.model.PiActionProfileId; import org.onosproject.net.pi.model.PiActionProfileModel; -import org.onosproject.net.pi.model.PiPacketMetadataId; -import org.onosproject.net.pi.model.PiPacketMetadataModel; import org.onosproject.net.pi.model.PiCounterId; import org.onosproject.net.pi.model.PiCounterModel; import org.onosproject.net.pi.model.PiCounterType; @@ -38,6 +36,8 @@ import org.onosproject.net.pi.model.PiMeterId; import org.onosproject.net.pi.model.PiMeterModel; import org.onosproject.net.pi.model.PiMeterType; +import org.onosproject.net.pi.model.PiPacketMetadataId; +import org.onosproject.net.pi.model.PiPacketMetadataModel; import org.onosproject.net.pi.model.PiPacketOperationModel; import org.onosproject.net.pi.model.PiPacketOperationType; import org.onosproject.net.pi.model.PiPipelineModel; @@ -355,18 +355,22 @@ public class P4PipelineModelTest { private static final int FINGER_PRINT_1 = 0; private static final int FINGER_PRINT_2 = 1; + private static final String ARCHITECTURE_ID_1 = "tna"; + private static final String ARCHITECTURE_ID_2 = "v1model"; + + private static final PiPipelineModel P4_PIPELINE_MODEL_1 = new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1, - FINGER_PRINT_1); + ARCHITECTURE_ID_1, FINGER_PRINT_1); private static final PiPipelineModel SAME_AS_P4_PIPELINE_MODEL_1 = new P4PipelineModel(TABLES_1, COUNTERS_1, METERS_1, REGISTERS_1, ACTION_PROFILES_1, PACKET_OPERATIONS_1, - FINGER_PRINT_1); + ARCHITECTURE_ID_1, FINGER_PRINT_1); private static final PiPipelineModel P4_PIPELINE_MODEL_2 = new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_2, - FINGER_PRINT_2); + ARCHITECTURE_ID_2, FINGER_PRINT_2); private static final PiPipelineModel P4_PIPELINE_MODEL_3 = new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_3, - FINGER_PRINT_2); + ARCHITECTURE_ID_2, FINGER_PRINT_2); /** * Checks that the P4PipelineModel class is immutable. From a59138b623c9f9985f1d4a49638fe18ef23f2be7 Mon Sep 17 00:00:00 2001 From: David Glantz Date: Thu, 18 Nov 2021 13:41:14 -0600 Subject: [PATCH 162/235] Fix ClassCastException caused by sorting intents in gui when using both string and long keys. Change-Id: Ide180556761cfe3ca92d14e197d2e3dfc175563e --- .../java/org/onosproject/net/intent/Key.java | 18 +++-- .../org/onosproject/net/intent/KeyTest.java | 73 +++++++++++++++++++ 2 files changed, 86 insertions(+), 5 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/intent/Key.java b/core/api/src/main/java/org/onosproject/net/intent/Key.java index fadf8b92cc4..ef109f2cb8b 100644 --- a/core/api/src/main/java/org/onosproject/net/intent/Key.java +++ b/core/api/src/main/java/org/onosproject/net/intent/Key.java @@ -130,8 +130,12 @@ public boolean equals(Object obj) { @Override public int compareTo(Key o) { - StringKey sk = (StringKey) o; - return this.key.compareTo(sk.key); + if (o instanceof StringKey) { + StringKey sk = (StringKey) o; + return this.key.compareTo(sk.key); + } else { + return this.key.compareTo(o.toString()); + } } } @@ -176,9 +180,13 @@ public boolean equals(Object obj) { @Override public int compareTo(Key o) { - Long myKey = key; - Long otherKey = ((LongKey) o).key; - return myKey.compareTo(otherKey); + if (o instanceof LongKey) { + Long myKey = key; + Long otherKey = ((LongKey) o).key; + return myKey.compareTo(otherKey); + } else { + return this.toString().compareTo(o.toString()); + } } } } diff --git a/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java b/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java index b383afeddb8..1de9fbb59a2 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java +++ b/core/api/src/test/java/org/onosproject/net/intent/KeyTest.java @@ -21,7 +21,10 @@ import com.google.common.testing.EqualsTester; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.comparesEqualTo; +import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.lessThan; import static org.hamcrest.Matchers.notNullValue; import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass; import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; @@ -118,4 +121,74 @@ public void longKey() { .addEqualityGroup(longKey3) .testEquals(); } + + /** + * Tests compareTo for string based keys. + */ + @Test + public void stringKeyCompare() { + Key stringKey1 = Key.of(KEY_1, NetTestTools.APP_ID); + Key copyOfStringKey1 = Key.of(KEY_1, NetTestTools.APP_ID); + Key stringKey2 = Key.of(KEY_2, NetTestTools.APP_ID); + Key copyOfStringKey2 = Key.of(KEY_2, NetTestTools.APP_ID); + Key stringKey3 = Key.of(KEY_3, NetTestTools.APP_ID); + Key copyOfStringKey3 = Key.of(KEY_3, NetTestTools.APP_ID); + + assertThat(stringKey1, comparesEqualTo(copyOfStringKey1)); + assertThat(stringKey1, lessThan(stringKey2)); + assertThat(stringKey1, lessThan(stringKey3)); + + assertThat(stringKey2, greaterThan(stringKey1)); + assertThat(stringKey2, comparesEqualTo(copyOfStringKey2)); + assertThat(stringKey2, lessThan(stringKey3)); + + assertThat(stringKey3, greaterThan(stringKey1)); + assertThat(stringKey3, greaterThan(stringKey2)); + assertThat(stringKey3, comparesEqualTo(copyOfStringKey3)); + } + + /** + * Tests compareTo for long based keys. + */ + @Test + public void longKeyCompare() { + Key longKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID); + Key copyOfLongKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID); + Key longKey2 = Key.of(LONG_KEY_2, NetTestTools.APP_ID); + Key copyOfLongKey2 = Key.of(LONG_KEY_2, NetTestTools.APP_ID); + Key longKey3 = Key.of(LONG_KEY_3, NetTestTools.APP_ID); + Key copyOfLongKey3 = Key.of(LONG_KEY_3, NetTestTools.APP_ID); + + assertThat(longKey1, comparesEqualTo(copyOfLongKey1)); + assertThat(longKey1, lessThan(longKey2)); + assertThat(longKey1, lessThan(longKey3)); + + assertThat(longKey2, greaterThan(longKey1)); + assertThat(longKey2, comparesEqualTo(copyOfLongKey2)); + assertThat(longKey2, lessThan(longKey3)); + + assertThat(longKey3, greaterThan(longKey1)); + assertThat(longKey3, greaterThan(longKey2)); + assertThat(longKey3, comparesEqualTo(copyOfLongKey3)); + } + + /** + * Tests compareTo for string and long based keys. + */ + @Test + public void stringAndLongKeyCompare() { + Key stringKey0 = Key.of("0" + KEY_1, NetTestTools.APP_ID); + Key longKey1 = Key.of(LONG_KEY_1, NetTestTools.APP_ID); + Key stringKey2 = Key.of(KEY_2, NetTestTools.APP_ID); + + + assertThat(stringKey0, lessThan(longKey1)); + assertThat(stringKey0, lessThan(stringKey2)); + + assertThat(longKey1, greaterThan(stringKey0)); + assertThat(longKey1, lessThan(stringKey2)); + + assertThat(stringKey2, greaterThan(stringKey0)); + assertThat(stringKey2, greaterThan(longKey1)); + } } From 17bace5881a3f79fc6744262c094b3b92d6c58de Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 18 Nov 2021 18:19:28 +0100 Subject: [PATCH 163/235] [SDFAB-576] Fix serialization of bytesequence Replicas do not get all the information from the leader and show weird strings when rendering PiCriterion. This affects only byte sequence containing ascii string Change-Id: Id656c2d150294866878175d7d703148739525f95 --- .../store/serializers/ImmutableByteSequenceSerializer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ImmutableByteSequenceSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ImmutableByteSequenceSerializer.java index 1cbd021f408..9670acd185f 100644 --- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ImmutableByteSequenceSerializer.java +++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ImmutableByteSequenceSerializer.java @@ -38,12 +38,14 @@ public ImmutableByteSequenceSerializer() { @Override public void write(Kryo kryo, Output output, ImmutableByteSequence object) { byte[] data = object.asArray(); + output.writeBoolean(object.isAscii()); output.writeInt(data.length); output.write(data); } @Override public ImmutableByteSequence read(Kryo kryo, Input input, Class type) { + boolean isAscii = input.readBoolean(); int length = input.readInt(); byte[] data = new byte[length]; int bytesRead = input.read(data); @@ -51,6 +53,10 @@ public ImmutableByteSequence read(Kryo kryo, Input input, Class Date: Thu, 2 Dec 2021 09:42:28 +0100 Subject: [PATCH 164/235] [SDFAB-821] Implement auto-recovery mechanism for failed mastership changes With this fix the ONOS cluster will start a new term if the mastership is not acknowledged by the device after 10 seconds. Change-Id: Id0927181e4ba37ed1af52dd9843d4c2563469025 --- .../net/device/impl/DeviceManager.java | 94 +++++++++++++++++-- 1 file changed, 88 insertions(+), 6 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index cf6265be715..e50fe37aec7 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -90,6 +90,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; @@ -98,6 +99,7 @@ import static com.google.common.collect.Multimaps.synchronizedListMultimap; import static java.util.concurrent.Executors.newSingleThreadExecutor; import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; +import static java.lang.System.currentTimeMillis; import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.net.MastershipRole.MASTER; import static org.onosproject.net.MastershipRole.NONE; @@ -155,7 +157,7 @@ public class DeviceManager @Reference(cardinality = ReferenceCardinality.MANDATORY) protected ClusterCommunicationService communicationService; - private ExecutorService portReqeustExecutor; + private ExecutorService portRequestExecutor; /** * List of all registered PortConfigOperator. */ @@ -198,6 +200,12 @@ public LocalStatus(boolean b, Instant now) { private final Map deviceLocalStatus = Maps.newConcurrentMap(); + // To remember whether or not the role was acknowledged by the device + private final Map roleToAcknowledge = + Maps.newConcurrentMap(); + private ScheduledExecutorService backgroundRoleChecker; + private static final int ROLE_TIMEOUT_SECONDS = 10; + @Activate public void activate() { portAnnotationOp = new PortAnnotationOperator(networkConfigService); @@ -217,17 +225,27 @@ public void activate() { try { mastershipCheck(); } catch (Exception e) { - log.error("Exception thrown during integrity check", e); + log.error("Exception thrown during mastership integrity check", e); } }, 1, 1, TimeUnit.MINUTES); - portReqeustExecutor = newSingleThreadExecutor(); + portRequestExecutor = newSingleThreadExecutor(); communicationService.addSubscriber( PORT_UPDOWN_SUBJECT, SERIALIZER::decode, this::handlePortRequest, - portReqeustExecutor); + portRequestExecutor); + + backgroundRoleChecker = newSingleThreadScheduledExecutor( + groupedThreads("onos/device", "manager-role", log)); + backgroundRoleChecker.scheduleAtFixedRate(() -> { + try { + roleCheck(); + } catch (Exception e) { + log.error("Exception thrown while verifying role acknowledgement from all devices", e); + } + }, 0, 10, TimeUnit.SECONDS); log.info("Started"); } @@ -240,7 +258,8 @@ public void deactivate() { mastershipService.removeListener(mastershipListener); eventDispatcher.removeSink(DeviceEvent.class); communicationService.removeSubscriber(PORT_UPDOWN_SUBJECT); - portReqeustExecutor.shutdown(); + portRequestExecutor.shutdown(); + backgroundRoleChecker.shutdown(); log.info("Stopped"); } @@ -486,6 +505,7 @@ private void mastershipCheck() { post(store.markOffline(deviceId)); } //relinquish master role and ability to be backup. + roleToAcknowledge.remove(deviceId); mastershipService.relinquishMastership(deviceId).get(); } catch (InterruptedException e) { log.warn("Interrupted while relinquishing role for {}", deviceId); @@ -508,6 +528,8 @@ private void mastershipCheck() { } else { log.info("Failed marking {} offline. {}", deviceId, role); } + // Stop the timer - just to prevent any race + roleToAcknowledge.remove(deviceId); mastershipService.relinquishMastership(deviceId); }); } @@ -532,6 +554,55 @@ private void mastershipCheck() { } } + /** + * Checks if all the devices have acknowledged the mastership role. + */ + private void roleCheck() { + log.debug("Checking role"); + for (Device device : getDevices()) { + final DeviceId deviceId = device.id(); + MastershipRole myRole = mastershipService.getLocalRole(deviceId); + log.trace("Checking device {}. Current role is {}", deviceId, myRole); + final AtomicBoolean exists = new AtomicBoolean(false); + final Long ts = roleToAcknowledge.compute(deviceId, (key, value) -> { + if (value == null) { + return null; + } + exists.set(true); + if (currentTimeMillis() - value < (ROLE_TIMEOUT_SECONDS * 1000)) { + return value; + } + return null; + }); + // Nobody applied the role recently + if (!exists.get()) { + log.trace("Role was not applied or it has been acknowledged for device {}", deviceId); + continue; + } + // Timeout still on + if (ts != null) { + log.debug("Timeout expires in {} ms", ((ROLE_TIMEOUT_SECONDS * 1000) - currentTimeMillis() + ts)); + continue; + } + if (myRole != MASTER) { + log.debug("Timeout is expired but current role is not MASTER ({}), nothing to do", myRole); + continue; + } + /* Switch failed to acknowledge master role we asked for. + Yield mastership to other instance*/ + log.warn("Failed to assert role onto device {}. requested={}, no response", + deviceId, myRole); + mastershipService.relinquishMastership(deviceId).whenComplete((result, error) -> { + if (error != null) { + log.error("Exception while relinquishing mastership", error); + } else { + log.info("Successfully relinquished mastership for {}. Requesting new role", deviceId); + mastershipService.requestRoleFor(deviceId); + } + }); + } + } + // Personalized device provider service issued to the supplied provider. private class InternalDeviceProviderService extends AbstractProviderService @@ -561,6 +632,8 @@ private boolean applyRole(DeviceId deviceId, MastershipRole newRole) { deviceId, newRole); return false; } + // Start the timer + roleToAcknowledge.put(deviceId, currentTimeMillis()); provider.roleChanged(deviceId, newRole); // not triggering probe when triggered by provider service event return true; @@ -667,6 +740,7 @@ public void deviceDisconnected(DeviceId deviceId) { } finally { try { //relinquish master role and ability to be backup. + roleToAcknowledge.remove(deviceId); mastershipService.relinquishMastership(deviceId).get(); } catch (InterruptedException e) { log.warn("Interrupted while reliquishing role for {}", deviceId); @@ -800,6 +874,7 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, if (requested == null && response == null) { // something was off with DeviceProvider, maybe check channel too? log.warn("Failed to assert role onto Device {}", deviceId); + roleToAcknowledge.remove(deviceId); mastershipService.relinquishMastership(deviceId); return; } @@ -817,7 +892,9 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, if (Objects.equals(requested, response)) { if (Objects.equals(requested, expected)) { - return; + // Stop the timer + log.info("Role has been acknowledged for device {}", deviceId); + roleToAcknowledge.remove(deviceId); } else { log.warn("Role mismatch on {}. Set to {}, but store demands {}", deviceId, response, expected); @@ -831,6 +908,8 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, log.warn("Failed to assert role onto device {}. requested={}, response={}", deviceId, requested, response); if (requested == MastershipRole.MASTER) { + // Stop the timer + roleToAcknowledge.remove(deviceId); mastershipService.relinquishMastership(deviceId); // TODO: Shouldn't we be triggering event? //final Device device = getDevice(deviceId); @@ -900,6 +979,8 @@ private boolean applyRoleAndProbe(DeviceId deviceId, MastershipRole newRole) { log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole); return false; } + // Start the timer + roleToAcknowledge.put(deviceId, currentTimeMillis()); provider.roleChanged(deviceId, newRole); if (newRole.equals(MastershipRole.MASTER)) { @@ -1010,6 +1091,7 @@ private void handleMastershipEvent(MastershipEvent event) { + "but this node cannot reach the device. " + "Relinquishing role. ", myNextRole, did); + roleToAcknowledge.remove(did); mastershipService.relinquishMastership(did); } return; From 321f75a794dd8d8524209172c980f172a35d547f Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Tue, 14 Dec 2021 14:48:54 +0100 Subject: [PATCH 165/235] [ONOS-8151] Re-send request for flow removal in case the flow is in PENDING_REMOVE and the stats report it. Change-Id: I4e46f102a0a1a341ccfaff968207378ce30b9144 --- .../org/onosproject/net/flow/impl/FlowRuleManager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index 9dc92d15776..833a40c3c4e 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -522,11 +522,12 @@ private void extraneousFlow(FlowRule flowRule) { log.debug("Flow {} is on switch but not in store.", flowRule); } - private boolean flowAdded(FlowEntry flowEntry) { + private boolean handleExistingFlow(FlowEntry flowEntry) { checkNotNull(flowEntry, FLOW_RULE_NULL); checkValidity(); - - if (checkRuleLiveness(flowEntry, store.getFlowEntry(flowEntry))) { + FlowEntry storedEntry = store.getFlowEntry(flowEntry); + if ((storedEntry != null && storedEntry.state() != FlowEntry.FlowEntryState.PENDING_REMOVE) + && checkRuleLiveness(flowEntry, storedEntry)) { FlowRuleEvent event = store.addOrUpdateFlowRule(flowEntry); if (event == null) { log.debug("No flow store event generated."); @@ -607,7 +608,7 @@ private void pushFlowMetricsInternal(DeviceId deviceId, Iterable flow if (storedRule != null) { if (storedRule.exactMatch(rule)) { // we both have the rule, let's update some info then. - done = flowAdded(rule); + done = handleExistingFlow(rule); if (!done) { // Mastership change can occur during this iteration master = mastershipService.getMasterFor(deviceId); From 33cc708a9f46c3b3a24c789cad178d0d9af385a9 Mon Sep 17 00:00:00 2001 From: Wailok Shum Date: Wed, 15 Dec 2021 23:11:15 +0800 Subject: [PATCH 166/235] [SDFAB-820] Improve error logging in StreamClientImpl Change-Id: I93a737f31432743f20917b8c85dd54d8b81eee62 (cherry picked from commit 741d50de0ae092e5ff0c78cfc66a5afc10f05dfe) --- .../onosproject/p4runtime/ctl/client/StreamClientImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java index b2516b43f6e..5d227e4dc4f 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java @@ -445,6 +445,12 @@ public void onNext(StreamMessageResponse message) { case ARBITRATION: handleArbitrationUpdate(message.getArbitration()); return; + case ERROR: + P4RuntimeOuterClass.StreamError error = message.getError(); + log.warn("Receive stream error {} from {} Canonical Code: {} Message: {} Space: {} Code: {}", + error.getDetailsCase(), deviceId, error.getCanonicalCode(), error.getMessage(), + error.getSpace(), error.getCode()); + return; default: log.warn("Unrecognized StreamMessageResponse from {}: {}", deviceId, message.getUpdateCase()); From e769afdb134099eedcc690daa4df69d93d6bdb66 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Sun, 19 Dec 2021 17:50:53 +0000 Subject: [PATCH 167/235] Tagging 2.5.5 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index cadf82568ae..c8f2b6a7d7d 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.5-SNAPSHOT"); + private static Version version = Version.version("2.5.5"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 18164770df8..6228666dc8c 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.5-SNAPSHOT" +ONOS_VERSION = "2.5.5" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 1d6f22daea2..e3a7d699e9f 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.5-SNAPSHOT" +export ONOS_POM_VERSION="2.5.5" export ONOS_VERSION=${ONOS_VERSION:-2.5.5.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 4b9b7c840f5..4dcb8a7fb16 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index dd6ff53067e..b6fb23ed48b 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index a50381f2c8e..ea87f47aa3b 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index ba10887f827..1d25d9e9a27 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index fe40c753baf..c7cfe398e2b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index d89968ea0e1..cedd40880ee 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index f9751c6b118..91d09fac28c 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index de6038bcaaf..80c50f71c86 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index afef4751cc0..03bd0a6839c 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 2edbf673126..076dd9c4e8a 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 20b7e8735bc..b61e4bb5cf0 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 1a8e7f6550c..0446cde0e62 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index f1c855e10ff..ea96fb12bf7 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index be08b4ffa96..27c75c73f31 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 02e01ad68f6..3c5d5aedf3e 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 17cd3ba0e36..abbf0d68968 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5-SNAPSHOT + 2.5.5 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 041da4e6879..cf54c33fa62 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5-SNAPSHOT + 2.5.5 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index f0cfbd34231..61b6240e661 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 68b4048eabd8dfa2718924d22479e23c14163199 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Sun, 19 Dec 2021 17:50:58 +0000 Subject: [PATCH 168/235] Starting snapshot 2.5.6-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index c8f2b6a7d7d..3b6d004ad52 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.5"); + private static Version version = Version.version("2.5.6-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 6228666dc8c..c0e72329c3a 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.5" +ONOS_VERSION = "2.5.6-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index e3a7d699e9f..791a711ac6c 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.5" -export ONOS_VERSION=${ONOS_VERSION:-2.5.5.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.6-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.6.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 4dcb8a7fb16..18ef046503d 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index b6fb23ed48b..66ac424c7b8 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index ea87f47aa3b..0d113da324a 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 1d25d9e9a27..9a2e63fd7ca 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index c7cfe398e2b..cd903ee6deb 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index cedd40880ee..42f0e40061d 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 91d09fac28c..e8028e851a0 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 80c50f71c86..528c3ba54eb 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 03bd0a6839c..ae93627671a 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 076dd9c4e8a..3b2761fd567 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index b61e4bb5cf0..da19f62420f 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 0446cde0e62..5ab61b7748c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index ea96fb12bf7..87073f72926 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 27c75c73f31..2a2c7cc3f6b 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 3c5d5aedf3e..daa3f49a2fd 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index abbf0d68968..067e4d2acc3 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.5 + 2.5.6-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index cf54c33fa62..3fb0ca804c0 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.5 + 2.5.6-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 61b6240e661..f43695db6da 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.5" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.6-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From a86c946c2a96fcfccdb74819a610da054401c69d Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Thu, 16 Dec 2021 18:29:05 +0100 Subject: [PATCH 169/235] Mitigate log4j2 issues identified in CVE-2021-44228 Remove JndiLookup.class from log4j2 JAR as suggested in https://logging.apache.org/log4j/2.x/security.html Change-Id: I88b3bae462ddb7182cc71e17dfa2036d5d9dae62 --- tools/package/onos-prep-karaf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/package/onos-prep-karaf b/tools/package/onos-prep-karaf index c707206e008..45029ead007 100755 --- a/tools/package/onos-prep-karaf +++ b/tools/package/onos-prep-karaf @@ -38,6 +38,10 @@ perl -pi.old -e "s/maxFileSize=1MB/maxFileSize=10MB/g" \ echo "felix.fileinstall.filter='\\*.jar'" >> \ $KARAF_DIR/etc/org.apache.felix.fileinstall-deploy.cfg +# Patch log4j to mitigate CVE-2021-44228 +# https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228 +zip -q -d $KARAF_DIR/system/org/ops4j/pax/logging/pax-logging-log4j2/1.11.6/pax-logging-log4j2-1.11.6.jar org/apache/logging/log4j/core/lookup/JndiLookup.class + # Patch-in proper Karaf version into the startup script perl -pi.bk -e 's/apache-karaf-\$KARAF_VERSION/$ENV{KARAF_DIR}/g' $SANDBOX/bin/onos-service From a57652d92bdd01b1e77bffbac78a44f96fb385f3 Mon Sep 17 00:00:00 2001 From: tosinski Date: Mon, 22 Nov 2021 16:53:00 +0100 Subject: [PATCH 170/235] Refactor of UpfProgrammable APIs Change-Id: I792659ad4a163d7115d7320bb33c11534edd484a Signed-off-by: Daniele Moro --- .../behaviour/upf/ForwardingActionRule.java | 399 ------------ .../{GtpTunnel.java => GtpTunnelPeer.java} | 137 ++-- .../behaviour/upf/PacketDetectionRule.java | 512 --------------- .../net/behaviour/upf/SessionDownlink.java | 201 ++++++ .../net/behaviour/upf/SessionUplink.java | 175 +++++ .../upf/{PdrStats.java => UpfCounter.java} | 34 +- .../net/behaviour/upf/UpfDevice.java | 157 ++--- .../net/behaviour/upf/UpfEntity.java | 16 +- .../net/behaviour/upf/UpfEntityType.java | 49 ++ .../net/behaviour/upf/UpfInterface.java | 10 +- .../net/behaviour/upf/UpfProgrammable.java | 3 +- .../upf/UpfProgrammableException.java | 38 +- .../behaviour/upf/UpfTerminationDownlink.java | 252 ++++++++ .../behaviour/upf/UpfTerminationUplink.java | 197 ++++++ .../fabric/impl/FabricPipeconfManager.java | 7 - .../cli/ReadInternalUpfStoreCommand.java | 55 -- .../impl/behaviour/cli/package-info.java | 20 - .../upf/DistributedFabricUpfStore.java | 133 ---- .../behaviour/upf/FabricUpfProgrammable.java | 601 ------------------ .../impl/behaviour/upf/FabricUpfStore.java | 83 --- .../behaviour/upf/FabricUpfTranslator.java | 435 ------------- .../upf/FabricUpfTranslatorUtil.java | 160 ----- .../impl/behaviour/upf/UpfRuleIdentifier.java | 98 --- .../upf/FabricUpfProgrammableTest.java | 281 -------- .../upf/FabricUpfTranslatorTest.java | 259 -------- .../impl/behaviour/upf/MockCounterModel.java | 57 -- .../behaviour/upf/MockFlowRuleService.java | 117 ---- .../upf/MockP4RuntimeController.java | 93 --- .../impl/behaviour/upf/MockPacketService.java | 86 --- .../behaviour/upf/MockPiPipeconfService.java | 96 --- .../behaviour/upf/MockPiPipelineModel.java | 112 ---- .../impl/behaviour/upf/MockReadRequest.java | 170 ----- .../impl/behaviour/upf/MockReadResponse.java | 94 --- .../impl/behaviour/upf/MockTableModel.java | 106 --- .../upf/TestDistributedFabricUpfStore.java | 50 -- .../impl/behaviour/upf/TestUpfConstants.java | 405 ------------ .../impl/behaviour/upf/TestUpfUtils.java | 45 -- .../impl/behaviour/upf/package-info.java | 20 - 38 files changed, 1068 insertions(+), 4695 deletions(-) delete mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java rename core/api/src/main/java/org/onosproject/net/behaviour/upf/{GtpTunnel.java => GtpTunnelPeer.java} (53%) delete mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java rename core/api/src/main/java/org/onosproject/net/behaviour/upf/{PdrStats.java => UpfCounter.java} (77%) rename pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java => core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java (66%) create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/ReadInternalUpfStoreCommand.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/package-info.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java delete mode 100644 pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/UpfRuleIdentifier.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammableTest.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockCounterModel.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockFlowRuleService.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockP4RuntimeController.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPacketService.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipeconfService.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadRequest.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadResponse.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockTableModel.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestDistributedFabricUpfStore.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfUtils.java delete mode 100644 pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java deleted file mode 100644 index bfed1ce26fd..00000000000 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/ForwardingActionRule.java +++ /dev/null @@ -1,399 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.net.behaviour.upf; - -import org.onlab.packet.Ip4Address; -import org.onlab.util.ImmutableByteSequence; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A single Forwarding Action Rule (FAR), an entity described in the 3GPP - * specifications (although that does not mean that this class is 3GPP - * compliant). An instance of this class will be generated by a logical switch - * write request to the database-style FAR P4 table, and the resulting instance - * should contain all the information needed to reproduce that logical switch - * FAR in the event of a client read request. The instance should also contain - * sufficient information (or expose the means to retrieve such information) to - * generate the corresponding dataplane forwarding state that implements the FAR. - */ -public final class ForwardingActionRule { - // Match Keys - private final ImmutableByteSequence sessionId; // The PFCP session identifier that created this FAR - private final int farId; // PFCP session-local identifier for this FAR - // Action parameters - private final boolean notifyFlag; // Should this FAR notify the control plane when it sees a packet? - private final boolean dropFlag; - private final boolean bufferFlag; - private final GtpTunnel tunnel; // The GTP tunnel that this FAR should encapsulate packets with (if downlink) - - private static final int SESSION_ID_BITWIDTH = 96; - - private ForwardingActionRule(ImmutableByteSequence sessionId, Integer farId, - boolean notifyFlag, GtpTunnel tunnel, boolean dropFlag, boolean bufferFlag) { - this.sessionId = sessionId; - this.farId = farId; - this.notifyFlag = notifyFlag; - this.tunnel = tunnel; - this.dropFlag = dropFlag; - this.bufferFlag = bufferFlag; - } - - /** - * Return a new instance of this FAR with the action parameters stripped, leaving only the match keys. - * - * @return a new FAR with only match keys - */ - public ForwardingActionRule withoutActionParams() { - return ForwardingActionRule.builder() - .setFarId(farId) - .withSessionId(sessionId) - .build(); - } - - public static Builder builder() { - return new Builder(); - } - - /** - * Return a string representing the dataplane action applied by this FAR. - * - * @return a string representing the FAR action - */ - public String actionString() { - String actionName; - String actionParams = ""; - if (dropFlag) { - actionName = "Drop"; - } else if (bufferFlag) { - actionName = "Buffer"; - } else if (tunnel != null) { - actionName = "Encap"; - actionParams = String.format("Src=%s, SPort=%d, TEID=%s, Dst=%s", - tunnel.src().toString(), tunnel.srcPort(), - tunnel.teid().toString(), tunnel.dst().toString()); - } else { - actionName = "Forward"; - } - if (notifyFlag) { - actionName += "+NotifyCP"; - } - - return String.format("%s(%s)", actionName, actionParams); - } - - @Override - public String toString() { - String matchKeys = String.format("ID=%d, SEID=%s", farId, sessionId.toString()); - String actionString = actionString(); - - return String.format("FAR{Match(%s) -> %s}", matchKeys, actionString); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ForwardingActionRule that = (ForwardingActionRule) obj; - - // Safe comparisons between potentially null objects - return (this.dropFlag == that.dropFlag && - this.bufferFlag == that.bufferFlag && - this.notifyFlag == that.notifyFlag && - this.farId == that.farId && - Objects.equals(this.tunnel, that.tunnel) && - Objects.equals(this.sessionId, that.sessionId)); - } - - @Override - public int hashCode() { - return Objects.hash(sessionId, farId, notifyFlag, tunnel, dropFlag, bufferFlag); - } - - /** - * Get the ID of the PFCP Session that produced this FAR. - * - * @return PFCP session ID - */ - public ImmutableByteSequence sessionId() { - return sessionId; - } - - /** - * Get the PFCP session-local ID of the FAR that should apply to packets that match this PDR. - * - * @return PFCP session-local FAR ID - */ - public int farId() { - return farId; - } - - /** - * True if this FAR does not drop packets. - * - * @return true if FAR is forwards - */ - public boolean forwards() { - return !dropFlag; - } - - /** - * True if this FAR encapsulates packets in a GTP tunnel, and false otherwise. - * - * @return true is FAR encapsulates - */ - public boolean encaps() { - return tunnel != null; - } - - /** - * Returns true if this FAR drops packets, and false otherwise. - * - * @return true if this FAR drops - */ - public boolean drops() { - return dropFlag; - } - - /** - * Returns true if this FAR notifies the control plane on receiving a packet, and false otherwise. - * - * @return true if this FAR notifies the cp - */ - public boolean notifies() { - return notifyFlag; - } - - - /** - * Returns true if this FAR buffers incoming packets, and false otherwise. - * - * @return true if this FAR buffers - */ - public boolean buffers() { - return bufferFlag; - } - - /** - * A description of the tunnel that this FAR will encapsulate packets with, if it is a downlink FAR. If the FAR - * is uplink, there will be no such tunnel and this method wil return null. - * - * @return A GtpTunnel instance containing a tunnel sourceIP, destIP, and GTPU TEID, or null if the FAR is uplink. - */ - public GtpTunnel tunnel() { - return tunnel; - } - - /** - * Get the source UDP port of the GTP tunnel that this FAR will encapsulate packets with. - * - * @return GTP tunnel source UDP port - */ - public Short tunnelSrcPort() { - return tunnel != null ? tunnel.srcPort() : null; - } - - /** - * Get the source IP of the GTP tunnel that this FAR will encapsulate packets with. - * - * @return GTP tunnel source IP - */ - public Ip4Address tunnelSrc() { - if (tunnel == null) { - return null; - } - return tunnel.src(); - } - - /** - * Get the destination IP of the GTP tunnel that this FAR will encapsulate packets with. - * - * @return GTP tunnel destination IP - */ - public Ip4Address tunnelDst() { - if (tunnel == null) { - return null; - } - return tunnel.dst(); - } - - /** - * Get the identifier of the GTP tunnel that this FAR will encapsulate packets with. - * - * @return GTP tunnel ID - */ - public ImmutableByteSequence teid() { - if (tunnel == null) { - return null; - } - return tunnel.teid(); - } - - public static class Builder { - private ImmutableByteSequence sessionId = null; - private Integer farId = null; - private GtpTunnel tunnel = null; - private boolean dropFlag = false; - private boolean bufferFlag = false; - private boolean notifyCp = false; - - public Builder() { - } - - /** - * Set the ID of the PFCP session that created this FAR. - * - * @param sessionId PFC session ID - * @return This builder object - */ - public Builder withSessionId(ImmutableByteSequence sessionId) { - this.sessionId = sessionId; - return this; - } - - /** - * Set the ID of the PFCP session that created this FAR. - * - * @param sessionId PFC session ID - * @return This builder object - */ - public Builder withSessionId(long sessionId) { - try { - this.sessionId = ImmutableByteSequence.copyFrom(sessionId).fit(SESSION_ID_BITWIDTH); - } catch (ImmutableByteSequence.ByteSequenceTrimException e) { - // This error is literally impossible - } - return this; - } - - /** - * Set the PFCP Session-local ID of this FAR. - * - * @param farId PFCP session-local FAR ID - * @return This builder object - */ - public Builder setFarId(int farId) { - this.farId = farId; - return this; - } - - /** - * Make this FAR forward incoming packets. - * - * @param flag the flag value to set - * @return This builder object - */ - public Builder setForwardFlag(boolean flag) { - this.dropFlag = !flag; - return this; - } - - /** - * Make this FAR drop incoming packets. - * - * @param flag the flag value to set - * @return This builder object - */ - public Builder setDropFlag(boolean flag) { - this.dropFlag = flag; - return this; - } - - /** - * Make this FAR buffer incoming packets. - * - * @param flag the flag value to set - * @return This builder object - */ - public Builder setBufferFlag(boolean flag) { - this.bufferFlag = flag; - return this; - } - - /** - * Set a flag specifying if the control plane should be notified when this FAR is hit. - * - * @param notifyCp true if FAR notifies control plane - * @return This builder object - */ - public Builder setNotifyFlag(boolean notifyCp) { - this.notifyCp = notifyCp; - return this; - } - - /** - * Set the GTP tunnel that this FAR should encapsulate packets with. - * - * @param tunnel GTP tunnel - * @return This builder object - */ - public Builder setTunnel(GtpTunnel tunnel) { - this.tunnel = tunnel; - return this; - } - - /** - * Set the unidirectional GTP tunnel that this FAR should encapsulate packets with. - * - * @param src GTP tunnel source IP - * @param dst GTP tunnel destination IP - * @param teid GTP tunnel ID - * @return This builder object - */ - public Builder setTunnel(Ip4Address src, Ip4Address dst, ImmutableByteSequence teid) { - return this.setTunnel(GtpTunnel.builder() - .setSrc(src) - .setDst(dst) - .setTeid(teid) - .build()); - } - - /** - * Set the unidirectional GTP tunnel that this FAR should encapsulate packets with. - * - * @param src GTP tunnel source IP - * @param dst GTP tunnel destination IP - * @param teid GTP tunnel ID - * @param srcPort GTP tunnel UDP source port (destination port is hardcoded as 2152) - * @return This builder object - */ - public Builder setTunnel(Ip4Address src, Ip4Address dst, ImmutableByteSequence teid, short srcPort) { - return this.setTunnel(GtpTunnel.builder() - .setSrc(src) - .setDst(dst) - .setTeid(teid) - .setSrcPort(srcPort) - .build()); - } - - public ForwardingActionRule build() { - // All match keys are required - checkNotNull(sessionId, "Session ID is required"); - checkNotNull(farId, "FAR ID is required"); - return new ForwardingActionRule(sessionId, farId, notifyCp, tunnel, dropFlag, bufferFlag); - } - } -} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnel.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java similarity index 53% rename from core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnel.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java index bc262c77b40..a3cf6628392 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnel.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java @@ -16,62 +16,77 @@ package org.onosproject.net.behaviour.upf; +import com.google.common.annotations.Beta; import org.onlab.packet.Ip4Address; -import org.onlab.util.ImmutableByteSequence; import java.util.Objects; -import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkArgument; /** - * A structure representing a unidirectional GTP tunnel. + * A structure representing a GTP tunnel peer. + * The GTP Tunnel Peer is used by UPF to identify a second end of a GTP tunnel. + * The source and destination tunnel IPv4 addresses, and source UDP port are set + * based on the information from this structure. */ -public final class GtpTunnel { +@Beta +public final class GtpTunnelPeer implements UpfEntity { + // Match keys + private final byte tunPeerId; + // Action parameters private final Ip4Address src; // The source address of the unidirectional tunnel private final Ip4Address dst; // The destination address of the unidirectional tunnel - private final ImmutableByteSequence teid; // Tunnel Endpoint Identifier - private final short srcPort; // Tunnel destination port, default 2152 + private final short srcPort; // Tunnel source port, default 2152 - private GtpTunnel(Ip4Address src, Ip4Address dst, ImmutableByteSequence teid, - Short srcPort) { + private GtpTunnelPeer(byte tunPeerId, Ip4Address src, Ip4Address dst, short srcPort) { + this.tunPeerId = tunPeerId; this.src = src; this.dst = dst; - this.teid = teid; this.srcPort = srcPort; } - public static GtpTunnelBuilder builder() { - return new GtpTunnelBuilder(); + public static GtpTunnelPeer.Builder builder() { + return new GtpTunnelPeer.Builder(); } @Override public String toString() { - return String.format("GTP-Tunnel(%s -> %s, TEID:%s)", - src.toString(), dst.toString(), teid.toString()); + return String.format("GTP-Tunnel-Peer(%s -> src:%s, dst:%s srcPort:%s)", + tunPeerId, src.toString(), dst.toString(), srcPort); } - @Override - public boolean equals(Object obj) { - if (obj == this) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (obj == null) { + + if (object == null) { return false; } - if (getClass() != obj.getClass()) { + + if (getClass() != object.getClass()) { return false; } - GtpTunnel that = (GtpTunnel) obj; - return (this.src.equals(that.src) && + GtpTunnelPeer that = (GtpTunnelPeer) object; + return (this.tunPeerId == that.tunPeerId && + this.src.equals(that.src) && this.dst.equals(that.dst) && - this.teid.equals(that.teid) && (this.srcPort == that.srcPort)); } @Override public int hashCode() { - return Objects.hash(src, dst, teid, srcPort); + return Objects.hash(src, dst, srcPort); + } + + /** + * Get the ID of the GTP tunnel peer. + * + * @return GTP tunnel peer ID + */ + public byte tunPeerId() { + return tunPeerId; } /** @@ -92,78 +107,60 @@ public Ip4Address dst() { return this.dst; } - /** - * Get the ID of this unidirectional GTP tunnel. - * - * @return tunnel ID - */ - public ImmutableByteSequence teid() { - return this.teid; - } - - /** * Get the source L4 port of this unidirectional GTP tunnel. * * @return tunnel source port */ - public Short srcPort() { + public short srcPort() { return this.srcPort; } - public static class GtpTunnelBuilder { - private Ip4Address src; - private Ip4Address dst; - private ImmutableByteSequence teid; + @Override + public UpfEntityType type() { + return UpfEntityType.TUNNEL_PEER; + } + + public static class Builder { + private Byte tunPeerId = null; + private Ip4Address src = null; + private Ip4Address dst = null; private short srcPort = 2152; // Default value is equal to GTP tunnel dst port - public GtpTunnelBuilder() { - this.src = null; - this.dst = null; - this.teid = null; - } + public Builder() { - /** - * Set the source IP address of the unidirectional GTP tunnel. - * - * @param src GTP tunnel source IP - * @return This builder object - */ - public GtpTunnelBuilder setSrc(Ip4Address src) { - this.src = src; - return this; } /** - * Set the destination IP address of the unidirectional GTP tunnel. + * Set the ID of the GTP Tunnel peer. * - * @param dst GTP tunnel destination IP + * @param tunPeerId GTP tunnel peer ID * @return This builder object */ - public GtpTunnelBuilder setDst(Ip4Address dst) { - this.dst = dst; + public GtpTunnelPeer.Builder withTunnelPeerId(byte tunPeerId) { + this.tunPeerId = tunPeerId; return this; } /** - * Set the identifier of this unidirectional GTP tunnel. + * Set the source IP address of the unidirectional GTP tunnel. * - * @param teid tunnel ID + * @param src GTP tunnel source IP * @return This builder object */ - public GtpTunnelBuilder setTeid(ImmutableByteSequence teid) { - this.teid = teid; + public GtpTunnelPeer.Builder withSrcAddr(Ip4Address src) { + this.src = src; return this; } /** - * Set the identifier of this unidirectional GTP tunnel. + * Set the destination IP address of the unidirectional GTP tunnel. * - * @param teid tunnel ID + * @param dst GTP tunnel destination IP * @return This builder object */ - public GtpTunnelBuilder setTeid(long teid) { - this.teid = ImmutableByteSequence.copyFrom(teid); + public GtpTunnelPeer.Builder withDstAddr(Ip4Address dst) { + this.dst = dst; return this; } @@ -173,16 +170,18 @@ public GtpTunnelBuilder setTeid(long teid) { * @param srcPort tunnel source port * @return this builder object */ - public GtpTunnelBuilder setSrcPort(short srcPort) { + public GtpTunnelPeer.Builder withSrcPort(short srcPort) { this.srcPort = srcPort; return this; } - public GtpTunnel build() { - checkNotNull(src, "Tunnel source address cannot be null"); - checkNotNull(dst, "Tunnel destination address cannot be null"); - checkNotNull(teid, "Tunnel TEID cannot be null"); - return new GtpTunnel(this.src, this.dst, this.teid, srcPort); + public GtpTunnelPeer build() { + checkArgument(tunPeerId != null, "Tunnel Peer ID must be provided"); + checkArgument(src != null, "Tunnel source address cannot be null"); + checkArgument(dst != null, "Tunnel destination address cannot be null"); + return new GtpTunnelPeer(this.tunPeerId, this.src, this.dst, srcPort); } + } + } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java deleted file mode 100644 index f607d8704e3..00000000000 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PacketDetectionRule.java +++ /dev/null @@ -1,512 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.net.behaviour.upf; - -import org.onlab.packet.Ip4Address; -import org.onlab.util.ImmutableByteSequence; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * A single Packet Detection Rule (PDR), an entity described in the 3GPP - * specifications (although that does not mean that this class is 3GPP - * compliant). An instance of this class will be generated by a logical switch - * write request to the database-style PDR P4 table, and the resulting instance - * should contain all the information needed to reproduce that logical switch - * PDR in the event of a client read request. The instance should also contain - * sufficient information (or expose the means to retrieve such information) to - * generate the corresponding dataplane forwarding state that implements the PDR. - */ -public final class PacketDetectionRule { - // Match keys - private final Ip4Address ueAddr; // The UE IP address that this PDR matches on - private final ImmutableByteSequence teid; // The Tunnel Endpoint ID that this PDR matches on - private final Ip4Address tunnelDst; // The tunnel destination address that this PDR matches on - // Action parameters - private final ImmutableByteSequence sessionId; // The ID of the PFCP session that created this PDR - private final Integer ctrId; // Counter ID unique to this PDR - private final Integer farId; // The PFCP session-local ID of the FAR that should apply after this PDR hits - private final Type type; - - private final Byte qfi; // QoS Flow Identifier of this PDR - private final boolean qfiPush; // True when QFI should be pushed to the packet - private final boolean qfiMatch; // True when QFI should be matched - - private static final int SESSION_ID_BITWIDTH = 96; - - private PacketDetectionRule(ImmutableByteSequence sessionId, Integer ctrId, - Integer farId, Ip4Address ueAddr, Byte qfi, - ImmutableByteSequence teid, Ip4Address tunnelDst, - Type type, boolean qfiPush, boolean qfiMatch) { - this.ueAddr = ueAddr; - this.teid = teid; - this.tunnelDst = tunnelDst; - this.sessionId = sessionId; - this.ctrId = ctrId; - this.farId = farId; - this.qfi = qfi; - this.type = type; - this.qfiPush = qfiPush; - this.qfiMatch = qfiMatch; - } - - public static Builder builder() { - return new Builder(); - } - - /** - * Return a string representing the match conditions of this PDR. - * - * @return a string representing the PDR match conditions - */ - public String matchString() { - if (matchesEncapped()) { - return matchQfi() ? - String.format("Match(Dst=%s, TEID=%s, QFI=%s)", tunnelDest(), teid(), qfi()) : - String.format("Match(Dst=%s, TEID=%s)", tunnelDest(), teid()); - } else { - return String.format("Match(Dst=%s, !GTP)", ueAddress()); - } - } - - @Override - public String toString() { - String actionParams = ""; - if (hasActionParameters()) { - actionParams = hasQfi() && !matchQfi() ? - String.format("SEID=%s, FAR=%d, CtrIdx=%d, QFI=%s", - sessionId.toString(), farId, ctrId, qfi) : - String.format("SEID=%s, FAR=%d, CtrIdx=%d", - sessionId.toString(), farId, ctrId); - actionParams = pushQfi() ? String.format("%s, QFI_PUSH", actionParams) : actionParams; - } - - return String.format("PDR{%s -> LoadParams(%s)}", - matchString(), actionParams); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - PacketDetectionRule that = (PacketDetectionRule) obj; - - // Safe comparisons between potentially null objects - return (this.type.equals(that.type) && - Objects.equals(this.teid, that.teid) && - Objects.equals(this.tunnelDst, that.tunnelDst) && - Objects.equals(this.ueAddr, that.ueAddr) && - Objects.equals(this.ctrId, that.ctrId) && - Objects.equals(this.sessionId, that.sessionId) && - Objects.equals(this.farId, that.farId) && - Objects.equals(this.qfi, that.qfi) && - Objects.equals(this.qfiPush, that.qfiPush) && - Objects.equals(this.qfiMatch, that.qfiMatch)); - } - - @Override - public int hashCode() { - return Objects.hash(ueAddr, teid, tunnelDst, sessionId, ctrId, farId, - qfi, type); - } - - /** - * Instances created as a result of DELETE write requests will not have - * action parameters, only match keys. This method should be used to avoid - * null pointer exceptions in those instances. - * - * @return true if this instance has PDR action parameters, false otherwise. - */ - public boolean hasActionParameters() { - return type == Type.MATCH_ENCAPPED || type == Type.MATCH_UNENCAPPED; - } - - /** - * Return a new instance of this PDR with the action parameters stripped, - * leaving only the match keys. - * - * @return a new PDR with only match keys - */ - public PacketDetectionRule withoutActionParams() { - if (matchesEncapped()) { - PacketDetectionRule.Builder pdrBuilder = PacketDetectionRule.builder() - .withTeid(teid) - .withTunnelDst(tunnelDst); - if (this.hasQfi() && this.matchQfi()) { - pdrBuilder.withQfiMatch(); - pdrBuilder.withQfi(qfi); - } - return pdrBuilder.build(); - } else { - return PacketDetectionRule.builder() - .withUeAddr(ueAddr).build(); - } - } - - /** - * True if this PDR matches on packets received with a GTP header, and false - * otherwise. - * - * @return true if the PDR matches only encapsulated packets - */ - public boolean matchesEncapped() { - return type == Type.MATCH_ENCAPPED || - type == Type.MATCH_ENCAPPED_NO_ACTION; - } - - /** - * True if this PDR matches on packets received without a GTP header, and - * false otherwise. - * - * @return true if the PDR matches only un-encapsulated packets - */ - public boolean matchesUnencapped() { - return type == Type.MATCH_UNENCAPPED || - type == Type.MATCH_UNENCAPPED_NO_ACTION; - } - - /** - * Get the ID of the PFCP session that produced this PDR. - * - * @return PFCP session ID - */ - public ImmutableByteSequence sessionId() { - return sessionId; - } - - /** - * Get the UE IP address that this PDR matches on. - * - * @return UE IP address - */ - public Ip4Address ueAddress() { - return ueAddr; - } - - /** - * Get the identifier of the GTP tunnel that this PDR matches on. - * - * @return GTP tunnel ID - */ - public ImmutableByteSequence teid() { - return teid; - } - - /** - * Get the destination IP of the GTP tunnel that this PDR matches on. - * - * @return GTP tunnel destination IP - */ - public Ip4Address tunnelDest() { - return tunnelDst; - } - - /** - * Get the dataplane PDR counter cell ID that this PDR is assigned. - * - * @return PDR counter cell ID - */ - public int counterId() { - return ctrId; - } - - /** - * Get the PFCP session-local ID of the far that should apply to packets - * that this PDR matches. - * - * @return PFCP session-local FAR ID - */ - public int farId() { - return farId; - } - - /** - * Get the QoS Flow Identifier for this PDR. - * - * @return QoS Flow Identifier - */ - public byte qfi() { - return qfi; - } - - /** - * Returns whether QFi should be pushed to the packet. - * - * @return True if the QFI should be pushed to the packet, false otherwise - */ - public boolean pushQfi() { - return qfiPush; - } - - /** - * Returns whether QFI should be matched on the packet or not. - * - * @return True if QFI should be matched on the packet, false otherwise - */ - public boolean matchQfi() { - return qfiMatch; - } - - /** - * Checks if the PDR has a QFI to match upon or to push on the packet. - * - * @return True if the PDR has a QFI, false otherwise - */ - public boolean hasQfi() { - return qfi != null; - } - - private enum Type { - /** - * Match on packets that are encapsulated in a GTP tunnel. - */ - MATCH_ENCAPPED, - /** - * Match on packets that are not encapsulated in a GTP tunnel. - */ - MATCH_UNENCAPPED, - /** - * For PDRs that match on encapsulated packets but do not yet have any - * action parameters set. - * These are usually built in the context of P4Runtime DELETE write requests. - */ - MATCH_ENCAPPED_NO_ACTION, - /** - * For PDRs that match on unencapsulated packets but do not yet have any - * action parameters set. - * These are usually built in the context of P4Runtime DELETE write requests. - */ - MATCH_UNENCAPPED_NO_ACTION - } - - public static class Builder { - private ImmutableByteSequence sessionId = null; - private Integer ctrId = null; - private Integer localFarId = null; - private Integer schedulingPriority = null; - private Ip4Address ueAddr = null; - private ImmutableByteSequence teid = null; - private Ip4Address tunnelDst = null; - private Byte qfi = null; - private boolean qfiPush = false; - private boolean qfiMatch = false; - - public Builder() { - - } - - /** - * Set the ID of the PFCP session that produced this PDR. - * - * @param sessionId PFCP session ID - * @return This builder object - */ - public Builder withSessionId(ImmutableByteSequence sessionId) { - this.sessionId = sessionId; - return this; - } - - /** - * Set the ID of the PFCP session that produced this PDR. - * - * @param sessionId PFCP session ID - * @return This builder object - */ - public Builder withSessionId(long sessionId) { - try { - this.sessionId = ImmutableByteSequence.copyFrom(sessionId) - .fit(SESSION_ID_BITWIDTH); - } catch (ImmutableByteSequence.ByteSequenceTrimException e) { - // This error is literally impossible - } - return this; - } - - /** - * Set the UE IP address that this PDR matches on. - * - * @param ueAddr UE IP address - * @return This builder object - */ - public Builder withUeAddr(Ip4Address ueAddr) { - this.ueAddr = ueAddr; - return this; - } - - /** - * Set the dataplane PDR counter cell ID that this PDR is assigned. - * - * @param ctrId PDR counter cell ID - * @return This builder object - */ - public Builder withCounterId(int ctrId) { - this.ctrId = ctrId; - return this; - } - - - /** - * Set the PFCP session-local ID of the far that should apply to packets that this PDR matches. - * - * @param localFarId PFCP session-local FAR ID - * @return This builder object - */ - public Builder withLocalFarId(int localFarId) { - this.localFarId = localFarId; - return this; - } - - /** - * Set the QoS Flow Identifier for this PDR. - * - * @param qfi GTP Tunnel QFI - * @return This builder object - */ - public Builder withQfi(byte qfi) { - this.qfi = qfi; - return this; - } - - /** - * The QoS Flow Identifier should be pushed to the packet. - * This is valid for downstream packets and for 5G traffic only. - * - * @return This builder object - */ - public Builder withQfiPush() { - this.qfiPush = true; - return this; - } - - /** - * The QoS Flow Identifier should be matched to the packet. - * This is valid for upstream packets and for 5G traffic only. - * - * @return This builder object - */ - public Builder withQfiMatch() { - this.qfiMatch = true; - return this; - } - - /** - * Set the identifier of the GTP tunnel that this PDR matches on. - * - * @param teid GTP tunnel ID - * @return This builder object - */ - public Builder withTeid(int teid) { - this.teid = ImmutableByteSequence.copyFrom(teid); - return this; - } - - /** - * Set the identifier of the GTP tunnel that this PDR matches on. - * - * @param teid GTP tunnel ID - * @return This builder object - */ - public Builder withTeid(ImmutableByteSequence teid) { - this.teid = teid; - return this; - } - - /** - * Set the destination IP of the GTP tunnel that this PDR matches on. - * - * @param tunnelDst GTP tunnel destination IP - * @return This builder object - */ - public Builder withTunnelDst(Ip4Address tunnelDst) { - this.tunnelDst = tunnelDst; - return this; - } - - /** - * Set the tunnel ID and destination IP of the GTP tunnel that this PDR matches on. - * - * @param teid GTP tunnel ID - * @param tunnelDst GTP tunnel destination IP - * @return This builder object - */ - public Builder withTunnel(ImmutableByteSequence teid, Ip4Address tunnelDst) { - this.teid = teid; - this.tunnelDst = tunnelDst; - return this; - } - - /** - * Set the tunnel ID, destination IP and QFI of the GTP tunnel that this PDR matches on. - * - * @param teid GTP tunnel ID - * @param tunnelDst GTP tunnel destination IP - * @param qfi GTP QoS Flow Identifier - * @return This builder object - */ - public Builder withTunnel(ImmutableByteSequence teid, Ip4Address tunnelDst, byte qfi) { - this.teid = teid; - this.tunnelDst = tunnelDst; - this.qfi = qfi; - return this; - } - - public PacketDetectionRule build() { - // Some match keys are required. - checkArgument( - (ueAddr != null && teid == null && tunnelDst == null) || - (ueAddr == null && teid != null && tunnelDst != null), - "Either a UE address or a TEID and Tunnel destination must be provided, but not both."); - // Action parameters are optional but must be all provided together if they are provided - checkArgument( - (sessionId != null && ctrId != null && localFarId != null) || - (sessionId == null && ctrId == null && localFarId == null), - "PDR action parameters must be provided together or not at all."); - checkArgument(!qfiPush || !qfiMatch, - "Either match of push QFI can be true, not both."); - checkArgument(!qfiPush || qfi != null, - "A QFI must be provided when pushing QFI to the packet."); - checkArgument(!qfiMatch || qfi != null, - "A QFI must be provided when matching QFI on the packet."); - Type type; - if (teid != null) { - if (sessionId != null) { - type = Type.MATCH_ENCAPPED; - } else { - type = Type.MATCH_ENCAPPED_NO_ACTION; - } - } else { - if (sessionId != null) { - type = Type.MATCH_UNENCAPPED; - } else { - type = Type.MATCH_UNENCAPPED_NO_ACTION; - } - } - return new PacketDetectionRule(sessionId, ctrId, localFarId, ueAddr, - qfi, teid, tunnelDst, type, - qfiPush, qfiMatch); - } - } -} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java new file mode 100644 index 00000000000..c35410bf28e --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java @@ -0,0 +1,201 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; +import org.onlab.packet.Ip4Address; + +import java.util.Objects; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A structure representing the UE Session on the UPF-programmable device. + * Provides means to set up the UE Session in the downlink direction. + */ +@Beta +public final class SessionDownlink implements UpfEntity { + // Match Keys + private final Ip4Address ueAddress; + // Action parameters + private final Byte tunPeerId; + private final boolean buffering; + private final boolean dropping; + + private SessionDownlink(Ip4Address ipv4Address, + Byte tunPeerId, + boolean buffering, + boolean drop) { + this.ueAddress = ipv4Address; + this.tunPeerId = tunPeerId; + this.buffering = buffering; + this.dropping = drop; + } + + public static Builder builder() { + return new Builder(); + } + + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object == null) { + return false; + } + if (getClass() != object.getClass()) { + return false; + } + + SessionDownlink that = (SessionDownlink) object; + + return this.buffering == that.buffering && + this.dropping == that.dropping && + Objects.equals(ueAddress, that.ueAddress) && + Objects.equals(tunPeerId, that.tunPeerId); + } + + public int hashCode() { + return java.util.Objects.hash(ueAddress, tunPeerId, buffering, dropping); + } + + @Override + public String toString() { + return "UESessionDL{" + matchString() + " -> " + actionString(); + } + + private String matchString() { + return "Match(ue_addr=" + this.ueAddress() + ")"; + } + + private String actionString() { + StringBuilder actionStrBuilder = new StringBuilder("("); + if (this.needsBuffering() && this.needsDropping()) { + actionStrBuilder.append("BUFF+DROP, "); + } else if (this.needsBuffering()) { + actionStrBuilder.append("BUFF, "); + } else if (this.needsDropping()) { + actionStrBuilder.append("DROP, "); + } else { + actionStrBuilder.append("FWD, "); + } + return actionStrBuilder.append(" tun_peer=").append(this.tunPeerId()).append(")") + .toString(); + } + + /** + * True if this UE Session needs buffering of the downlink traffic. + * + * @return true if the UE Session needs buffering. + */ + public boolean needsBuffering() { + return buffering; + } + + /** + * True if this UE Session needs dropping of the downlink traffic. + * + * @return true if the UE Session needs dropping. + */ + public boolean needsDropping() { + return dropping; + } + + /** + * Get the UE IP address of this downlink UE session. + * + * @return UE IP address + */ + public Ip4Address ueAddress() { + return ueAddress; + } + + /** + * Get the GTP tunnel peer ID that is set by this UE Session rule. + * + * @return GTP tunnel peer ID + */ + public Byte tunPeerId() { + return tunPeerId; + } + + @Override + public UpfEntityType type() { + return UpfEntityType.SESSION_DOWNLINK; + } + + public static class Builder { + private Ip4Address ueAddress = null; + private Byte tunPeerId = null; + private boolean buffer = false; + private boolean drop = false; + + public Builder() { + + } + + /** + * Set the UE IP address that this downlink UE session rule matches on. + * + * @param ueAddress UE IP address + * @return This builder object + */ + public Builder withUeAddress(Ip4Address ueAddress) { + this.ueAddress = ueAddress; + return this; + } + + /** + * Set the GTP tunnel peer ID that is set by this UE Session rule. + * + * @param tunnelPeerId GTP tunnel peer ID + * @return This builder object + */ + public Builder withGtpTunnelPeerId(Byte tunnelPeerId) { + this.tunPeerId = tunnelPeerId; + return this; + } + + /** + * Sets whether to buffer downlink UE session traffic or not. + * + * @param buffer True if request to buffer, false otherwise + * @return This builder object + */ + public Builder needsBuffering(boolean buffer) { + this.buffer = buffer; + return this; + } + + /** + * Sets whether to drop downlink UE session traffic or not. + * + * @param drop True if request to buffer, false otherwise + * @return This builder object + */ + public Builder needsDropping(boolean drop) { + this.drop = drop; + return this; + } + + public SessionDownlink build() { + // Match fields are required + checkNotNull(ueAddress, "UE address must be provided"); + return new SessionDownlink(ueAddress, tunPeerId, buffer, drop); + } + } +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java new file mode 100644 index 00000000000..70db84cc71c --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java @@ -0,0 +1,175 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; +import org.onlab.packet.Ip4Address; + +import java.util.Objects; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A structure representing the UE Session on the UPF-programmable device. + * Provides means to set up the UE Session in the uplink direction. + */ +@Beta +public final class SessionUplink implements UpfEntity { + // Match Keys + private final Ip4Address tunDestAddr; // The tunnel destination address (N3/S1U IPv4 address) + private final Integer teid; // The Tunnel Endpoint ID that this UeSession matches on + + // Action parameters + private final boolean dropping; // Used to convey dropping information + + private SessionUplink(Ip4Address tunDestAddr, + Integer teid, + boolean drop) { + this.tunDestAddr = tunDestAddr; + this.teid = teid; + this.dropping = drop; + } + + public static Builder builder() { + return new Builder(); + } + + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object == null) { + return false; + } + if (getClass() != object.getClass()) { + return false; + } + + SessionUplink that = (SessionUplink) object; + + return this.dropping == that.dropping && + Objects.equals(tunDestAddr, that.tunDestAddr) && + Objects.equals(teid, that.teid); + } + + public int hashCode() { + return Objects.hash(tunDestAddr, teid, dropping); + } + + @Override + public String toString() { + return "UESessionUL{" + matchString() + " -> " + actionString(); + } + + private String matchString() { + return "Match(tun_dst_addr=" + this.tunDstAddr() + ", TEID=" + this.teid() + ")"; + } + + private String actionString() { + StringBuilder actionStrBuilder = new StringBuilder("("); + if (this.needsDropping()) { + actionStrBuilder.append("DROP"); + + } else { + actionStrBuilder.append("FWD"); + } + return actionStrBuilder.append(")").toString(); + } + + /** + * True if this UE Session needs dropping of the uplink traffic. + * + * @return true if the UE Session needs dropping. + */ + public boolean needsDropping() { + return dropping; + } + + /** + * Get the tunnel destination IP address in the uplink UE session (N3/S1U IP address). + * + * @return UE IP address + */ + public Ip4Address tunDstAddr() { + return tunDestAddr; + } + + /** + * Get the identifier of the GTP tunnel that this UE Session rule matches on. + * + * @return GTP tunnel ID + */ + public Integer teid() { + return teid; + } + + @Override + public UpfEntityType type() { + return UpfEntityType.SESSION_UPLINK; + } + + public static class Builder { + private Ip4Address tunDstAddr = null; + private Integer teid = null; + private boolean drop = false; + + public Builder() { + + } + + /** + * Set the tunnel destination IP address (N3/S1U address) that this UE Session rule matches on. + * + * @param tunDstAddr The tunnel destination IP address + * @return This builder object + */ + public Builder withTunDstAddr(Ip4Address tunDstAddr) { + this.tunDstAddr = tunDstAddr; + return this; + } + + /** + * Set the identifier of the GTP tunnel that this UE Session rule matches on. + * + * @param teid GTP tunnel ID + * @return This builder object + */ + public Builder withTeid(Integer teid) { + this.teid = teid; + return this; + } + + + /** + * Sets whether to drop uplink UE session traffic or not. + * + * @param drop True if request to buffer, false otherwise + * @return This builder object + */ + public Builder needsDropping(boolean drop) { + this.drop = drop; + return this; + } + + public SessionUplink build() { + // Match keys are required. + checkNotNull(tunDstAddr, "Tunnel destination must be provided"); + checkNotNull(teid, "TEID must be provided"); + return new SessionUplink(tunDstAddr, teid, drop); + } + } +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PdrStats.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java similarity index 77% rename from core/api/src/main/java/org/onosproject/net/behaviour/upf/PdrStats.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java index eb4ea18df01..4eee3fed421 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/PdrStats.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java @@ -17,21 +17,26 @@ package org.onosproject.net.behaviour.upf; +import com.google.common.annotations.Beta; + import static com.google.common.base.Preconditions.checkNotNull; /** - * A structure for compactly passing PDR counter values for a given counter ID. - * Contains four counts: Ingress Packets, Ingress Bytes, Egress Packets, Egress Bytes + * A structure for compactly passing UPF counter values for a given counter ID. + * Contains four counts: Ingress Packets, Ingress Bytes, Egress Packets, Egress Bytes. + * UpfCounter can be used ONLY on {@code apply} and {@code readAll} calls in the + * {@link UpfDevice} interface. */ -public final class PdrStats { +@Beta +public final class UpfCounter implements UpfEntity { private final int cellId; private final long ingressPkts; private final long ingressBytes; private final long egressPkts; private final long egressBytes; - private PdrStats(int cellId, long ingressPkts, long ingressBytes, - long egressPkts, long egressBytes) { + private UpfCounter(int cellId, long ingressPkts, long ingressBytes, + long egressPkts, long egressBytes) { this.cellId = cellId; this.ingressPkts = ingressPkts; this.ingressBytes = ingressBytes; @@ -45,12 +50,12 @@ public static Builder builder() { @Override public String toString() { - return String.format("PDR-Stats:{ CellID: %d, Ingress:(%dpkts,%dbytes), Egress:(%dpkts,%dbytes) }", + return String.format("Stats:{ CellID: %d, Ingress:(%dpkts,%dbytes), Egress:(%dpkts,%dbytes) }", cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); } /** - * Get the cell ID (index) of the dataplane PDR counter that produced this set of stats. + * Get the cell ID (index) of the dataplane counter that produced this set of stats. * * @return counter cell ID */ @@ -94,6 +99,11 @@ public long getEgressBytes() { return egressBytes; } + @Override + public UpfEntityType type() { + return UpfEntityType.COUNTER; + } + public static class Builder { private Integer cellId; private long ingressPkts; @@ -109,7 +119,7 @@ public Builder() { } /** - * Set the Cell ID (index) of the datalane PDR counter that produced this set of stats. + * Set the Cell ID (index) of the datalane counter that produced this set of stats. * * @param cellId the counter cell ID * @return This builder @@ -120,7 +130,7 @@ public Builder withCellId(int cellId) { } /** - * Set the number of packets and bytes that hit the PDR counter in the dataplane ingress pipeline. + * Set the number of packets and bytes that hit the counter in the dataplane ingress pipeline. * * @param ingressPkts ingress packet count * @param ingressBytes egress packet count @@ -133,7 +143,7 @@ public Builder setIngress(long ingressPkts, long ingressBytes) { } /** - * Set the number of packets and bytes that hit the PDR counter in the dataplane egress pipeline. + * Set the number of packets and bytes that hit the counter in the dataplane egress pipeline. * * @param egressPkts egress packet count * @param egressBytes egress byte count @@ -145,9 +155,9 @@ public Builder setEgress(long egressPkts, long egressBytes) { return this; } - public PdrStats build() { + public UpfCounter build() { checkNotNull(cellId, "CellID must be provided"); - return new PdrStats(cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); + return new UpfCounter(cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java index e0d9fb4f9ba..2b17421cac4 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java @@ -28,157 +28,94 @@ public interface UpfDevice { /** - * Remove any state previously created by this API. + * Removes any state previously created by this API. */ void cleanUp(); /** - * Remove all interfaces currently installed on the UPF-programmable device. - */ - void clearInterfaces(); - - /** - * Remove all UE flows (PDRs, FARs) currently installed on the UPF-programmable device. - */ - void clearFlows(); - - /** - * Get all ForwardingActionRules currently installed on the UPF-programmable device. - * - * @return a collection of installed FARs - * @throws UpfProgrammableException if FARs are unable to be read - */ - Collection getFars() throws UpfProgrammableException; - - /** - * Get all PacketDetectionRules currently installed on the UPF-programmable device. + * Applies the given UPF entity to the UPF-programmable device. * - * @return a collection of installed PDRs - * @throws UpfProgrammableException if PDRs are unable to be read + * @param entity The UPF entity to be applied. + * @throws UpfProgrammableException if the given UPF entity can not be applied or + * the operation is not supported on the given UPF entity. */ - Collection getPdrs() throws UpfProgrammableException; + void apply(UpfEntity entity) throws UpfProgrammableException; /** - * Get all UPF interface lookup entries currently installed on the UPF-programmable device. + * Reads all the UPF entities of the given type from the UPF-programmable device. * - * @return a collection of installed interfaces - * @throws UpfProgrammableException if interfaces are unable to be read + * @param entityType The type of entities to read. + * @return A collection of installed UPF entities. + * @throws UpfProgrammableException if UPF entity type is not available to be read or + * the operation is not supported on the given UPF entity type. */ - Collection getInterfaces() throws UpfProgrammableException; + Collection readAll(UpfEntityType entityType) throws UpfProgrammableException; /** - * Add a Packet Detection Rule (PDR) to the given device. + * Reads the given UPF counter ID from the UPF-programmable device. * - * @param pdr The PDR to be added - * @throws UpfProgrammableException if the PDR cannot be installed, or the counter index is out - * of bounds + * @param counterId The counter ID from which to read. + * @return The content of the UPF counter. + * @throws UpfProgrammableException if the counter ID is out of bounds. */ - void addPdr(PacketDetectionRule pdr) throws UpfProgrammableException; + UpfCounter readCounter(int counterId) throws UpfProgrammableException; /** - * Remove a previously installed Packet Detection Rule (PDR) from the target device. + * Reads the UPF counter contents for all indices that are valid on the + * UPF-programmable device. {@code maxCounterId} parameter is used to limit + * the number of counters retrieved from the UPF. If the limit given is + * larger than the physical limit, the physical limit will be used. + * A limit of -1 removes limitations, and it is equivalent of calling + * {@link #readAll(UpfEntityType)} passing the {@code COUNTER} {@link UpfEntityType}. * - * @param pdr The PDR to be removed - * @throws UpfProgrammableException if the PDR cannot be found - */ - void removePdr(PacketDetectionRule pdr) throws UpfProgrammableException; - - /** - * Add a Forwarding Action Rule (FAR) to the given device. - * - * @param far The FAR to be added - * @throws UpfProgrammableException if the FAR cannot be installed - */ - void addFar(ForwardingActionRule far) throws UpfProgrammableException; - - /** - * Remove a previously installed Forwarding Action Rule (FAR) from the target device. - * - * @param far The FAR to be removed - * @throws UpfProgrammableException if the FAR cannot be found - */ - void removeFar(ForwardingActionRule far) throws UpfProgrammableException; - - /** - * Install a new interface on the UPF device's interface lookup tables. - * - * @param upfInterface the interface to install - * @throws UpfProgrammableException if the interface cannot be installed - */ - void addInterface(UpfInterface upfInterface) throws UpfProgrammableException; - - /** - * Remove a previously installed UPF interface from the target device. - * - * @param upfInterface the interface to be removed - * @throws UpfProgrammableException if the interface cannot be found - */ - void removeInterface(UpfInterface upfInterface) throws UpfProgrammableException; - - /** - * Read the the given cell (Counter index) of the PDR counters from the given device. - * - * @param counterIdx The counter cell index from which to read - * @return A structure containing ingress and egress packet and byte counts for the given - * cellId. - * @throws UpfProgrammableException if the cell ID is out of bounds - */ - PdrStats readCounter(int counterIdx) throws UpfProgrammableException; - - /** - * Return the number of PDR counter cells available. The number of cells in the ingress and - * egress PDR counters are equivalent. - * - * @return PDR counter size + * @param maxCounterId Maximum counter ID to retrieve from the UPF device. + * @return A collection of UPF counters for all valid hardware counter cells. + * @throws UpfProgrammableException if the counters are unable to be read. */ - long pdrCounterSize(); + Collection readCounters(long maxCounterId) throws UpfProgrammableException; /** - * Return the number of maximum number of table entries the FAR table supports. + * Deletes the given UPF entity from the UPF-programmable device. * - * @return the number of FARs that can be installed + * @param entity The UPF entity to be removed. + * @throws UpfProgrammableException if the given UPF entity is not found or + * the operation is not supported on the given UPF entity. */ - long farTableSize(); + void delete(UpfEntity entity) throws UpfProgrammableException; /** - * Return the total number of table entries the downlink and uplink PDR tables support. Both - * tables support an equal number of entries, so the total is twice the size of either. + * Deletes the given UPF entity from the UPF-programmable device. * - * @return the total number of PDRs that can be installed + * @param entityType The UPF entity type to be removed. + * @throws UpfProgrammableException if the given UPF entity is not found or + * the operation is not supported on the given UPF entity. */ - long pdrTableSize(); + void deleteAll(UpfEntityType entityType) throws UpfProgrammableException; /** - * Read the counter contents for all cell indices that are valid on the hardware switch. - * {@code maxCounterId} parameter is used to limit the number of counters - * retrieved from the UPF device. If the limit given is larger than the - * physical limit, the physical limit will be used. A limit of -1 removes - * limitations. - * - * @param maxCounterId Maximum counter ID to retrieve from the UPF device. - * @return A collection of counter values for all valid hardware counter cells - * @throws UpfProgrammableException if the counters are unable to be read + * Returns the total number of UPF entities of the given type supported by + * the UPF-programmable device. For entities that have a direction,returns + * the total amount of entities including both the downlink and the uplink + * directions. + * @param entityType The type of UPF programmable entities to retrieve the size from. + * @return The total number of supported UPF entities. + * @throws UpfProgrammableException if the operation is not supported on the given UPF entity. */ - Collection readAllCounters(long maxCounterId) throws UpfProgrammableException; + long tableSize(UpfEntityType entityType) throws UpfProgrammableException; /** * Instructs the UPF-programmable device to use GTP-U extension PDU Session Container (PSC) when * doing encap of downlink packets, with the given QoS Flow Identifier (QFI). * - * @param defaultQfi QFI to be used by default for all encapped packets. * @throws UpfProgrammableException if operation is not available */ - // FIXME: remove once we expose QFI in logical pipeline - // QFI should be set by the SMF using PFCP - void enablePscEncap(int defaultQfi) throws UpfProgrammableException; + void enablePscEncap() throws UpfProgrammableException; /** - * Disable PSC encap previously enabled with {@link #enablePscEncap(int)}. + * Disable PSC encap previously enabled with {@link #enablePscEncap()}. * * @throws UpfProgrammableException if operation is not available */ - // FIXME: remove once we expose QFI in logical pipeline - // QFI should be set by the SMF using PFCP void disablePscEncap() throws UpfProgrammableException; /** diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java similarity index 66% rename from pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java index 42591786844..ad1fbaae890 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java @@ -14,7 +14,19 @@ * limitations under the License. */ +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; + /** - * UPF programmable behaviour implementation for fabric-v1model. + * Abstraction of a UPF entity used to interact with the UPF-programmable device. */ -package org.onosproject.pipelines.fabric.impl.behaviour.upf; +@Beta +public interface UpfEntity { + /** + * Returns the type of this entity. + * + * @return entity type + */ + UpfEntityType type(); +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java new file mode 100644 index 00000000000..7ec3b191309 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -0,0 +1,49 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; + +/** + * Type of UPF entity. + */ +@Beta +public enum UpfEntityType { + INTERFACE("interface"), + TERMINATION_DOWNLINK("termination_downlink"), + TERMINATION_UPLINK("termination_uplink"), + SESSION_DOWNLINK("session_downlink"), + SESSION_UPLINK("session_downlink"), + TUNNEL_PEER("tunnel_peer"), + COUNTER("counter"); + + private final String humanReadableName; + + UpfEntityType(String humanReadableName) { + this.humanReadableName = humanReadableName; + } + + /** + * Returns a human readable representation of this UPF entity type (useful + * for logging). + * + * @return string + */ + public String humanReadableName() { + return humanReadableName; + } +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java index 3fee11a1b3b..f697d15797f 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java @@ -16,6 +16,7 @@ package org.onosproject.net.behaviour.upf; +import com.google.common.annotations.Beta; import org.onlab.packet.Ip4Address; import org.onlab.packet.Ip4Prefix; @@ -26,7 +27,8 @@ /** * A UPF device interface, such as a S1U or UE IP address pool. */ -public final class UpfInterface { +@Beta +public final class UpfInterface implements UpfEntity { private final Ip4Prefix prefix; private final Type type; @@ -134,7 +136,6 @@ public boolean isCore() { return type == Type.CORE; } - /** * Check if this UPF interface is for receiving buffered packets as they are released from the dbuf * buffering device. @@ -154,6 +155,11 @@ public Ip4Prefix getPrefix() { return this.prefix; } + @Override + public UpfEntityType type() { + return UpfEntityType.INTERFACE; + } + public enum Type { /** * Unknown UPF interface type. diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java index 159adb0a671..052084e3fed 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java @@ -30,13 +30,12 @@ public interface UpfProgrammable extends HandlerBehaviour, UpfDevice { /** * Apps are expected to call this method as the first one when they are ready - * to install PDRs and FARs. + * to install any UPF entity. * * @return True if initialized, false otherwise. */ boolean init(); - /** * Checks if the given flow rule has been generated by this UPF behaviour. * diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammableException.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammableException.java index 7daa80627aa..96f8c85ea35 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammableException.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammableException.java @@ -16,14 +16,20 @@ package org.onosproject.net.behaviour.upf; +import com.google.common.annotations.Beta; + +import java.util.Optional; + /** * An exception indicating a an error happened in the UPF programmable behaviour. * Possible errors include the attempted insertion of a malformed flow rule, the * reading or writing of an out-of-bounds counter cell, the deletion of a non-existent * flow rule, and the attempted insertion of a flow rule into a full table. */ +@Beta public class UpfProgrammableException extends Exception { private final Type type; + private final UpfEntityType entityType; public enum Type { /** @@ -31,13 +37,13 @@ public enum Type { */ UNKNOWN, /** - * The target table is at capacity. + * The target entity is at capacity. */ - TABLE_EXHAUSTED, + ENTITY_EXHAUSTED, /** - * A provided counter cell index was out of range. + * A provided index was out of range. */ - COUNTER_INDEX_OUT_OF_RANGE, + ENTITY_OUT_OF_RANGE, /** * The UpfProgrammable implementation doesn't support the operation. */ @@ -52,6 +58,7 @@ public enum Type { public UpfProgrammableException(String message) { super(message); this.type = Type.UNKNOWN; + this.entityType = null; } /** @@ -63,6 +70,20 @@ public UpfProgrammableException(String message) { public UpfProgrammableException(String message, Type type) { super(message); this.type = type; + this.entityType = null; + } + + /** + * Creates a new exception for the given message, type and entity type. + * + * @param message exception message + * @param type exception type + * @param entityType entity type + */ + public UpfProgrammableException(String message, Type type, UpfEntityType entityType) { + super(message); + this.type = type; + this.entityType = entityType; } /** @@ -73,4 +94,13 @@ public UpfProgrammableException(String message, Type type) { public Type getType() { return type; } + + /** + * Get the type of the entity that generated the exception. + * + * @return entity type + */ + public Optional getEntityType() { + return Optional.ofNullable(entityType); + } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java new file mode 100644 index 00000000000..3bc9a91b059 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -0,0 +1,252 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; +import org.onlab.packet.Ip4Address; + +import java.util.Objects; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A structure representing the UE Termination in the downlink direction on the + * UPF-programmable device. + * Provides means to configure the traffic behavior (e.g. set Traffic Class, GTP TEID, or QFI). + */ +@Beta +public final class UpfTerminationDownlink implements UpfEntity { + // Match Keys + private final Ip4Address ueSessionId; // UE Session ID, use UE IP address to uniquely identify a session. + // Action parameters + private final Integer ctrId; // Counter ID unique to this UPF Termination Rule + private final Byte trafficClass; + private final Integer teid; // Tunnel Endpoint Identifier + private final Byte qfi; // QoS Flow Identifier + private final boolean dropping; + + private UpfTerminationDownlink(Ip4Address ueSessionId, Integer ctrId, Byte trafficClass, + Integer teid, Byte qfi, boolean dropping) { + this.ueSessionId = ueSessionId; + this.ctrId = ctrId; + this.trafficClass = trafficClass; + this.teid = teid; + this.qfi = qfi; + this.dropping = dropping; + } + + public static Builder builder() { + return new Builder(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + UpfTerminationDownlink that = (UpfTerminationDownlink) obj; + + // Safe comparisons between potentially null objects + return this.dropping == that.dropping && + Objects.equals(this.ueSessionId, that.ueSessionId) && + Objects.equals(this.ctrId, that.ctrId) && + Objects.equals(this.trafficClass, that.trafficClass) && + Objects.equals(this.teid, that.teid) && + Objects.equals(this.qfi, that.qfi); + } + + @Override + public int hashCode() { + return Objects.hash(ueSessionId, ctrId, trafficClass, teid, qfi, dropping); + } + + /** + * Get UE Session ID associated with UPF Termination rule. + * + * @return UE Session ID + */ + public Ip4Address ueSessionId() { + return ueSessionId; + } + + /** + * Get PDR Counter ID associated with UPF Termination rule. + * + * @return PDR counter cell ID + */ + public Integer counterId() { + return ctrId; + } + + /** + * Get Traffic Class set by this UPF Termination rule. + * + * @return Traffic Class + */ + public Byte trafficClass() { + return trafficClass; + } + + /** + * Get GTP TEID set by this UPF Termination rule. + * + * @return GTP tunnel ID + */ + public Integer teid() { + return teid; + } + + /** + * Get QoS Flow Identifier set by this UPF Termination rule. + * + * @return QoS Flow Identifier + */ + public Byte qfi() { + return qfi; + } + + /** + * True if this UPF Termination needs to drop traffic. + * + * @return true if the UPF Termination needs dropping. + */ + public boolean needsDropping() { + return dropping; + } + + @Override + public UpfEntityType type() { + return UpfEntityType.TERMINATION_DOWNLINK; + } + + @Override + public String toString() { + return "TerminationUL{" + matchString() + "->" + actionString() + "}"; + } + + private String matchString() { + return "Match(ue_addr=" + this.ueSessionId() + ")"; + } + + private String actionString() { + return "(TEID=" + this.teid() + + ", CTR_ID=" + this.counterId() + + ", QFI=" + this.qfi() + + ", TC=" + this.trafficClass() + + ")"; + } + + public static class Builder { + private Ip4Address ueSessionId = null; + private Integer ctrId = null; + private Byte trafficClass = null; + private Integer teid = null; + private Byte qfi = null; + private boolean drop = false; + + public Builder() { + + } + + /** + * Set the ID of the UE session. + * + * @param ueSessionId UE session ID + * @return This builder object + */ + public Builder withUeSessionId(Ip4Address ueSessionId) { + this.ueSessionId = ueSessionId; + return this; + } + + /** + * Set the dataplane counter cell ID. + * + * @param ctrId PDR counter cell ID + * @return This builder object + */ + public Builder withCounterId(int ctrId) { + this.ctrId = ctrId; + return this; + } + + /** + * Set the Traffic Class. + * + * @param trafficClass Traffic Class + * @return This builder object + */ + public Builder withTrafficClass(byte trafficClass) { + this.trafficClass = trafficClass; + return this; + } + + /** + * Set the identifier of the unidirectional GTP tunnel that should be used for the UE Session. + * + * @param teid tunnel ID + * @return This builder object + */ + public Builder withTeid(Integer teid) { + this.teid = teid; + return this; + } + + /** + * Set the QoS Flow Identifier. + * + * @param qfi GTP Tunnel QFI + * @return This builder object + */ + public Builder withQfi(byte qfi) { + this.qfi = qfi; + return this; + } + + /** + * Sets whether to drop downlink UPF termination traffic or not. + * + * @param drop True if request to buffer, false otherwise + * @return This builder object + */ + public Builder needsDropping(boolean drop) { + this.drop = drop; + return this; + } + + + public UpfTerminationDownlink build() { + // Match fields must be provided + checkNotNull(ueSessionId, "UE session ID must be provided"); + + checkNotNull(ctrId, "Counter ID must be provided"); + // TODO: should we verify that when dropping no other fields are provided + return new UpfTerminationDownlink( + this.ueSessionId, this.ctrId, this.trafficClass, this.teid, + this.qfi, this.drop + ); + } + + } + +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java new file mode 100644 index 00000000000..74dbc0132ce --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -0,0 +1,197 @@ +/* + * Copyright 2021-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; +import org.onlab.packet.Ip4Address; + +import java.util.Objects; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A structure representing the UE Termination in the uplink direction on the + * UPF-programmable device. + * Provides means to configure the traffic behavior (e.g. set Traffic Class). + */ +@Beta +public final class UpfTerminationUplink implements UpfEntity { + // Match Keys + private final Ip4Address ueSessionId; // UE Session ID, use UE IP address to uniquely identify a session. + // Action parameters + private final Integer ctrId; // Counter ID unique to this UPF Termination Rule + private final Byte trafficClass; + private final boolean dropping; + + private UpfTerminationUplink(Ip4Address ueSessionId, Integer ctrId, Byte trafficClass, + boolean dropping) { + this.ueSessionId = ueSessionId; + this.ctrId = ctrId; + this.trafficClass = trafficClass; + this.dropping = dropping; + } + + public static Builder builder() { + return new Builder(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + UpfTerminationUplink that = (UpfTerminationUplink) obj; + + // Safe comparisons between potentially null objects + return this.dropping == that.dropping && + Objects.equals(this.ueSessionId, that.ueSessionId) && + Objects.equals(this.ctrId, that.ctrId) && + Objects.equals(this.trafficClass, that.trafficClass); + } + + @Override + public int hashCode() { + return Objects.hash(ueSessionId, ctrId, trafficClass, dropping); + } + + /** + * Get UE Session ID associated with UPF Termination rule. + * + * @return UE Session ID + */ + public Ip4Address ueSessionId() { + return ueSessionId; + } + + /** + * Get PDR Counter ID associated with UPF Termination rule. + * + * @return PDR counter cell ID + */ + public Integer counterId() { + return ctrId; + } + + /** + * Get Traffic Class set by this UPF Termination rule. + * + * @return Traffic Class + */ + public Byte trafficClass() { + return trafficClass; + } + + /** + * True if this UPF Termination needs to drop traffic. + * + * @return true if the UPF Termination needs dropping. + */ + public boolean needsDropping() { + return dropping; + } + + @Override + public UpfEntityType type() { + return UpfEntityType.TERMINATION_UPLINK; + } + + @Override + public String toString() { + return "TerminationDL{" + matchString() + "->" + actionString() + "}"; + } + + private String matchString() { + return "Match(ue_addr=" + this.ueSessionId() + ")"; + } + + private String actionString() { + return "(CTR_ID=" + this.counterId() + ", TC=" + this.trafficClass() + ")"; + } + + public static class Builder { + private Ip4Address ueSessionId = null; + private Integer ctrId = null; + private Byte trafficClass = null; + private boolean dropping = false; + + public Builder() { + + } + + /** + * Set the ID of the UE session. + * + * @param ueSessionId UE session ID + * @return This builder object + */ + public Builder withUeSessionId(Ip4Address ueSessionId) { + this.ueSessionId = ueSessionId; + return this; + } + + /** + * Set the dataplane counter cell ID. + * + * @param ctrId PDR counter cell ID + * @return This builder object + */ + public Builder withCounterId(int ctrId) { + this.ctrId = ctrId; + return this; + } + + /** + * Set the Traffic Class. + * + * @param trafficClass Traffic Class + * @return This builder object + */ + public Builder withTrafficClass(byte trafficClass) { + this.trafficClass = trafficClass; + return this; + } + + /** + * Sets whether to drop uplink UPF termination traffic or not. + * + * @param dropping True if request to buffer, false otherwise + * @return This builder object + */ + public Builder needsDropping(boolean dropping) { + this.dropping = dropping; + return this; + } + + public UpfTerminationUplink build() { + // Match fields must be provided + checkNotNull(ueSessionId, "UE session ID must be provided"); + + checkNotNull(ctrId, "Counter ID must be provided"); + // TODO: should we verify that when dropping no other fields are provided + return new UpfTerminationUplink( + this.ueSessionId, this.ctrId, this.trafficClass, this.dropping); + } + + } + +} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java index 7d1ee4e3068..e17b48e5099 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java @@ -19,8 +19,6 @@ import org.onosproject.net.behaviour.inbandtelemetry.IntProgrammable; import org.onosproject.net.behaviour.BngProgrammable; -import org.onosproject.net.behaviour.upf.UpfProgrammable; -import org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfProgrammable; import org.onosproject.net.behaviour.Pipeliner; import org.onosproject.net.pi.model.DefaultPiPipeconf; import org.onosproject.net.pi.model.PiPipeconf; @@ -101,11 +99,6 @@ static PiPipeconf build( if (profileName.endsWith(BNG_PROFILE_SUFFIX)) { pipeconfBuilder.addBehaviour(BngProgrammable.class, FabricBngProgrammable.class); } - // Add UpfProgrammable behavior for UPF-enabled pipelines. - if (profileName.contains(UPF_PROFILE_SUFFIX) || - profileName.endsWith(FULL_PROFILE_SUFFIX)) { - pipeconfBuilder.addBehaviour(UpfProgrammable.class, FabricUpfProgrammable.class); - } return pipeconfBuilder.build(); } diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/ReadInternalUpfStoreCommand.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/ReadInternalUpfStoreCommand.java deleted file mode 100644 index 31dd9759388..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/ReadInternalUpfStoreCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.cli; - -import org.apache.karaf.shell.api.action.Command; -import org.apache.karaf.shell.api.action.Option; -import org.apache.karaf.shell.api.action.lifecycle.Service; -import org.onosproject.cli.AbstractShellCommand; -import org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfStore; -import org.onosproject.pipelines.fabric.impl.behaviour.upf.UpfRuleIdentifier; - -import java.util.Map; - -/** - * Read internal UPF store of fabric. - */ -@Service -@Command(scope = "fabric", name = "upf-read-internal-store", - description = "Print internal UPF stores") -public class ReadInternalUpfStoreCommand extends AbstractShellCommand { - @Option(name = "-v", aliases = "--verbose", - description = "Print more detail of each entry", - required = false, multiValued = false) - private boolean verbose = false; - - @Override - protected void doExecute() { - FabricUpfStore upfStore = get(FabricUpfStore.class); - - if (upfStore == null) { - print("Error: FabricUpfStore is null"); - return; - } - - Map reverseFarIdMap = upfStore.getReverseFarIdMap(); - print("reverseFarIdMap size: " + reverseFarIdMap.size()); - if (verbose) { - reverseFarIdMap.entrySet().forEach(entry -> print(entry.toString())); - } - } -} \ No newline at end of file diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/package-info.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/package-info.java deleted file mode 100644 index f78dd7a4d0c..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/cli/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * CLI commands for fabric UPF. - */ -package org.onosproject.pipelines.fabric.impl.behaviour.cli; diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java deleted file mode 100644 index 7045c2d043c..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/DistributedFabricUpfStore.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.hash.HashCode; -import com.google.common.hash.HashFunction; -import com.google.common.hash.Hashing; -import org.onlab.util.ImmutableByteSequence; -import org.onlab.util.KryoNamespace; -import org.onosproject.store.serializers.KryoNamespaces; -import org.onosproject.store.service.EventuallyConsistentMap; -import org.onosproject.store.service.StorageService; -import org.onosproject.store.service.WallClockTimestamp; -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Deactivate; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.component.annotations.ReferenceCardinality; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Map; -import java.util.stream.Collectors; - -/** - * Distributed implementation of FabricUpfStore. - */ -@Component(immediate = true, service = FabricUpfStore.class) -public final class DistributedFabricUpfStore implements FabricUpfStore { - - private final Logger log = LoggerFactory.getLogger(getClass()); - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - protected StorageService storageService; - - protected static final String FAR_ID_MAP_NAME = "fabric-upf-far-id"; - protected static final KryoNamespace.Builder SERIALIZER = KryoNamespace.newBuilder() - .register(KryoNamespaces.API) - .register(UpfRuleIdentifier.class); - - // EC map to remember the mapping far_id -> rule_id this is mostly used during reads, - // it can be definitely removed by simplifying the logical pipeline - protected EventuallyConsistentMap reverseFarIdMap; - - @Activate - protected void activate() { - // Allow unit test to inject reverseFarIdMap here. - if (storageService != null) { - this.reverseFarIdMap = storageService.eventuallyConsistentMapBuilder() - .withName(FAR_ID_MAP_NAME) - .withSerializer(SERIALIZER) - .withTimestampProvider((k, v) -> new WallClockTimestamp()) - .build(); - } - - log.info("Started"); - } - - @Deactivate - protected void deactivate() { - reverseFarIdMap.destroy(); - - log.info("Stopped"); - } - - @Override - public void reset() { - reverseFarIdMap.clear(); - } - - @Override - public Map getReverseFarIdMap() { - return reverseFarIdMap.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - @Override - public int globalFarIdOf(UpfRuleIdentifier farIdPair) { - int globalFarId = getGlobalFarIdOf(farIdPair); - reverseFarIdMap.put(globalFarId, farIdPair); - log.info("{} translated to GlobalFarId={}", farIdPair, globalFarId); - return globalFarId; - } - - @Override - public int removeGlobalFarId(UpfRuleIdentifier farIdPair) { - int globalFarId = getGlobalFarIdOf(farIdPair); - reverseFarIdMap.remove(globalFarId); - return globalFarId; - } - - @Override - public int globalFarIdOf(ImmutableByteSequence pfcpSessionId, int sessionLocalFarId) { - UpfRuleIdentifier farId = new UpfRuleIdentifier(pfcpSessionId, sessionLocalFarId); - return globalFarIdOf(farId); - } - - @Override - public int removeGlobalFarId(ImmutableByteSequence pfcpSessionId, int sessionLocalFarId) { - UpfRuleIdentifier farId = new UpfRuleIdentifier(pfcpSessionId, sessionLocalFarId); - return removeGlobalFarId(farId); - } - - @Override - public UpfRuleIdentifier localFarIdOf(int globalFarId) { - return reverseFarIdMap.get(globalFarId); - } - - // Compute global far id by hashing the pfcp session id and the session local far - private int getGlobalFarIdOf(UpfRuleIdentifier farIdPair) { - HashFunction hashFunction = Hashing.murmur3_32(); - HashCode hashCode = hashFunction.newHasher() - .putInt(farIdPair.getSessionLocalId()) - .putBytes(farIdPair.getPfcpSessionId().asArray()) - .hash(); - return hashCode.asInt(); - } - -} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java deleted file mode 100644 index 310f28dacf1..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammable.java +++ /dev/null @@ -1,601 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import org.onlab.packet.Ip4Prefix; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.drivers.p4runtime.AbstractP4RuntimeHandlerBehaviour; -import org.onosproject.net.PortNumber; -import org.onosproject.net.behaviour.upf.ForwardingActionRule; -import org.onosproject.net.behaviour.upf.PacketDetectionRule; -import org.onosproject.net.behaviour.upf.PdrStats; -import org.onosproject.net.behaviour.upf.UpfInterface; -import org.onosproject.net.behaviour.upf.UpfProgrammable; -import org.onosproject.net.behaviour.upf.UpfProgrammableException; -import org.onosproject.net.flow.DefaultFlowRule; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.flow.criteria.PiCriterion; -import org.onosproject.net.packet.DefaultOutboundPacket; -import org.onosproject.net.packet.OutboundPacket; -import org.onosproject.net.packet.PacketService; -import org.onosproject.net.pi.model.PiCounterId; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiTableId; -import org.onosproject.net.pi.model.PiTableModel; -import org.onosproject.net.pi.runtime.PiCounterCell; -import org.onosproject.net.pi.runtime.PiCounterCellHandle; -import org.onosproject.net.pi.runtime.PiCounterCellId; -import org.onosproject.pipelines.fabric.impl.FabricPipeconfLoader; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - -import static org.onosproject.net.behaviour.upf.UpfProgrammableException.Type.UNSUPPORTED_OPERATION; -import static org.onosproject.net.pi.model.PiCounterType.INDIRECT; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_EGRESS_SPGW_PDR_COUNTER; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_FARS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_INTERFACES; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_PDR_COUNTER; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_UPLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; - -/** - * Implementation of a UPF programmable device behavior. - */ -public class FabricUpfProgrammable extends AbstractP4RuntimeHandlerBehaviour - implements UpfProgrammable { - - private final Logger log = LoggerFactory.getLogger(getClass()); - private static final int DEFAULT_PRIORITY = 128; - private static final long DEFAULT_P4_DEVICE_ID = 1; - - protected FlowRuleService flowRuleService; - protected PacketService packetService; - protected FabricUpfStore fabricUpfStore; - protected FabricUpfTranslator upfTranslator; - - private long farTableSize; - private long encappedPdrTableSize; - private long unencappedPdrTableSize; - private long pdrCounterSize; - - private ApplicationId appId; - - @Override - protected boolean setupBehaviour(String opName) { - // Already initialized. - if (appId != null) { - return true; - } - - if (!super.setupBehaviour(opName)) { - return false; - } - - if (!computeHardwareResourceSizes()) { - // error message will be printed by computeHardwareResourceSizes() - return false; - } - - flowRuleService = handler().get(FlowRuleService.class); - packetService = handler().get(PacketService.class); - fabricUpfStore = handler().get(FabricUpfStore.class); - upfTranslator = new FabricUpfTranslator(fabricUpfStore); - final CoreService coreService = handler().get(CoreService.class); - appId = coreService.getAppId(FabricPipeconfLoader.PIPELINE_APP_NAME_UPF); - if (appId == null) { - log.warn("Application ID is null. Cannot initialize behaviour."); - return false; - } - - var capabilities = new FabricCapabilities(pipeconf); - if (!capabilities.supportUpf()) { - log.warn("Pipeconf {} on {} does not support UPF capabilities, " + - "cannot perform {}", - pipeconf.id(), deviceId, opName); - return false; - } - return true; - } - - @Override - public boolean init() { - if (setupBehaviour("init()")) { - log.info("UpfProgrammable initialized for appId {} and deviceId {}", appId, deviceId); - return true; - } - return false; - } - - @Override - public boolean fromThisUpf(FlowRule flowRule) { - return flowRule.deviceId().equals(this.deviceId) && - flowRule.appId() == appId.id(); - } - - /** - * Grab the capacities for the PDR and FAR tables from the pipeconf. Runs only once, on initialization. - * - * @return true if resource is fetched successfully, false otherwise. - * @throws IllegalStateException when FAR or PDR table can't be found in the pipeline model. - */ - private boolean computeHardwareResourceSizes() { - long farTableSize = 0; - long encappedPdrTableSize = 0; - long unencappedPdrTableSize = 0; - - // Get table sizes of interest - for (PiTableModel piTable : pipeconf.pipelineModel().tables()) { - if (piTable.id().equals(FABRIC_INGRESS_SPGW_UPLINK_PDRS)) { - encappedPdrTableSize = piTable.maxSize(); - } else if (piTable.id().equals(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS)) { - unencappedPdrTableSize = piTable.maxSize(); - } else if (piTable.id().equals(FABRIC_INGRESS_SPGW_FARS)) { - farTableSize = piTable.maxSize(); - } - } - if (encappedPdrTableSize == 0) { - throw new IllegalStateException("Unable to find uplink PDR table in pipeline model."); - } - if (unencappedPdrTableSize == 0) { - throw new IllegalStateException("Unable to find downlink PDR table in pipeline model."); - } - if (encappedPdrTableSize != unencappedPdrTableSize) { - log.warn("The uplink and downlink PDR tables don't have equal sizes! Using the minimum of the two."); - } - if (farTableSize == 0) { - throw new IllegalStateException("Unable to find FAR table in pipeline model."); - } - // Get counter sizes of interest - long ingressCounterSize = 0; - long egressCounterSize = 0; - for (PiCounterModel piCounter : pipeconf.pipelineModel().counters()) { - if (piCounter.id().equals(FABRIC_INGRESS_SPGW_PDR_COUNTER)) { - ingressCounterSize = piCounter.size(); - } else if (piCounter.id().equals(FABRIC_EGRESS_SPGW_PDR_COUNTER)) { - egressCounterSize = piCounter.size(); - } - } - if (ingressCounterSize != egressCounterSize) { - log.warn("PDR ingress and egress counter sizes are not equal! Using the minimum of the two."); - } - this.farTableSize = farTableSize; - this.encappedPdrTableSize = encappedPdrTableSize; - this.unencappedPdrTableSize = unencappedPdrTableSize; - this.pdrCounterSize = Math.min(ingressCounterSize, egressCounterSize); - return true; - } - - @Override - public void enablePscEncap(int defaultQfi) throws UpfProgrammableException { - throw new UpfProgrammableException("PSC encap is not supported in fabric-v1model", - UNSUPPORTED_OPERATION); - } - - @Override - public void disablePscEncap() throws UpfProgrammableException { - throw new UpfProgrammableException("PSC encap is not supported in fabric-v1model", - UNSUPPORTED_OPERATION); - } - - @Override - public void sendPacketOut(ByteBuffer data) { - if (!setupBehaviour("sendPacketOut()")) { - return; - } - final OutboundPacket pkt = new DefaultOutboundPacket( - deviceId, - // Use TABLE logical port to have pkt routed via pipeline tables. - DefaultTrafficTreatment.builder() - .setOutput(PortNumber.TABLE) - .build(), - data); - packetService.emit(pkt); - } - - @Override - public void cleanUp() { - if (!setupBehaviour("cleanUp()")) { - return; - } - log.info("Clearing all UPF-related table entries."); - // Getting flow entries by device ID and filtering by Application ID - // is more efficient than getting by Application ID and filtering for a - // device ID. - List flowEntriesToRemove = StreamSupport.stream( - flowRuleService.getFlowEntries(deviceId).spliterator(), false) - .filter(flowEntry -> flowEntry.appId() == appId.id()).collect(Collectors.toList()); - flowRuleService.removeFlowRules(flowEntriesToRemove.toArray(new FlowRule[0])); - fabricUpfStore.reset(); - } - - @Override - public void clearInterfaces() { - if (!setupBehaviour("clearInterfaces()")) { - return; - } - log.info("Clearing all UPF interfaces."); - for (FlowRule entry : flowRuleService.getFlowEntries(deviceId)) { - if (upfTranslator.isFabricInterface(entry)) { - flowRuleService.removeFlowRules(entry); - } - } - } - - @Override - public void clearFlows() { - if (!setupBehaviour("clearFlows()")) { - return; - } - log.info("Clearing all UE sessions."); - int pdrsCleared = 0; - int farsCleared = 0; - for (FlowRule entry : flowRuleService.getFlowEntries(deviceId)) { - if (upfTranslator.isFabricPdr(entry)) { - pdrsCleared++; - flowRuleService.removeFlowRules(entry); - } else if (upfTranslator.isFabricFar(entry)) { - farsCleared++; - flowRuleService.removeFlowRules(entry); - } - } - log.info("Cleared {} PDRs and {} FARS.", pdrsCleared, farsCleared); - } - - - @Override - public Collection readAllCounters(long maxCounterId) { - if (!setupBehaviour("readAllCounters()")) { - return null; - } - - long counterSize = pdrCounterSize(); - if (maxCounterId != -1) { - counterSize = Math.min(maxCounterId, counterSize); - } - - // Prepare PdrStats object builders, one for each counter ID currently in use - Map pdrStatBuilders = Maps.newHashMap(); - for (int cellId = 0; cellId < counterSize; cellId++) { - pdrStatBuilders.put(cellId, PdrStats.builder().withCellId(cellId)); - } - - // Generate the counter cell IDs. - Set counterIds = ImmutableSet.of( - FABRIC_INGRESS_SPGW_PDR_COUNTER, - FABRIC_EGRESS_SPGW_PDR_COUNTER - ); - - // Query the device. - Collection counterEntryResponse = client.read( - DEFAULT_P4_DEVICE_ID, pipeconf) - .counterCells(counterIds) - .submitSync() - .all(PiCounterCell.class); - - // Process response. - counterEntryResponse.forEach(counterCell -> { - if (counterCell.cellId().counterType() != INDIRECT) { - log.warn("Invalid counter data type {}, skipping", counterCell.cellId().counterType()); - return; - } - if (!pdrStatBuilders.containsKey((int) counterCell.cellId().index())) { - // Most likely Up4config.maxUes() is set to a value smaller than what the switch - // pipeline can hold. - log.debug("Unrecognized index {} when reading all counters, " + - "that's expected if we are manually limiting maxUes", counterCell); - return; - } - PdrStats.Builder statsBuilder = pdrStatBuilders.get((int) counterCell.cellId().index()); - if (counterCell.cellId().counterId().equals(FABRIC_INGRESS_SPGW_PDR_COUNTER)) { - statsBuilder.setIngress(counterCell.data().packets(), - counterCell.data().bytes()); - } else if (counterCell.cellId().counterId().equals(FABRIC_EGRESS_SPGW_PDR_COUNTER)) { - statsBuilder.setEgress(counterCell.data().packets(), - counterCell.data().bytes()); - } else { - log.warn("Unrecognized counter ID {}, skipping", counterCell); - } - }); - - return pdrStatBuilders - .values() - .stream() - .map(PdrStats.Builder::build) - .collect(Collectors.toList()); - } - - @Override - public long pdrCounterSize() { - if (!setupBehaviour("pdrCounterSize()")) { - return -1; - } - return pdrCounterSize; - } - - @Override - public long farTableSize() { - if (!setupBehaviour("farTableSize()")) { - return -1; - } - return farTableSize; - } - - @Override - public long pdrTableSize() { - if (!setupBehaviour("pdrTableSize()")) { - return -1; - } - return Math.min(encappedPdrTableSize, unencappedPdrTableSize) * 2; - } - - @Override - public PdrStats readCounter(int cellId) throws UpfProgrammableException { - if (!setupBehaviour("readCounter()")) { - return null; - } - if (cellId >= pdrCounterSize() || cellId < 0) { - throw new UpfProgrammableException("Requested PDR counter cell index is out of bounds.", - UpfProgrammableException.Type.COUNTER_INDEX_OUT_OF_RANGE); - } - PdrStats.Builder stats = PdrStats.builder().withCellId(cellId); - - // Make list of cell handles we want to read. - List counterCellHandles = List.of( - PiCounterCellHandle.of(deviceId, - PiCounterCellId.ofIndirect(FABRIC_INGRESS_SPGW_PDR_COUNTER, cellId)), - PiCounterCellHandle.of(deviceId, - PiCounterCellId.ofIndirect(FABRIC_EGRESS_SPGW_PDR_COUNTER, cellId))); - - // Query the device. - Collection counterEntryResponse = client.read( - DEFAULT_P4_DEVICE_ID, pipeconf) - .handles(counterCellHandles).submitSync() - .all(PiCounterCell.class); - - // Process response. - counterEntryResponse.forEach(counterCell -> { - if (counterCell.cellId().counterType() != INDIRECT) { - log.warn("Invalid counter data type {}, skipping", counterCell.cellId().counterType()); - return; - } - if (cellId != counterCell.cellId().index()) { - log.warn("Unrecognized counter index {}, skipping", counterCell); - return; - } - if (counterCell.cellId().counterId().equals(FABRIC_INGRESS_SPGW_PDR_COUNTER)) { - stats.setIngress(counterCell.data().packets(), counterCell.data().bytes()); - } else if (counterCell.cellId().counterId().equals(FABRIC_EGRESS_SPGW_PDR_COUNTER)) { - stats.setEgress(counterCell.data().packets(), counterCell.data().bytes()); - } else { - log.warn("Unrecognized counter ID {}, skipping", counterCell); - } - }); - return stats.build(); - } - - - @Override - public void addPdr(PacketDetectionRule pdr) throws UpfProgrammableException { - if (!setupBehaviour("addPdr()")) { - return; - } - if (pdr.counterId() >= pdrCounterSize() || pdr.counterId() < 0) { - throw new UpfProgrammableException("Counter cell index referenced by PDR is out of bounds.", - UpfProgrammableException.Type.COUNTER_INDEX_OUT_OF_RANGE); - } - FlowRule fabricPdr = upfTranslator.pdrToFabricEntry(pdr, deviceId, appId, DEFAULT_PRIORITY); - log.info("Installing {}", pdr.toString()); - flowRuleService.applyFlowRules(fabricPdr); - log.debug("PDR added with flowID {}", fabricPdr.id().value()); - } - - - @Override - public void addFar(ForwardingActionRule far) throws UpfProgrammableException { - if (!setupBehaviour("addFar()")) { - return; - } - FlowRule fabricFar = upfTranslator.farToFabricEntry(far, deviceId, appId, DEFAULT_PRIORITY); - log.info("Installing {}", far.toString()); - flowRuleService.applyFlowRules(fabricFar); - log.debug("FAR added with flowID {}", fabricFar.id().value()); - } - - @Override - public void addInterface(UpfInterface upfInterface) throws UpfProgrammableException { - if (!setupBehaviour("addInterface()")) { - return; - } - FlowRule flowRule = upfTranslator.interfaceToFabricEntry(upfInterface, deviceId, appId, DEFAULT_PRIORITY); - log.info("Installing {}", upfInterface); - flowRuleService.applyFlowRules(flowRule); - log.debug("Interface added with flowID {}", flowRule.id().value()); - // By default we enable UE-to-UE communication on the UE subnet identified by the CORE interface. - // TODO: allow enabling/disabling UE-to-UE via netcfg or other API. - log.warn("UE-to-UE traffic is not supported in fabric-v1model"); - } - - private boolean removeEntry(PiCriterion match, PiTableId tableId, boolean failSilent) - throws UpfProgrammableException { - FlowRule entry = DefaultFlowRule.builder() - .forDevice(deviceId).fromApp(appId).makePermanent() - .forTable(tableId) - .withSelector(DefaultTrafficSelector.builder().matchPi(match).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - try { - flowRuleService.removeFlowRules(entry); - // TODO in future we may need to send other notifications to the pfcp agent - //if (!failSilent) { - // throw new UpfProgrammableException("Match criterion " + match.toString() + - // " not found in table " + tableId.toString()); - //} - return true; - } catch (Exception e) { - log.error("Exception thrown while removing flows", e); - } - // Assumes that the ONOS state is ok and the pfcp agent - // is not asking to remove wrong flows - if (!failSilent) { - throw new UpfProgrammableException("Unable to remove FlowRule with match criterion " + match.toString() + - " in table " + tableId.toString()); - } - return false; - } - - @Override - public Collection getPdrs() throws UpfProgrammableException { - if (!setupBehaviour("getPdrs()")) { - return null; - } - ArrayList pdrs = new ArrayList<>(); - for (FlowRule flowRule : flowRuleService.getFlowEntries(deviceId)) { - if (upfTranslator.isFabricPdr(flowRule)) { - pdrs.add(upfTranslator.fabricEntryToPdr(flowRule)); - } - } - return pdrs; - } - - @Override - public Collection getFars() throws UpfProgrammableException { - if (!setupBehaviour("getFars()")) { - return null; - } - ArrayList fars = new ArrayList<>(); - for (FlowRule flowRule : flowRuleService.getFlowEntries(deviceId)) { - if (upfTranslator.isFabricFar(flowRule)) { - fars.add(upfTranslator.fabricEntryToFar(flowRule)); - } - } - return fars; - } - - @Override - public Collection getInterfaces() throws UpfProgrammableException { - if (!setupBehaviour("getInterfaces()")) { - return null; - } - ArrayList ifaces = new ArrayList<>(); - for (FlowRule flowRule : flowRuleService.getFlowEntries(deviceId)) { - if (upfTranslator.isFabricInterface(flowRule)) { - ifaces.add(upfTranslator.fabricEntryToInterface(flowRule)); - } - } - return ifaces; - } - - @Override - public void removePdr(PacketDetectionRule pdr) throws UpfProgrammableException { - if (!setupBehaviour("removePdr()")) { - return; - } - final PiCriterion match; - final PiTableId tableId; - if (pdr.matchesEncapped()) { - PiCriterion.Builder criterionBuilder = PiCriterion.builder() - .matchExact(HDR_TEID, pdr.teid().asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()); - if (pdr.matchQfi()) { - criterionBuilder.matchExact(HDR_HAS_QFI, TRUE); - criterionBuilder.matchExact(HDR_QFI, pdr.qfi()); - } else { - criterionBuilder.matchExact(HDR_HAS_QFI, FALSE); - criterionBuilder.matchExact(HDR_QFI, DEFAULT_QFI); - } - match = criterionBuilder.build(); - tableId = FABRIC_INGRESS_SPGW_UPLINK_PDRS; - } else { - match = PiCriterion.builder() - .matchExact(HDR_UE_ADDR, pdr.ueAddress().toInt()) - .build(); - tableId = FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; - } - log.info("Removing {}", pdr.toString()); - removeEntry(match, tableId, false); - } - - @Override - public void removeFar(ForwardingActionRule far) throws UpfProgrammableException { - if (!setupBehaviour("removeFar()")) { - return; - } - log.info("Removing {}", far.toString()); - - PiCriterion match = PiCriterion.builder() - .matchExact(HDR_FAR_ID, fabricUpfStore.removeGlobalFarId(far.sessionId(), far.farId())) - .build(); - - removeEntry(match, FABRIC_INGRESS_SPGW_FARS, false); - } - - @Override - public void removeInterface(UpfInterface upfInterface) throws UpfProgrammableException { - if (!setupBehaviour("removeInterface()")) { - return; - } - Ip4Prefix ifacePrefix = upfInterface.getPrefix(); - // If it isn't a core interface (so it is either access/dbuf or unknown), try removing first - // access/dbuf interfaces and then fall through in the next step where we try to remove the core flow - if (!upfInterface.isCore()) { - PiCriterion match1 = PiCriterion.builder() - .matchLpm(HDR_IPV4_DST_ADDR, ifacePrefix.address().toInt(), - ifacePrefix.prefixLength()) - .matchExact(HDR_GTPU_IS_VALID, 1) - .build(); - // removeEntry does return false only for severe issues, before we had - // a safe fall through. This part should not be affected since core and access - // flows are different in the match keys and should not result in wrong removal - removeEntry(match1, FABRIC_INGRESS_SPGW_INTERFACES, true); - } - // This additional step might be also needed in case of unknown interfaces - PiCriterion match2 = PiCriterion.builder() - .matchLpm(HDR_IPV4_DST_ADDR, ifacePrefix.address().toInt(), - ifacePrefix.prefixLength()) - .matchExact(HDR_GTPU_IS_VALID, 0) - .build(); - removeEntry(match2, FABRIC_INGRESS_SPGW_INTERFACES, false); - } -} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java deleted file mode 100644 index 8e9e92bb4fd..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfStore.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onlab.util.ImmutableByteSequence; - -import java.util.Map; - -/** - * Stores state required for translation of UPF entities to pipeline-specific ones. - */ -public interface FabricUpfStore { - /** - * Clear all state associated with translation. - */ - void reset(); - - /** - * Returns the reverseFarIdMap. - * - * @return the farIdMap. - */ - Map getReverseFarIdMap(); - - /** - * Get a globally unique integer identifier for the FAR identified by the given (Session ID, Far - * ID) pair. - * - * @param farIdPair a RuleIdentifier instance uniquely identifying the FAR - * @return A globally unique integer identifier - */ - int globalFarIdOf(UpfRuleIdentifier farIdPair); - - /** - * Remove the global far id from the system. - * - * @param farIdPair a RuleIdentifier instance uniquely identifying the FAR - * @return A globally unique integer identifier - */ - int removeGlobalFarId(UpfRuleIdentifier farIdPair); - - /** - * Get a globally unique integer identifier for the FAR identified by the given (Session ID, Far - * ID) pair. - * - * @param pfcpSessionId The ID of the PFCP session that produced the FAR ID. - * @param sessionLocalFarId The FAR ID. - * @return A globally unique integer identifier - */ - int globalFarIdOf(ImmutableByteSequence pfcpSessionId, int sessionLocalFarId); - - /** - * Remove the global far id from the system. - * - * @param pfcpSessionId The ID of the PFCP session that produced the FAR ID. - * @param sessionLocalFarId The FAR ID. - * @return A globally unique integer identifier - */ - int removeGlobalFarId(ImmutableByteSequence pfcpSessionId, int sessionLocalFarId); - - /** - * Get the corresponding PFCP session ID and session-local FAR ID from a globally unique FAR ID, - * or return null if no such mapping is found. - * - * @param globalFarId globally unique FAR ID - * @return the corresponding PFCP session ID and session-local FAR ID, as a RuleIdentifier - */ - UpfRuleIdentifier localFarIdOf(int globalFarId); -} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java deleted file mode 100644 index f2e7584aee6..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslator.java +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.apache.commons.lang3.tuple.Pair; -import org.onlab.packet.Ip4Address; -import org.onlab.util.ImmutableByteSequence; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.behaviour.upf.ForwardingActionRule; -import org.onosproject.net.behaviour.upf.GtpTunnel; -import org.onosproject.net.behaviour.upf.PacketDetectionRule; -import org.onosproject.net.behaviour.upf.UpfInterface; -import org.onosproject.net.behaviour.upf.UpfProgrammableException; -import org.onosproject.net.flow.DefaultFlowRule; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.criteria.PiCriterion; -import org.onosproject.net.pi.model.PiActionId; -import org.onosproject.net.pi.model.PiTableId; -import org.onosproject.net.pi.runtime.PiAction; -import org.onosproject.net.pi.runtime.PiActionParam; -import org.onosproject.net.pi.runtime.PiTableAction; - -import java.util.Arrays; - -import static org.onosproject.pipelines.fabric.FabricConstants.CTR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.DROP; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_FARS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_INTERFACES; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_IFACE; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_PDR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_UPLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FAR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_GTPU_DECAP; -import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_QFI_PUSH; -import static org.onosproject.pipelines.fabric.FabricConstants.NOTIFY_CP; -import static org.onosproject.pipelines.fabric.FabricConstants.QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.SLICE_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.SRC_IFACE; -import static org.onosproject.pipelines.fabric.FabricConstants.TC; -import static org.onosproject.pipelines.fabric.FabricConstants.TEID; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_DST_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_PORT; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_SLICE_ID; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_TC; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; - -/** - * Provides logic to translate UPF entities into pipeline-specific ones and vice-versa. - * Implementation should be stateless, with all state delegated to FabricUpfStore. - */ -public class FabricUpfTranslator { - - // UPF related constants - public static final int INTERFACE_ACCESS = 1; - public static final int INTERFACE_CORE = 2; - public static final int INTERFACE_DBUF = 3; - - private final FabricUpfStore fabricUpfStore; - - public FabricUpfTranslator(FabricUpfStore fabricUpfStore) { - this.fabricUpfStore = fabricUpfStore; - } - - /** - * Returns true if the given table entry is a Packet Detection Rule from the physical fabric pipeline, and - * false otherwise. - * - * @param entry the entry that may or may not be a fabric.p4 PDR - * @return true if the entry is a fabric.p4 PDR - */ - public boolean isFabricPdr(FlowRule entry) { - return entry.table().equals(FABRIC_INGRESS_SPGW_UPLINK_PDRS) - || entry.table().equals(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS); - } - - /** - * Returns true if the given table entry is a Forwarding Action Rule from the physical fabric pipeline, and - * false otherwise. - * - * @param entry the entry that may or may not be a fabric.p4 FAR - * @return true if the entry is a fabric.p4 FAR - */ - public boolean isFabricFar(FlowRule entry) { - return entry.table().equals(FABRIC_INGRESS_SPGW_FARS); - } - - /** - * Returns true if the given table entry is an interface table entry from the fabric.p4 physical pipeline, and - * false otherwise. - * - * @param entry the entry that may or may not be a fabric.p4 UPF interface - * @return true if the entry is a fabric.p4 UPF interface - */ - public boolean isFabricInterface(FlowRule entry) { - return entry.table().equals(FABRIC_INGRESS_SPGW_INTERFACES); - } - - - /** - * Translate a fabric.p4 PDR table entry to a PacketDetectionRule instance for easier handling. - * - * @param entry the fabric.p4 entry to translate - * @return the corresponding PacketDetectionRule - * @throws UpfProgrammableException if the entry cannot be translated - */ - public PacketDetectionRule fabricEntryToPdr(FlowRule entry) - throws UpfProgrammableException { - var pdrBuilder = PacketDetectionRule.builder(); - Pair matchActionPair = FabricUpfTranslatorUtil.fabricEntryToPiPair(entry); - PiCriterion match = matchActionPair.getLeft(); - PiAction action = (PiAction) matchActionPair.getRight(); - - // Grab keys and parameters that are present for all PDRs - int globalFarId = FabricUpfTranslatorUtil.getParamInt(action, FAR_ID); - UpfRuleIdentifier farId = fabricUpfStore.localFarIdOf(globalFarId); - if (farId == null) { - throw new UpfProgrammableException(String.format("Unable to find local far id of %s", globalFarId)); - } - - pdrBuilder.withCounterId(FabricUpfTranslatorUtil.getParamInt(action, CTR_ID)) - .withLocalFarId(farId.getSessionLocalId()) - .withSessionId(farId.getPfcpSessionId()); - - PiActionId actionId = action.id(); - if (actionId.equals(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS)) { - pdrBuilder.withQfi(FabricUpfTranslatorUtil.getParamByte(action, QFI)); - if (FabricUpfTranslatorUtil.getParamByte(action, NEEDS_QFI_PUSH) == TRUE) { - pdrBuilder.withQfiPush(); - } - } - - if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_TEID)) { - // F-TEID is only present for GTP-matching PDRs - ImmutableByteSequence teid = FabricUpfTranslatorUtil.getFieldValue(match, HDR_TEID); - Ip4Address tunnelDst = FabricUpfTranslatorUtil.getFieldAddress(match, HDR_TUNNEL_IPV4_DST); - pdrBuilder.withTeid(teid) - .withTunnelDst(tunnelDst); - if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_HAS_QFI) && - FabricUpfTranslatorUtil.getFieldByte(match, HDR_HAS_QFI) == TRUE) { - pdrBuilder.withQfi(FabricUpfTranslatorUtil.getFieldByte(match, HDR_QFI)); - pdrBuilder.withQfiMatch(); - } - } else if (FabricUpfTranslatorUtil.fieldIsPresent(match, HDR_UE_ADDR)) { - // And UE address is only present for non-GTP-matching PDRs - pdrBuilder.withUeAddr(FabricUpfTranslatorUtil.getFieldAddress(match, HDR_UE_ADDR)); - } else { - throw new UpfProgrammableException("Read malformed PDR from dataplane!:" + entry); - } - return pdrBuilder.build(); - } - - /** - * Translate a fabric.p4 FAR table entry to a ForwardActionRule instance for easier handling. - * - * @param entry the fabric.p4 entry to translate - * @return the corresponding ForwardingActionRule - * @throws UpfProgrammableException if the entry cannot be translated - */ - public ForwardingActionRule fabricEntryToFar(FlowRule entry) - throws UpfProgrammableException { - var farBuilder = ForwardingActionRule.builder(); - Pair matchActionPair = FabricUpfTranslatorUtil.fabricEntryToPiPair(entry); - PiCriterion match = matchActionPair.getLeft(); - PiAction action = (PiAction) matchActionPair.getRight(); - - int globalFarId = FabricUpfTranslatorUtil.getFieldInt(match, HDR_FAR_ID); - UpfRuleIdentifier farId = fabricUpfStore.localFarIdOf(globalFarId); - if (farId == null) { - throw new UpfProgrammableException(String.format("Unable to find local far id of %s", globalFarId)); - } - - boolean dropFlag = FabricUpfTranslatorUtil.getParamInt(action, DROP) > 0; - boolean notifyFlag = FabricUpfTranslatorUtil.getParamInt(action, NOTIFY_CP) > 0; - - // Match keys - farBuilder.withSessionId(farId.getPfcpSessionId()) - .setFarId(farId.getSessionLocalId()); - - // Parameters common to all types of FARs - farBuilder.setDropFlag(dropFlag) - .setNotifyFlag(notifyFlag); - - PiActionId actionId = action.id(); - - if (actionId.equals(FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR) - || actionId.equals(FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR)) { - // Grab parameters specific to encapsulating FARs if they're present - Ip4Address tunnelSrc = FabricUpfTranslatorUtil.getParamAddress(action, TUNNEL_SRC_ADDR); - Ip4Address tunnelDst = FabricUpfTranslatorUtil.getParamAddress(action, TUNNEL_DST_ADDR); - ImmutableByteSequence teid = FabricUpfTranslatorUtil.getParamValue(action, TEID); - short tunnelSrcPort = (short) FabricUpfTranslatorUtil.getParamInt(action, TUNNEL_SRC_PORT); - - farBuilder.setBufferFlag(actionId.equals(FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR)); - - farBuilder.setTunnel( - GtpTunnel.builder() - .setSrc(tunnelSrc) - .setDst(tunnelDst) - .setTeid(teid) - .setSrcPort(tunnelSrcPort) - .build()); - } - return farBuilder.build(); - } - - /** - * Translate a fabric.p4 interface table entry to a UpfInterface instance for easier handling. - * - * @param entry the fabric.p4 entry to translate - * @return the corresponding UpfInterface - * @throws UpfProgrammableException if the entry cannot be translated - */ - public UpfInterface fabricEntryToInterface(FlowRule entry) - throws UpfProgrammableException { - Pair matchActionPair = FabricUpfTranslatorUtil.fabricEntryToPiPair(entry); - PiCriterion match = matchActionPair.getLeft(); - PiAction action = (PiAction) matchActionPair.getRight(); - - var ifaceBuilder = UpfInterface.builder() - .setPrefix(FabricUpfTranslatorUtil.getFieldPrefix(match, HDR_IPV4_DST_ADDR)); - - int interfaceType = FabricUpfTranslatorUtil.getParamInt(action, SRC_IFACE); - if (interfaceType == INTERFACE_ACCESS) { - ifaceBuilder.setAccess(); - } else if (interfaceType == INTERFACE_CORE) { - ifaceBuilder.setCore(); - } else if (interfaceType == INTERFACE_DBUF) { - ifaceBuilder.setDbufReceiver(); - } - return ifaceBuilder.build(); - } - - /** - * Translate a ForwardingActionRule to a FlowRule to be inserted into the fabric.p4 pipeline. - * A side effect of calling this method is the FAR object's globalFarId is assigned if it was not already. - * - * @param far The FAR to be translated - * @param deviceId the ID of the device the FlowRule should be installed on - * @param appId the ID of the application that will insert the FlowRule - * @param priority the FlowRule's priority - * @return the FAR translated to a FlowRule - * @throws UpfProgrammableException if the FAR to be translated is malformed - */ - public FlowRule farToFabricEntry(ForwardingActionRule far, DeviceId deviceId, ApplicationId appId, int priority) - throws UpfProgrammableException { - PiAction action; - if (!far.encaps()) { - action = PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR) - .withParameters(Arrays.asList( - new PiActionParam(DROP, far.drops() ? 1 : 0), - new PiActionParam(NOTIFY_CP, far.notifies() ? 1 : 0) - )) - .build(); - - } else { - if (far.tunnelSrc() == null || far.tunnelDst() == null - || far.teid() == null || far.tunnel().srcPort() == null) { - throw new UpfProgrammableException( - "Not all action parameters present when translating " + - "intermediate encapsulating/buffering FAR to physical FAR!"); - } - // TODO: copy tunnel destination port from logical switch write requests, instead of hardcoding 2152 - PiActionId actionId = far.buffers() ? FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR : - FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR; - action = PiAction.builder() - .withId(actionId) - .withParameters(Arrays.asList( - new PiActionParam(DROP, far.drops() ? 1 : 0), - new PiActionParam(NOTIFY_CP, far.notifies() ? 1 : 0), - new PiActionParam(TEID, far.teid()), - new PiActionParam(TUNNEL_SRC_ADDR, far.tunnelSrc().toInt()), - new PiActionParam(TUNNEL_DST_ADDR, far.tunnelDst().toInt()), - new PiActionParam(TUNNEL_SRC_PORT, far.tunnel().srcPort()) - )) - .build(); - } - PiCriterion match = PiCriterion.builder() - .matchExact(HDR_FAR_ID, fabricUpfStore.globalFarIdOf(far.sessionId(), far.farId())) - .build(); - return DefaultFlowRule.builder() - .forDevice(deviceId).fromApp(appId).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_FARS) - .withSelector(DefaultTrafficSelector.builder().matchPi(match).build()) - .withTreatment(DefaultTrafficTreatment.builder().piTableAction(action).build()) - .withPriority(priority) - .build(); - } - - /** - * Translate a PacketDetectionRule to a FlowRule to be inserted into the fabric.p4 pipeline. - * A side effect of calling this method is the PDR object's globalFarId is assigned if it was not already. - * - * @param pdr The PDR to be translated - * @param deviceId the ID of the device the FlowRule should be installed on - * @param appId the ID of the application that will insert the FlowRule - * @param priority the FlowRule's priority - * @return the FAR translated to a FlowRule - * @throws UpfProgrammableException if the PDR to be translated is malformed - */ - public FlowRule pdrToFabricEntry(PacketDetectionRule pdr, DeviceId deviceId, ApplicationId appId, int priority) - throws UpfProgrammableException { - final PiCriterion match; - final PiTableId tableId; - final PiAction action; - - final PiCriterion.Builder matchBuilder = PiCriterion.builder(); - - PiAction.Builder actionBuilder = PiAction.builder() - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, pdr.counterId()), - new PiActionParam(FAR_ID, fabricUpfStore.globalFarIdOf(pdr.sessionId(), pdr.farId())), - new PiActionParam(NEEDS_GTPU_DECAP, pdr.matchesEncapped() ? - TRUE : FALSE), - new PiActionParam(TC, DEFAULT_TC) - )); - PiActionId actionId = FABRIC_INGRESS_SPGW_LOAD_PDR; - if (pdr.matchesEncapped()) { - tableId = FABRIC_INGRESS_SPGW_UPLINK_PDRS; - matchBuilder.matchExact(HDR_TEID, pdr.teid().asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, pdr.tunnelDest().toInt()); - if (pdr.matchQfi()) { - matchBuilder.matchExact(HDR_HAS_QFI, TRUE) - .matchExact(HDR_QFI, pdr.qfi()); - } else { - matchBuilder.matchExact(HDR_HAS_QFI, FALSE) - .matchExact(HDR_QFI, DEFAULT_QFI); - if (pdr.hasQfi()) { - actionId = FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; - actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())) - .withParameter(new PiActionParam(NEEDS_QFI_PUSH, FALSE)); - } - } - } else if (pdr.matchesUnencapped()) { - tableId = FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; - matchBuilder.matchExact(HDR_UE_ADDR, pdr.ueAddress().toInt()); - if (pdr.hasQfi()) { - actionBuilder.withParameter(new PiActionParam(QFI, pdr.qfi())) - .withParameter(new PiActionParam(NEEDS_QFI_PUSH, pdr.pushQfi() ? TRUE : FALSE)); - actionId = FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; - } - } else { - throw new UpfProgrammableException("Flexible PDRs not yet supported! Cannot translate " + pdr); - } - match = matchBuilder.build(); - action = actionBuilder.withId(actionId) - .build(); - return DefaultFlowRule.builder() - .forDevice(deviceId).fromApp(appId).makePermanent() - .forTable(tableId) - .withSelector(DefaultTrafficSelector.builder().matchPi(match).build()) - .withTreatment(DefaultTrafficTreatment.builder().piTableAction(action).build()) - .withPriority(priority) - .build(); - } - - /** - * Translate a UpfInterface to a FlowRule to be inserted into the fabric.p4 pipeline. - * - * @param upfInterface The interface to be translated - * @param deviceId the ID of the device the FlowRule should be installed on - * @param appId the ID of the application that will insert the FlowRule - * @param priority the FlowRule's priority - * @return the UPF interface translated to a FlowRule - * @throws UpfProgrammableException if the interface cannot be translated - */ - public FlowRule interfaceToFabricEntry(UpfInterface upfInterface, DeviceId deviceId, - ApplicationId appId, int priority) - throws UpfProgrammableException { - int interfaceTypeInt; - int gtpuValidity; - if (upfInterface.isDbufReceiver()) { - interfaceTypeInt = INTERFACE_DBUF; - gtpuValidity = 1; - } else if (upfInterface.isAccess()) { - interfaceTypeInt = INTERFACE_ACCESS; - gtpuValidity = 1; - } else { - interfaceTypeInt = INTERFACE_CORE; - gtpuValidity = 0; - } - - PiCriterion match = PiCriterion.builder() - .matchLpm(HDR_IPV4_DST_ADDR, - upfInterface.prefix().address().toInt(), - upfInterface.prefix().prefixLength()) - .matchExact(HDR_GTPU_IS_VALID, gtpuValidity) - .build(); - PiAction action = PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) - .withParameter(new PiActionParam(SRC_IFACE, interfaceTypeInt)) - .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) - .build(); - return DefaultFlowRule.builder() - .forDevice(deviceId).fromApp(appId).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_INTERFACES) - .withSelector(DefaultTrafficSelector.builder().matchPi(match).build()) - .withTreatment(DefaultTrafficTreatment.builder().piTableAction(action).build()) - .withPriority(priority) - .build(); - } -} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java deleted file mode 100644 index cfbf95e4b3d..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorUtil.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.apache.commons.lang3.tuple.Pair; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip4Prefix; -import org.onlab.util.ImmutableByteSequence; -import org.onosproject.net.behaviour.upf.UpfProgrammableException; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.PiCriterion; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.PiInstruction; -import org.onosproject.net.pi.model.PiActionParamId; -import org.onosproject.net.pi.model.PiMatchFieldId; -import org.onosproject.net.pi.model.PiMatchType; -import org.onosproject.net.pi.runtime.PiAction; -import org.onosproject.net.pi.runtime.PiActionParam; -import org.onosproject.net.pi.runtime.PiExactFieldMatch; -import org.onosproject.net.pi.runtime.PiFieldMatch; -import org.onosproject.net.pi.runtime.PiLpmFieldMatch; -import org.onosproject.net.pi.runtime.PiRangeFieldMatch; -import org.onosproject.net.pi.runtime.PiTableAction; -import org.onosproject.net.pi.runtime.PiTernaryFieldMatch; - -import java.util.Optional; - -/** - * Utility class for manipulation of FlowRules and PiTableEntry objects specific to fabric-tna. - */ -final class FabricUpfTranslatorUtil { - - private FabricUpfTranslatorUtil() { - } - - static ImmutableByteSequence getFieldValue(PiFieldMatch field, PiMatchFieldId fieldId) - throws UpfProgrammableException { - if (field == null) { - throw new UpfProgrammableException( - String.format("Unable to find field %s where expected!", fieldId.toString())); - } - if (field.type() == PiMatchType.EXACT) { - return ((PiExactFieldMatch) field).value(); - } else if (field.type() == PiMatchType.LPM) { - return ((PiLpmFieldMatch) field).value(); - } else if (field.type() == PiMatchType.TERNARY) { - return ((PiTernaryFieldMatch) field).value(); - } else if (field.type() == PiMatchType.RANGE) { - return ((PiRangeFieldMatch) field).lowValue(); - } else { - throw new UpfProgrammableException( - String.format("Field %s has unknown match type: %s", fieldId.toString(), field.type().toString())); - } - } - - static ImmutableByteSequence getFieldValue(PiCriterion criterion, PiMatchFieldId fieldId) - throws UpfProgrammableException { - return getFieldValue(criterion.fieldMatch(fieldId).orElse(null), fieldId); - } - - static boolean fieldIsPresent(PiCriterion criterion, PiMatchFieldId fieldId) { - return criterion.fieldMatch(fieldId).isPresent(); - } - - static ImmutableByteSequence getParamValue(PiAction action, PiActionParamId paramId) - throws UpfProgrammableException { - - for (PiActionParam param : action.parameters()) { - if (param.id().equals(paramId)) { - return param.value(); - } - } - throw new UpfProgrammableException( - String.format("Unable to find parameter %s where expected!", paramId.toString())); - } - - static int getFieldInt(PiCriterion criterion, PiMatchFieldId fieldId) - throws UpfProgrammableException { - return byteSeqToInt(getFieldValue(criterion, fieldId)); - } - - static byte getFieldByte(PiCriterion criterion, PiMatchFieldId fieldId) - throws UpfProgrammableException { - return byteSeqToByte(getFieldValue(criterion, fieldId)); - } - - static int getParamInt(PiAction action, PiActionParamId paramId) - throws UpfProgrammableException { - return byteSeqToInt(getParamValue(action, paramId)); - } - - static byte getParamByte(PiAction action, PiActionParamId paramId) - throws UpfProgrammableException { - return byteSeqToByte(getParamValue(action, paramId)); - } - - static Ip4Address getParamAddress(PiAction action, PiActionParamId paramId) - throws UpfProgrammableException { - return Ip4Address.valueOf(getParamValue(action, paramId).asArray()); - } - - static Ip4Prefix getFieldPrefix(PiCriterion criterion, PiMatchFieldId fieldId) { - Optional optField = criterion.fieldMatch(fieldId); - if (optField.isEmpty()) { - return null; - } - PiLpmFieldMatch field = (PiLpmFieldMatch) optField.get(); - Ip4Address address = Ip4Address.valueOf(field.value().asArray()); - return Ip4Prefix.valueOf(address, field.prefixLength()); - } - - static Ip4Address getFieldAddress(PiCriterion criterion, PiMatchFieldId fieldId) - throws UpfProgrammableException { - return Ip4Address.valueOf(getFieldValue(criterion, fieldId).asArray()); - } - - static int byteSeqToInt(ImmutableByteSequence sequence) { - try { - return sequence.fit(32).asReadOnlyBuffer().getInt(); - } catch (ImmutableByteSequence.ByteSequenceTrimException e) { - throw new IllegalArgumentException("Attempted to convert a >4 byte wide sequence to an integer!"); - } - } - - static byte byteSeqToByte(ImmutableByteSequence sequence) { - try { - return sequence.fit(8).asReadOnlyBuffer().get(); - } catch (ImmutableByteSequence.ByteSequenceTrimException e) { - throw new IllegalArgumentException("Attempted to convert a >1 byte wide sequence to a byte!"); - } - } - - static Pair fabricEntryToPiPair(FlowRule entry) { - PiCriterion match = (PiCriterion) entry.selector().getCriterion(Criterion.Type.PROTOCOL_INDEPENDENT); - PiTableAction action = null; - for (Instruction instruction : entry.treatment().allInstructions()) { - if (instruction.type() == Instruction.Type.PROTOCOL_INDEPENDENT) { - PiInstruction piInstruction = (PiInstruction) instruction; - action = piInstruction.action(); - break; - } - } - return Pair.of(match, action); - } -} diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/UpfRuleIdentifier.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/UpfRuleIdentifier.java deleted file mode 100644 index 5b6c6b69ff0..00000000000 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/UpfRuleIdentifier.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onlab.util.ImmutableByteSequence; - -import java.util.Objects; - -/** - * Wrapper for identifying information of FARs and PDRs. - */ -public final class UpfRuleIdentifier { - private final int sessionlocalId; - private final ImmutableByteSequence pfcpSessionId; - - /** - * A PDR or FAR can be globally uniquely identified by the combination of the ID of the PFCP session that - * produced it, and the ID that the rule was assigned in that PFCP session. - * - * @param pfcpSessionId The PFCP session that produced the rule ID - * @param sessionlocalId The rule ID - */ - public UpfRuleIdentifier(ImmutableByteSequence pfcpSessionId, int sessionlocalId) { - this.pfcpSessionId = pfcpSessionId; - this.sessionlocalId = sessionlocalId; - } - - /** - * Create an instance of this class from the given PFCP session ID and the session-local Rule ID. - * - * @param pfcpSessionId PFCP session ID of the rule to identify - * @param sessionlocalId session-local Rule ID of the rule to identify - * @return a new rule identifier - */ - public static UpfRuleIdentifier of(ImmutableByteSequence pfcpSessionId, int sessionlocalId) { - return new UpfRuleIdentifier(pfcpSessionId, sessionlocalId); - } - - /** - * Get the PFCP session-local rule ID. - * - * @return session-local rule ID - */ - public int getSessionLocalId() { - return sessionlocalId; - } - - /** - * Get the PFCP session ID. - * - * @return PFCP session ID - */ - public ImmutableByteSequence getPfcpSessionId() { - return pfcpSessionId; - } - - @Override - public String toString() { - return "RuleIdentifier{" + - "sessionlocalId=" + sessionlocalId + - ", pfcpSessionId=" + pfcpSessionId + - '}'; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - UpfRuleIdentifier that = (UpfRuleIdentifier) obj; - return (this.sessionlocalId == that.sessionlocalId) && (this.pfcpSessionId.equals(that.pfcpSessionId)); - } - - @Override - public int hashCode() { - return Objects.hash(this.sessionlocalId, this.pfcpSessionId); - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammableTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammableTest.java deleted file mode 100644 index 50fd8bcb00a..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfProgrammableTest.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.collect.ImmutableList; -import org.junit.Before; -import org.junit.Test; -import org.onlab.junit.TestUtils; -import org.onlab.util.HexString; -import org.onosproject.TestApplicationId; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.behaviour.upf.ForwardingActionRule; -import org.onosproject.net.behaviour.upf.PacketDetectionRule; -import org.onosproject.net.behaviour.upf.PdrStats; -import org.onosproject.net.behaviour.upf.UpfInterface; -import org.onosproject.net.config.NetworkConfigService; -import org.onosproject.net.config.basics.BasicDeviceConfig; -import org.onosproject.net.device.DeviceService; -import org.onosproject.net.driver.DriverData; -import org.onosproject.net.driver.DriverHandler; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.packet.PacketService; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiTableModel; -import org.onosproject.net.pi.service.PiPipeconfService; -import org.onosproject.net.pi.service.PiTranslationService; -import org.onosproject.p4runtime.api.P4RuntimeController; -import org.onosproject.pipelines.fabric.impl.FabricPipeconfLoader; -import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities; - -import java.net.URI; -import java.nio.ByteBuffer; -import java.util.Collection; -import java.util.List; -import java.util.concurrent.ConcurrentMap; - -import static junit.framework.TestCase.assertNotNull; -import static junit.framework.TestCase.assertTrue; -import static org.easymock.EasyMock.anyString; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_EGRESS_SPGW_PDR_COUNTER; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_FARS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_PDR_COUNTER; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_UPLINK_PDRS; - -public class FabricUpfProgrammableTest { - - private static final ApplicationId APP_ID = - TestApplicationId.create(FabricPipeconfLoader.PIPELINE_APP_NAME); - - private final DistributedFabricUpfStore upfStore = TestDistributedFabricUpfStore.build(); - private MockPacketService packetService; - private FabricUpfProgrammable upfProgrammable; - - // Bytes of a random but valid Ethernet frame. - private static final byte[] ETH_FRAME_BYTES = HexString.fromHexString( - "00060708090a0001020304058100000a08004500006a000100004011f92ec0a80001c0a8000204d2005" + - "00056a8d5000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" + - "2122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454" + - "64748494a4b4c4d", ""); - private static final TrafficTreatment TABLE_OUTPUT_TREATMENT = DefaultTrafficTreatment.builder() - .setOutput(PortNumber.TABLE) - .build(); - - private static final List TABLE_MODELS = ImmutableList.of( - new MockTableModel(FABRIC_INGRESS_SPGW_UPLINK_PDRS, - TestUpfConstants.PHYSICAL_MAX_PDRS / 2), - new MockTableModel(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS, - TestUpfConstants.PHYSICAL_MAX_PDRS / 2), - new MockTableModel(FABRIC_INGRESS_SPGW_FARS, - TestUpfConstants.PHYSICAL_MAX_FARS) - ); - private static final List COUNTER_MODELS = ImmutableList.of( - new MockCounterModel(FABRIC_INGRESS_SPGW_PDR_COUNTER, - TestUpfConstants.PHYSICAL_COUNTER_SIZE), - new MockCounterModel(FABRIC_EGRESS_SPGW_PDR_COUNTER, - TestUpfConstants.PHYSICAL_COUNTER_SIZE) - ); - - @Before - public void setUp() throws Exception { - FabricCapabilities capabilities = createMock(FabricCapabilities.class); - expect(capabilities.supportUpf()).andReturn(true).anyTimes(); - replay(capabilities); - - // Services mock - packetService = new MockPacketService(); - CoreService coreService = createMock(CoreService.class); - NetworkConfigService netcfgService = createMock(NetworkConfigService.class); - DeviceService deviceService = createMock(DeviceService.class); - PiTranslationService piTranslationService = createMock(PiTranslationService.class); - expect(coreService.getAppId(anyString())).andReturn(APP_ID).anyTimes(); - expect(netcfgService.getConfig(TestUpfConstants.DEVICE_ID, BasicDeviceConfig.class)) - .andReturn(TestUpfUtils.getBasicConfig(TestUpfConstants.DEVICE_ID, "/basic.json")) - .anyTimes(); - replay(coreService, netcfgService); - - // Mock driverData to get the right device ID - DriverData driverData = createMock(DriverData.class); - expect(driverData.deviceId()).andReturn(TestUpfConstants.DEVICE_ID).anyTimes(); - replay(driverData); - - // Mock DriverHandler to get all the required mocked services - DriverHandler driverHandler = createMock(DriverHandler.class); - expect(driverHandler.get(FlowRuleService.class)).andReturn(new MockFlowRuleService()).anyTimes(); - expect(driverHandler.get(PacketService.class)).andReturn(packetService).anyTimes(); - expect(driverHandler.get(FabricUpfStore.class)).andReturn(upfStore).anyTimes(); - expect(driverHandler.get(NetworkConfigService.class)).andReturn(netcfgService).anyTimes(); - expect(driverHandler.get(CoreService.class)).andReturn(coreService).anyTimes(); - expect(driverHandler.get(DeviceService.class)).andReturn(deviceService).anyTimes(); - expect(driverHandler.get(PiTranslationService.class)).andReturn(piTranslationService).anyTimes(); - expect(driverHandler.get(PiPipeconfService.class)) - .andReturn(new MockPiPipeconfService(TABLE_MODELS, COUNTER_MODELS)) - .anyTimes(); - expect(driverHandler.get(P4RuntimeController.class)) - .andReturn(new MockP4RuntimeController(TestUpfConstants.DEVICE_ID, - TestUpfConstants.COUNTER_PKTS, - TestUpfConstants.COUNTER_BYTES, - TestUpfConstants.PHYSICAL_COUNTER_SIZE)) - .anyTimes(); - expect(driverHandler.data()).andReturn(driverData).anyTimes(); - replay(driverHandler); - - upfProgrammable = new FabricUpfProgrammable(); - TestUtils.setField(upfProgrammable, "handler", driverHandler); - TestUtils.setField(upfProgrammable, "data", driverData); - ConcurrentMap channelUris = TestUtils.getField(upfProgrammable, "CHANNEL_URIS"); - channelUris.put(TestUpfConstants.DEVICE_ID, new URI("grpc://localhost:1234?device_id=1")); - } - - @Test - public void testUplinkPdr() throws Exception { - assertTrue(upfProgrammable.getPdrs().isEmpty()); - PacketDetectionRule expectedPdr = TestUpfConstants.UPLINK_PDR; - upfProgrammable.addPdr(expectedPdr); - Collection installedPdrs = upfProgrammable.getPdrs(); - assertThat(installedPdrs.size(), equalTo(1)); - for (var readPdr : installedPdrs) { - assertThat(readPdr, equalTo(expectedPdr)); - } - upfProgrammable.removePdr(expectedPdr.withoutActionParams()); - assertTrue(upfProgrammable.getPdrs().isEmpty()); - } - - @Test - public void testDownlinkPdr() throws Exception { - assertTrue(upfProgrammable.getPdrs().isEmpty()); - PacketDetectionRule expectedPdr = TestUpfConstants.DOWNLINK_PDR; - upfProgrammable.addPdr(expectedPdr); - Collection installedPdrs = upfProgrammable.getPdrs(); - assertThat(installedPdrs.size(), equalTo(1)); - for (var readPdr : installedPdrs) { - assertThat(readPdr, equalTo(expectedPdr)); - } - upfProgrammable.removePdr(expectedPdr.withoutActionParams()); - assertTrue(upfProgrammable.getPdrs().isEmpty()); - } - - @Test - public void testUplinkFar() throws Exception { - assertTrue(upfProgrammable.getFars().isEmpty()); - ForwardingActionRule expectedFar = TestUpfConstants.UPLINK_FAR; - upfProgrammable.addFar(expectedFar); - Collection installedFars = upfProgrammable.getFars(); - assertThat(installedFars.size(), equalTo(1)); - for (var readFar : installedFars) { - assertThat(readFar, equalTo(expectedFar)); - } - upfProgrammable.removeFar(expectedFar.withoutActionParams()); - assertTrue(upfProgrammable.getFars().isEmpty()); - } - - @Test - public void testDownlinkFar() throws Exception { - assertTrue(upfProgrammable.getFars().isEmpty()); - ForwardingActionRule expectedFar = TestUpfConstants.DOWNLINK_FAR; - upfProgrammable.addFar(expectedFar); - Collection installedFars = upfProgrammable.getFars(); - assertThat(installedFars.size(), equalTo(1)); - for (var readFar : installedFars) { - assertThat(readFar, equalTo(expectedFar)); - } - upfProgrammable.removeFar(expectedFar.withoutActionParams()); - assertTrue(upfProgrammable.getFars().isEmpty()); - } - - @Test - public void testUplinkInterface() throws Exception { - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - UpfInterface expectedInterface = TestUpfConstants.UPLINK_INTERFACE; - upfProgrammable.addInterface(expectedInterface); - Collection installedInterfaces = upfProgrammable.getInterfaces(); - assertThat(installedInterfaces.size(), equalTo(1)); - for (var readInterface : installedInterfaces) { - assertThat(readInterface, equalTo(expectedInterface)); - } - upfProgrammable.removeInterface(expectedInterface); - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - } - - @Test - public void testDownlinkInterface() throws Exception { - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - UpfInterface expectedInterface = TestUpfConstants.DOWNLINK_INTERFACE; - upfProgrammable.addInterface(expectedInterface); - Collection installedInterfaces = upfProgrammable.getInterfaces(); - assertThat(installedInterfaces.size(), equalTo(1)); - for (var readInterface : installedInterfaces) { - assertThat(readInterface, equalTo(expectedInterface)); - } - upfProgrammable.removeInterface(expectedInterface); - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - } - - @Test - public void testClearInterfaces() throws Exception { - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - upfProgrammable.addInterface(TestUpfConstants.UPLINK_INTERFACE); - upfProgrammable.addInterface(TestUpfConstants.DOWNLINK_INTERFACE); - assertThat(upfProgrammable.getInterfaces().size(), equalTo(2)); - upfProgrammable.clearInterfaces(); - assertTrue(upfProgrammable.getInterfaces().isEmpty()); - } - - @Test - public void testReadAllCounters() { - Collection allStats = upfProgrammable.readAllCounters(-1); - assertThat(allStats.size(), equalTo(TestUpfConstants.PHYSICAL_COUNTER_SIZE)); - for (PdrStats stat : allStats) { - assertThat(stat.getIngressBytes(), equalTo(TestUpfConstants.COUNTER_BYTES)); - assertThat(stat.getEgressBytes(), equalTo(TestUpfConstants.COUNTER_BYTES)); - assertThat(stat.getIngressPkts(), equalTo(TestUpfConstants.COUNTER_PKTS)); - assertThat(stat.getEgressPkts(), equalTo(TestUpfConstants.COUNTER_PKTS)); - } - } - - @Test - public void testReadAllCountersLimitedCounters() { - Collection allStats = upfProgrammable.readAllCounters(10); - assertThat(allStats.size(), equalTo(10)); - } - - @Test - public void testReadAllCountersPhysicalLimit() { - Collection allStats = upfProgrammable.readAllCounters(1024); - assertThat(allStats.size(), equalTo(TestUpfConstants.PHYSICAL_COUNTER_SIZE)); - } - - @Test - public void testSendPacketOut() { - upfProgrammable.sendPacketOut(ByteBuffer.wrap(ETH_FRAME_BYTES)); - var emittedPkt = packetService.emittedPackets.poll(); - assertNotNull(emittedPkt); - assertThat(emittedPkt.data().array(), equalTo(ETH_FRAME_BYTES)); - assertThat(emittedPkt.treatment(), equalTo(TABLE_OUTPUT_TREATMENT)); - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java deleted file mode 100644 index a07826d6b74..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/FabricUpfTranslatorTest.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.junit.Test; -import org.onosproject.net.behaviour.upf.ForwardingActionRule; -import org.onosproject.net.behaviour.upf.PacketDetectionRule; -import org.onosproject.net.behaviour.upf.UpfInterface; -import org.onosproject.net.behaviour.upf.UpfProgrammableException; -import org.onosproject.net.flow.FlowRule; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -public class FabricUpfTranslatorTest { - - private final FabricUpfTranslator upfTranslator = new FabricUpfTranslator(TestDistributedFabricUpfStore.build()); - - @Test - public void fabricEntryToUplinkPdrTest() { - fabricToPdrUplink(TestUpfConstants.UPLINK_PDR, TestUpfConstants.FABRIC_UPLINK_PDR); - } - - @Test - public void fabricEntryToUplinkQosPdrTest() { - fabricToPdrUplink(TestUpfConstants.UPLINK_QOS_PDR, TestUpfConstants.FABRIC_UPLINK_QOS_PDR); - fabricToPdrUplink(TestUpfConstants.UPLINK_QOS_4G_PDR, TestUpfConstants.FABRIC_UPLINK_QOS_4G_PDR); - } - - private void fabricToPdrUplink(PacketDetectionRule expected, FlowRule fabricFlow) { - PacketDetectionRule translatedPdr; - try { - translatedPdr = upfTranslator.fabricEntryToPdr(fabricFlow); - } catch (UpfProgrammableException e) { - assertThat("Fabric uplink PDR should translate to abstract PDR without error.", false); - return; - } - assertThat("Translated PDR should be uplink.", translatedPdr.matchesEncapped()); - assertThat(translatedPdr, equalTo(expected)); - } - - @Test - public void fabricEntryToDownlinkPdrTest() { - fabricToPdrDownlink(TestUpfConstants.DOWNLINK_PDR, TestUpfConstants.FABRIC_DOWNLINK_PDR); - } - - @Test - public void fabricEntryToDownlinkQosPdrTest() { - fabricToPdrDownlink(TestUpfConstants.DOWNLINK_QOS_PDR, TestUpfConstants.FABRIC_DOWNLINK_QOS_PDR); - fabricToPdrDownlink(TestUpfConstants.DOWNLINK_QOS_4G_PDR, TestUpfConstants.FABRIC_DOWNLINK_QOS_4G_PDR); - } - - private void fabricToPdrDownlink(PacketDetectionRule expected, FlowRule fabricFlow) { - PacketDetectionRule translatedPdr; - try { - translatedPdr = upfTranslator.fabricEntryToPdr(fabricFlow); - } catch (UpfProgrammableException e) { - assertThat("Fabric downlink PDR should translate to abstract PDR without error.", false); - return; - } - - assertThat("Translated PDR should be downlink.", translatedPdr.matchesUnencapped()); - assertThat(translatedPdr, equalTo(expected)); - } - - @Test - public void fabricEntryToUplinkFarTest() { - ForwardingActionRule translatedFar; - ForwardingActionRule expectedFar = TestUpfConstants.UPLINK_FAR; - try { - translatedFar = upfTranslator.fabricEntryToFar(TestUpfConstants.FABRIC_UPLINK_FAR); - } catch (UpfProgrammableException e) { - assertThat("Fabric uplink FAR should correctly translate to abstract FAR without error", - false); - return; - } - assertThat("Translated FAR should be uplink.", translatedFar.forwards()); - assertThat(translatedFar, equalTo(expectedFar)); - } - - @Test - public void fabricEntryToDownlinkFarTest() { - ForwardingActionRule translatedFar; - ForwardingActionRule expectedFar = TestUpfConstants.DOWNLINK_FAR; - try { - translatedFar = upfTranslator.fabricEntryToFar(TestUpfConstants.FABRIC_DOWNLINK_FAR); - } catch (UpfProgrammableException e) { - assertThat("Fabric downlink FAR should correctly translate to abstract FAR without error", - false); - return; - } - assertThat("Translated FAR should be downlink.", translatedFar.encaps()); - assertThat(translatedFar, equalTo(expectedFar)); - } - - @Test - public void fabricEntryToUplinkInterfaceTest() { - UpfInterface translatedInterface; - UpfInterface expectedInterface = TestUpfConstants.UPLINK_INTERFACE; - try { - translatedInterface = upfTranslator.fabricEntryToInterface(TestUpfConstants.FABRIC_UPLINK_INTERFACE); - } catch (UpfProgrammableException e) { - assertThat("Fabric uplink interface should correctly translate to abstract interface without error", - false); - return; - } - assertThat("Translated interface should be uplink.", translatedInterface.isAccess()); - assertThat(translatedInterface, equalTo(expectedInterface)); - } - - @Test - public void fabricEntryToDownlinkInterfaceTest() { - UpfInterface translatedInterface; - UpfInterface expectedInterface = TestUpfConstants.DOWNLINK_INTERFACE; - try { - translatedInterface = upfTranslator.fabricEntryToInterface(TestUpfConstants.FABRIC_DOWNLINK_INTERFACE); - } catch (UpfProgrammableException e) { - assertThat("Fabric downlink interface should correctly translate to abstract interface without error", - false); - return; - } - assertThat("Translated interface should be downlink.", translatedInterface.isCore()); - assertThat(translatedInterface, equalTo(expectedInterface)); - } - - @Test - public void uplinkInterfaceToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_UPLINK_INTERFACE; - try { - translatedRule = upfTranslator.interfaceToFabricEntry(TestUpfConstants.UPLINK_INTERFACE, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract uplink interface should correctly translate to Fabric interface without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); - } - - @Test - public void downlinkInterfaceToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_DOWNLINK_INTERFACE; - try { - translatedRule = upfTranslator.interfaceToFabricEntry(TestUpfConstants.DOWNLINK_INTERFACE, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract downlink interface should correctly translate to Fabric interface without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); - } - - @Test - public void downlinkPdrToFabricEntryTest() { - pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_PDR, TestUpfConstants.DOWNLINK_PDR); - } - - @Test - public void downlinkPdrToFabricQosEntryTest() { - pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_QOS_PDR, TestUpfConstants.DOWNLINK_QOS_PDR); - pdrToFabricDownlink(TestUpfConstants.FABRIC_DOWNLINK_QOS_4G_PDR, TestUpfConstants.DOWNLINK_QOS_4G_PDR); - } - - private void pdrToFabricDownlink(FlowRule expected, PacketDetectionRule pdr) { - FlowRule translatedRule; - try { - translatedRule = upfTranslator.pdrToFabricEntry(pdr, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract downlink PDR should correctly translate to Fabric PDR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expected)); - } - - @Test - public void uplinkFarToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_UPLINK_FAR; - try { - translatedRule = upfTranslator.farToFabricEntry(TestUpfConstants.UPLINK_FAR, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract uplink FAR should correctly translate to Fabric FAR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); - } - - @Test - public void uplinkPdrToFabricEntryTest() { - pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_PDR, TestUpfConstants.UPLINK_PDR); - } - - @Test - public void uplinkQosPdrToFabricEntryTest() { - pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_QOS_PDR, TestUpfConstants.UPLINK_QOS_PDR); - pdrToFabricUplink(TestUpfConstants.FABRIC_UPLINK_QOS_4G_PDR, TestUpfConstants.UPLINK_QOS_4G_PDR); - } - - private void pdrToFabricUplink(FlowRule expected, PacketDetectionRule pdr) { - FlowRule translatedRule; - try { - translatedRule = upfTranslator.pdrToFabricEntry(pdr, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract uplink PDR should correctly translate to Fabric PDR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expected)); - } - - @Test - public void downlinkFarToFabricEntryTest() { - FlowRule translatedRule; - FlowRule expectedRule = TestUpfConstants.FABRIC_DOWNLINK_FAR; - try { - translatedRule = upfTranslator.farToFabricEntry(TestUpfConstants.DOWNLINK_FAR, - TestUpfConstants.DEVICE_ID, - TestUpfConstants.APP_ID, - TestUpfConstants.DEFAULT_PRIORITY); - } catch (UpfProgrammableException e) { - assertThat("Abstract downlink FAR should correctly translate to Fabric FAR without error", - false); - return; - } - assertThat(translatedRule, equalTo(expectedRule)); - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockCounterModel.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockCounterModel.java deleted file mode 100644 index dcf667b2829..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockCounterModel.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.net.pi.model.PiCounterId; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiCounterType; -import org.onosproject.net.pi.model.PiTableId; - -public class MockCounterModel implements PiCounterModel { - PiCounterId id; - int size; - - public MockCounterModel(PiCounterId id, int size) { - this.id = id; - this.size = size; - } - - @Override - public PiCounterId id() { - return this.id; - } - - @Override - public PiCounterType counterType() { - return null; - } - - @Override - public Unit unit() { - return null; - } - - @Override - public PiTableId table() { - return null; - } - - @Override - public long size() { - return this.size; - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockFlowRuleService.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockFlowRuleService.java deleted file mode 100644 index 055a4befbbe..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockFlowRuleService.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.collect.Sets; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.flow.DefaultFlowEntry; -import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.FlowRuleOperations; -import org.onosproject.net.flow.FlowRuleServiceAdapter; - -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -public class MockFlowRuleService extends FlowRuleServiceAdapter { - - final Set flows = Sets.newHashSet(); - boolean success; - - int errorFlow = -1; - - public void setErrorFlow(int errorFlow) { - this.errorFlow = errorFlow; - } - - public void setFuture(boolean success) { - this.success = success; - } - - @Override - public void apply(FlowRuleOperations ops) { - AtomicBoolean thisSuccess = new AtomicBoolean(success); - ops.stages().forEach(stage -> stage.forEach(flow -> { - if (errorFlow == flow.rule().id().value()) { - thisSuccess.set(false); - } else { - switch (flow.type()) { - case ADD: - case MODIFY: //TODO is this the right behavior for modify? - flows.add(flow.rule()); - break; - case REMOVE: - flows.remove(flow.rule()); - break; - default: - break; - } - } - })); - if (thisSuccess.get()) { - ops.callback().onSuccess(ops); - } else { - ops.callback().onError(ops); - } - } - - @Override - public int getFlowRuleCount() { - return flows.size(); - } - - @Override - public Iterable getFlowEntries(DeviceId deviceId) { - return flows.stream() - .filter(flow -> flow.deviceId().equals(deviceId)) - .map(DefaultFlowEntry::new) - .collect(Collectors.toList()); - } - - @Override - public void applyFlowRules(FlowRule... flowRules) { - for (FlowRule flow : flowRules) { - flows.add(flow); - } - } - - @Override - public void removeFlowRules(FlowRule... flowRules) { - for (FlowRule flow : flowRules) { - flows.remove(flow); - } - } - - @Override - public Iterable getFlowRulesByGroupId(ApplicationId appId, short groupId) { - return flows.stream() - .filter(flow -> flow.appId() == appId.id() && flow.groupId().id() == groupId) - .collect(Collectors.toList()); - } - - @Override - public Iterable getFlowEntriesById(ApplicationId id) { - return flows.stream() - .filter(flow -> flow.appId() == id.id()) - .map(DefaultFlowEntry::new) - .collect(Collectors.toList()); - } -} - - diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockP4RuntimeController.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockP4RuntimeController.java deleted file mode 100644 index 5fc42d57ced..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockP4RuntimeController.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import io.grpc.ManagedChannel; -import org.onosproject.net.DeviceId; -import org.onosproject.net.device.DeviceAgentListener; -import org.onosproject.net.pi.model.PiPipeconf; -import org.onosproject.net.provider.ProviderId; -import org.onosproject.p4runtime.api.P4RuntimeClient; -import org.onosproject.p4runtime.api.P4RuntimeController; -import org.onosproject.p4runtime.api.P4RuntimeEventListener; - -import static org.easymock.EasyMock.anyLong; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; - -/** - * Currently only used to get mock clients that mock counter read requests. - */ -public class MockP4RuntimeController implements P4RuntimeController { - - private final P4RuntimeClient mockP4rtClient; - - /** - * Used to mock counter read requests. - * - * @param deviceId The ID of the device - * @param packets Packets counter value - * @param bytes Bytes counter value - * @param counterSize The size of the counter array - */ - public MockP4RuntimeController(DeviceId deviceId, long packets, long bytes, int counterSize) { - mockP4rtClient = createMock(P4RuntimeClient.class); - expect(mockP4rtClient.read(anyLong(), anyObject(PiPipeconf.class))) - .andReturn(new MockReadRequest(deviceId, packets, bytes, counterSize)) - .anyTimes(); - replay(mockP4rtClient); - } - - @Override - public P4RuntimeClient get(DeviceId deviceId) { - return mockP4rtClient; - } - - @Override - public void addListener(P4RuntimeEventListener listener) { - - } - - @Override - public void removeListener(P4RuntimeEventListener listener) { - - } - - @Override - public boolean create(DeviceId deviceId, ManagedChannel channel) { - return false; - } - - @Override - public void remove(DeviceId deviceId) { - - } - - @Override - public void addDeviceAgentListener(DeviceId deviceId, ProviderId providerId, - DeviceAgentListener listener) { - - } - - @Override - public void removeDeviceAgentListener(DeviceId deviceId, - ProviderId providerId) { - - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPacketService.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPacketService.java deleted file mode 100644 index 8dc0928867b..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPacketService.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.collect.Queues; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.packet.OutboundPacket; -import org.onosproject.net.packet.PacketPriority; -import org.onosproject.net.packet.PacketProcessor; -import org.onosproject.net.packet.PacketProcessorEntry; -import org.onosproject.net.packet.PacketRequest; -import org.onosproject.net.packet.PacketService; - -import java.util.List; -import java.util.Optional; -import java.util.Queue; - -public class MockPacketService implements PacketService { - - Queue emittedPackets = Queues.newArrayDeque(); - - @Override - public void addProcessor(PacketProcessor processor, int priority) { - - } - - @Override - public void removeProcessor(PacketProcessor processor) { - - } - - @Override - public List getProcessors() { - return null; - } - - @Override - public void requestPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) { - - } - - @Override - public void requestPackets(TrafficSelector selector, PacketPriority priority, - ApplicationId appId, Optional deviceId) { - - } - - @Override - public void cancelPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) { - - } - - @Override - public void cancelPackets(TrafficSelector selector, PacketPriority priority, - ApplicationId appId, Optional deviceId) { - - } - - @Override - public List getRequests() { - return null; - } - - @Override - public void emit(OutboundPacket packet) { - emittedPackets.add(packet); - } -} - - diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipeconfService.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipeconfService.java deleted file mode 100644 index 20c7839732f..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipeconfService.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiPipeconf; -import org.onosproject.net.pi.model.PiPipeconfId; -import org.onosproject.net.pi.model.PiTableModel; -import org.onosproject.net.pi.service.PiPipeconfListener; -import org.onosproject.net.pi.service.PiPipeconfService; - -import java.util.Collection; -import java.util.Optional; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; - -public class MockPiPipeconfService implements PiPipeconfService { - - private final PiPipeconf mockPiPipeconf; - - public MockPiPipeconfService(Collection tables, - Collection counters) { - mockPiPipeconf = createMock(PiPipeconf.class); - expect(mockPiPipeconf.pipelineModel()) - .andReturn(new MockPiPipelineModel(tables, counters)) - .anyTimes(); - replay(mockPiPipeconf); - } - - @Override - public Optional getPipeconf(PiPipeconfId id) { - return Optional.of(mockPiPipeconf); - } - - @Override - public Optional getPipeconf(DeviceId deviceId) { - return Optional.of(mockPiPipeconf); - } - - @Override - public void register(PiPipeconf pipeconf) throws IllegalStateException { - - } - - @Override - public void unregister(PiPipeconfId pipeconfId) throws IllegalStateException { - - } - - @Override - public Iterable getPipeconfs() { - return null; - } - - @Override - public void bindToDevice(PiPipeconfId pipeconfId, DeviceId deviceId) { - - } - - @Override - public String getMergedDriver(DeviceId deviceId, PiPipeconfId pipeconfId) { - return null; - } - - @Override - public Optional ofDevice(DeviceId deviceId) { - return Optional.empty(); - } - - @Override - public void addListener(PiPipeconfListener listener) { - - } - - @Override - public void removeListener(PiPipeconfListener listener) { - - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java deleted file mode 100644 index 2560346d79b..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockPiPipelineModel.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.collect.Maps; -import org.onosproject.net.pi.model.PiActionProfileId; -import org.onosproject.net.pi.model.PiActionProfileModel; -import org.onosproject.net.pi.model.PiCounterId; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiMeterId; -import org.onosproject.net.pi.model.PiMeterModel; -import org.onosproject.net.pi.model.PiPacketOperationModel; -import org.onosproject.net.pi.model.PiPacketOperationType; -import org.onosproject.net.pi.model.PiPipelineModel; -import org.onosproject.net.pi.model.PiRegisterId; -import org.onosproject.net.pi.model.PiRegisterModel; -import org.onosproject.net.pi.model.PiTableId; -import org.onosproject.net.pi.model.PiTableModel; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; - - -public class MockPiPipelineModel implements PiPipelineModel { - - private final Map tableMap = Maps.newHashMap(); - - private final List counters; - - public MockPiPipelineModel(Collection tables, Collection counters) { - tables.forEach(tableModel -> tableMap.put(tableModel.id(), tableModel)); - this.counters = List.copyOf(counters); - } - - @Override - public Optional architecture() { - return Optional.empty(); - } - - @Override - public Optional table(PiTableId tableId) { - return Optional.ofNullable(tableMap.getOrDefault(tableId, null)); - } - - @Override - public Collection tables() { - return tableMap.values(); - } - - @Override - public Optional counter(PiCounterId counterId) { - return Optional.empty(); - } - - @Override - public Collection counters() { - return counters; - } - - @Override - public Optional meter(PiMeterId meterId) { - return Optional.empty(); - } - - @Override - public Collection meters() { - return null; - } - - @Override - public Optional register(PiRegisterId registerId) { - return Optional.empty(); - } - - @Override - public Collection registers() { - return null; - } - - @Override - public Optional actionProfiles(PiActionProfileId actionProfileId) { - return Optional.empty(); - } - - @Override - public Collection actionProfiles() { - return null; - } - - @Override - public Optional packetOperationModel(PiPacketOperationType type) { - return Optional.empty(); - } - - -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadRequest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadRequest.java deleted file mode 100644 index 0f731ea5217..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadRequest.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.pi.model.PiActionProfileId; -import org.onosproject.net.pi.model.PiCounterId; -import org.onosproject.net.pi.model.PiMeterId; -import org.onosproject.net.pi.model.PiTableId; -import org.onosproject.net.pi.runtime.PiCounterCellHandle; -import org.onosproject.net.pi.runtime.PiCounterCellId; -import org.onosproject.net.pi.runtime.PiHandle; -import org.onosproject.p4runtime.api.P4RuntimeReadClient; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.LongStream; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * For faking reads to a p4runtime client. Currently only used for testing - * UP4-specific counter reads, because all other P4 entities that UP4 reads can - * be read via other ONOS services. - */ -public class MockReadRequest implements P4RuntimeReadClient.ReadRequest { - List handles; - DeviceId deviceId; - long packets; - long bytes; - int counterSize; - - public MockReadRequest(DeviceId deviceId, long packets, long bytes, int counterSize) { - this.handles = new ArrayList<>(); - this.deviceId = deviceId; - this.packets = packets; - this.bytes = bytes; - this.counterSize = counterSize; - } - - @Override - public CompletableFuture submit() { - return CompletableFuture.completedFuture( - new MockReadResponse(this.handles, this.packets, this.bytes)); - } - - @Override - public P4RuntimeReadClient.ReadResponse submitSync() { - return new MockReadResponse(this.handles, this.packets, this.bytes); - } - - - @Override - public P4RuntimeReadClient.ReadRequest handle(PiHandle handle) { - this.handles.add(handle); - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest handles(Iterable handles) { - checkNotNull(handles); - handles.forEach(this::handle); - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest tableEntries(PiTableId tableId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest tableEntries(Iterable tableIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest defaultTableEntry(PiTableId tableId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest defaultTableEntry(Iterable tableIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest actionProfileGroups(PiActionProfileId actionProfileId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest actionProfileGroups(Iterable actionProfileIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest actionProfileMembers(PiActionProfileId actionProfileId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest actionProfileMembers(Iterable actionProfileIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest counterCells(PiCounterId counterId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest counterCells(Iterable counterIds) { - counterIds.forEach(counterId -> { - LongStream.range(0, this.counterSize) - .forEach(index -> { - PiCounterCellId cellId = - PiCounterCellId.ofIndirect(counterId, index); - PiCounterCellHandle handle = - PiCounterCellHandle.of(this.deviceId, cellId); - this.handle(handle); - }); - }); - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest directCounterCells(PiTableId tableId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest directCounterCells(Iterable tableIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest meterCells(PiMeterId meterId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest meterCells(Iterable meterIds) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest directMeterCells(PiTableId tableId) { - return this; - } - - @Override - public P4RuntimeReadClient.ReadRequest directMeterCells(Iterable tableIds) { - return this; - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadResponse.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadResponse.java deleted file mode 100644 index 2dbc11fa519..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockReadResponse.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.net.pi.runtime.PiCounterCell; -import org.onosproject.net.pi.runtime.PiCounterCellData; -import org.onosproject.net.pi.runtime.PiCounterCellHandle; -import org.onosproject.net.pi.runtime.PiEntity; -import org.onosproject.net.pi.runtime.PiEntityType; -import org.onosproject.net.pi.runtime.PiHandle; -import org.onosproject.p4runtime.api.P4RuntimeReadClient; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * For faking reads to a p4runtime client. Currently only used for testing - * UP4-specific counter reads, because all other P4 entities that UP4 reads can - * be read via other ONOS services. - */ -public class MockReadResponse implements P4RuntimeReadClient.ReadResponse { - List entities; - long packets; - long bytes; - - public MockReadResponse(Iterable handles, long packets, long bytes) { - this.entities = new ArrayList<>(); - this.packets = packets; - this.bytes = bytes; - checkNotNull(handles); - handles.forEach(this::handle); - } - - @Override - public boolean isSuccess() { - return true; - } - - public MockReadResponse handle(PiHandle handle) { - if (handle.entityType().equals(PiEntityType.COUNTER_CELL)) { - PiCounterCellHandle counterHandle = (PiCounterCellHandle) handle; - PiCounterCellData data = - new PiCounterCellData(this.packets, this.bytes); - PiEntity entity = new PiCounterCell(counterHandle.cellId(), data); - this.entities.add(entity); - } - // Only handles counter cell so far - - return this; - } - - @Override - public Collection all() { - return this.entities; - } - - @Override - public Collection all(Class clazz) { - List results = new ArrayList<>(); - this.entities.forEach(ent -> { - if (ent.getClass().equals(clazz)) { - results.add(clazz.cast(ent)); - } - }); - return results; - } - - @Override - public String explanation() { - return null; - } - - @Override - public Throwable throwable() { - return null; - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockTableModel.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockTableModel.java deleted file mode 100644 index 6584c187ec8..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/MockTableModel.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.net.pi.model.PiActionId; -import org.onosproject.net.pi.model.PiActionModel; -import org.onosproject.net.pi.model.PiActionProfileModel; -import org.onosproject.net.pi.model.PiCounterModel; -import org.onosproject.net.pi.model.PiMatchFieldId; -import org.onosproject.net.pi.model.PiMatchFieldModel; -import org.onosproject.net.pi.model.PiMeterModel; -import org.onosproject.net.pi.model.PiTableId; -import org.onosproject.net.pi.model.PiTableModel; -import org.onosproject.net.pi.model.PiTableType; - -import java.util.Collection; -import java.util.Optional; - -public class MockTableModel implements PiTableModel { - PiTableId id; - int size; - - public MockTableModel(PiTableId id, int size) { - this.id = id; - this.size = size; - } - - @Override - public PiTableId id() { - return this.id; - } - - @Override - public PiTableType tableType() { - return null; - } - - @Override - public PiActionProfileModel actionProfile() { - return null; - } - - @Override - public long maxSize() { - return size; - } - - @Override - public Collection counters() { - return null; - } - - @Override - public Collection meters() { - return null; - } - - @Override - public boolean supportsAging() { - return false; - } - - @Override - public Collection matchFields() { - return null; - } - - @Override - public Collection actions() { - return null; - } - - @Override - public Optional constDefaultAction() { - return Optional.empty(); - } - - @Override - public boolean isConstantTable() { - return false; - } - - @Override - public Optional action(PiActionId actionId) { - return Optional.empty(); - } - - @Override - public Optional matchField(PiMatchFieldId matchFieldId) { - return Optional.empty(); - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestDistributedFabricUpfStore.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestDistributedFabricUpfStore.java deleted file mode 100644 index 3bf3b26b3f7..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestDistributedFabricUpfStore.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import org.onosproject.store.service.TestEventuallyConsistentMap; -import org.onosproject.store.service.WallClockTimestamp; - -import static org.onosproject.pipelines.fabric.impl.behaviour.upf.DistributedFabricUpfStore.FAR_ID_MAP_NAME; -import static org.onosproject.pipelines.fabric.impl.behaviour.upf.DistributedFabricUpfStore.SERIALIZER; - - -public final class TestDistributedFabricUpfStore { - - private TestDistributedFabricUpfStore() { - } - - public static DistributedFabricUpfStore build() { - var store = new DistributedFabricUpfStore(); - TestEventuallyConsistentMap.Builder reverseFarIdMapBuilder = - TestEventuallyConsistentMap.builder(); - reverseFarIdMapBuilder.withName(FAR_ID_MAP_NAME) - .withTimestampProvider((k, v) -> new WallClockTimestamp()) - .withSerializer(SERIALIZER.build()); - store.reverseFarIdMap = reverseFarIdMapBuilder.build(); - - store.activate(); - - // Init with some translation state. - store.reverseFarIdMap.put(TestUpfConstants.UPLINK_PHYSICAL_FAR_ID, - new UpfRuleIdentifier(TestUpfConstants.SESSION_ID, TestUpfConstants.UPLINK_FAR_ID)); - store.reverseFarIdMap.put(TestUpfConstants.DOWNLINK_PHYSICAL_FAR_ID, - new UpfRuleIdentifier(TestUpfConstants.SESSION_ID, TestUpfConstants.DOWNLINK_FAR_ID)); - - return store; - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java deleted file mode 100644 index 71c72121607..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfConstants.java +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.google.common.hash.Hashing; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip4Prefix; -import org.onlab.util.ImmutableByteSequence; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.DefaultApplicationId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.behaviour.upf.ForwardingActionRule; -import org.onosproject.net.behaviour.upf.PacketDetectionRule; -import org.onosproject.net.behaviour.upf.UpfInterface; -import org.onosproject.net.flow.DefaultFlowRule; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.criteria.PiCriterion; -import org.onosproject.net.pi.runtime.PiAction; -import org.onosproject.net.pi.runtime.PiActionParam; - -import java.util.Arrays; - -import static org.onosproject.pipelines.fabric.FabricConstants.CTR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.DROP; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_DOWNLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_FARS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_INTERFACES; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_IFACE; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_PDR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_PDR_QOS; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR; -import static org.onosproject.pipelines.fabric.FabricConstants.FABRIC_INGRESS_SPGW_UPLINK_PDRS; -import static org.onosproject.pipelines.fabric.FabricConstants.FAR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_FAR_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_GTPU_IS_VALID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_HAS_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_IPV4_DST_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TEID; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_TUNNEL_IPV4_DST; -import static org.onosproject.pipelines.fabric.FabricConstants.HDR_UE_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_GTPU_DECAP; -import static org.onosproject.pipelines.fabric.FabricConstants.NEEDS_QFI_PUSH; -import static org.onosproject.pipelines.fabric.FabricConstants.NOTIFY_CP; -import static org.onosproject.pipelines.fabric.FabricConstants.QFI; -import static org.onosproject.pipelines.fabric.FabricConstants.SLICE_ID; -import static org.onosproject.pipelines.fabric.FabricConstants.SRC_IFACE; -import static org.onosproject.pipelines.fabric.FabricConstants.TC; -import static org.onosproject.pipelines.fabric.FabricConstants.TEID; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_DST_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_ADDR; -import static org.onosproject.pipelines.fabric.FabricConstants.TUNNEL_SRC_PORT; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_QFI; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_SLICE_ID; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_TC; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FALSE; -import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.TRUE; -import static org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfTranslator.INTERFACE_ACCESS; -import static org.onosproject.pipelines.fabric.impl.behaviour.upf.FabricUpfTranslator.INTERFACE_CORE; - - -public final class TestUpfConstants { - public static final DeviceId DEVICE_ID = DeviceId.deviceId("CoolSwitch91"); - public static final ApplicationId APP_ID = new DefaultApplicationId(5000, "up4"); - public static final int DEFAULT_PRIORITY = 10; - // SESSION_ID_BITWIDTH / 8 = 12 - public static final ImmutableByteSequence SESSION_ID = ImmutableByteSequence.ofOnes(12); - public static final int UPLINK_COUNTER_CELL_ID = 1; - public static final int DOWNLINK_COUNTER_CELL_ID = 2; - public static final int PDR_ID = 0; // TODO: PDR ID currently not stored on writes, so all reads are 0 - public static final int UPLINK_FAR_ID = 1; - public static final int UPLINK_PHYSICAL_FAR_ID = Hashing.murmur3_32() - .newHasher() - .putInt(UPLINK_FAR_ID) - .putBytes(SESSION_ID.asArray()) - .hash() - .asInt(); - public static final int DOWNLINK_FAR_ID = 2; - public static final int DOWNLINK_PHYSICAL_FAR_ID = Hashing.murmur3_32() - .newHasher() - .putInt(DOWNLINK_FAR_ID) - .putBytes(SESSION_ID.asArray()) - .hash() - .asInt(); - - public static final byte UPLINK_QFI = 1; - public static final byte DOWNLINK_QFI = 5; - - public static final ImmutableByteSequence TEID_VALUE = ImmutableByteSequence.copyFrom(0xff); - public static final Ip4Address UE_ADDR = Ip4Address.valueOf("17.0.0.1"); - public static final Ip4Address S1U_ADDR = Ip4Address.valueOf("192.168.0.1"); - public static final Ip4Address ENB_ADDR = Ip4Address.valueOf("192.168.0.2"); - public static final Ip4Prefix UE_POOL = Ip4Prefix.valueOf("17.0.0.0/16"); - // TODO: tunnel source port currently not stored on writes, so all reads are 0 - public static final short TUNNEL_SPORT = 2160; - public static final int PHYSICAL_COUNTER_SIZE = 512; - public static final int PHYSICAL_MAX_PDRS = 512; - public static final int PHYSICAL_MAX_FARS = 512; - - public static final long COUNTER_BYTES = 12; - public static final long COUNTER_PKTS = 15; - - public static final PacketDetectionRule UPLINK_PDR = PacketDetectionRule.builder() - .withTunnelDst(S1U_ADDR) - .withTeid(TEID_VALUE) - .withLocalFarId(UPLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(UPLINK_COUNTER_CELL_ID) - .build(); - - public static final PacketDetectionRule DOWNLINK_PDR = PacketDetectionRule.builder() - .withUeAddr(UE_ADDR) - .withLocalFarId(DOWNLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(DOWNLINK_COUNTER_CELL_ID) - .build(); - - public static final PacketDetectionRule UPLINK_QOS_PDR = PacketDetectionRule.builder() - .withTunnelDst(S1U_ADDR) - .withTeid(TEID_VALUE) - .withLocalFarId(UPLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(UPLINK_COUNTER_CELL_ID) - .withQfi(UPLINK_QFI) - .withQfiMatch() - .build(); - - public static final PacketDetectionRule UPLINK_QOS_4G_PDR = PacketDetectionRule.builder() - .withTunnelDst(S1U_ADDR) - .withTeid(TEID_VALUE) - .withLocalFarId(UPLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(UPLINK_COUNTER_CELL_ID) - .withQfi(UPLINK_QFI) - .build(); - - public static final PacketDetectionRule DOWNLINK_QOS_PDR = PacketDetectionRule.builder() - .withUeAddr(UE_ADDR) - .withLocalFarId(DOWNLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(DOWNLINK_COUNTER_CELL_ID) - .withQfi(DOWNLINK_QFI) - .withQfiPush() - .build(); - - public static final PacketDetectionRule DOWNLINK_QOS_4G_PDR = PacketDetectionRule.builder() - .withUeAddr(UE_ADDR) - .withLocalFarId(DOWNLINK_FAR_ID) - .withSessionId(SESSION_ID) - .withCounterId(DOWNLINK_COUNTER_CELL_ID) - .withQfi(DOWNLINK_QFI) - .build(); - - public static final ForwardingActionRule UPLINK_FAR = ForwardingActionRule.builder() - .setFarId(UPLINK_FAR_ID) - .withSessionId(SESSION_ID).build(); - - public static final ForwardingActionRule DOWNLINK_FAR = ForwardingActionRule.builder() - .setFarId(DOWNLINK_FAR_ID) - .withSessionId(SESSION_ID) - .setTunnel(S1U_ADDR, ENB_ADDR, TEID_VALUE, TUNNEL_SPORT) - .build(); - - public static final UpfInterface UPLINK_INTERFACE = UpfInterface.createS1uFrom(S1U_ADDR); - - public static final UpfInterface DOWNLINK_INTERFACE = UpfInterface.createUePoolFrom(UE_POOL); - - public static final FlowRule FABRIC_UPLINK_QOS_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_UPLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_TEID, TEID_VALUE.asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) - .matchExact(HDR_HAS_QFI, TRUE) - .matchExact(HDR_QFI, UPLINK_QFI) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, TRUE), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_UPLINK_QOS_4G_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_UPLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_TEID, TEID_VALUE.asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) - .matchExact(HDR_HAS_QFI, FALSE) - .matchExact(HDR_QFI, DEFAULT_QFI) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, TRUE), - new PiActionParam(NEEDS_QFI_PUSH, FALSE), - new PiActionParam(QFI, - UPLINK_QFI), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_DOWNLINK_QOS_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_UE_ADDR, UE_ADDR.toInt()) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), - new PiActionParam(QFI, DOWNLINK_QFI), - new PiActionParam(NEEDS_GTPU_DECAP, FALSE), - new PiActionParam(NEEDS_QFI_PUSH, TRUE), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_DOWNLINK_QOS_4G_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_UE_ADDR, UE_ADDR.toInt()) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR_QOS) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), - new PiActionParam(QFI, DOWNLINK_QFI), - new PiActionParam(NEEDS_GTPU_DECAP, FALSE), - new PiActionParam(NEEDS_QFI_PUSH, FALSE), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_UPLINK_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_UPLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_TEID, TEID_VALUE.asArray()) - .matchExact(HDR_TUNNEL_IPV4_DST, S1U_ADDR.toInt()) - .matchExact(HDR_HAS_QFI, FALSE) - .matchExact(HDR_QFI, DEFAULT_QFI) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, UPLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, UPLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, TRUE), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_DOWNLINK_PDR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_DOWNLINK_PDRS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_UE_ADDR, UE_ADDR.toInt()) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_PDR) - .withParameters(Arrays.asList( - new PiActionParam(CTR_ID, DOWNLINK_COUNTER_CELL_ID), - new PiActionParam(FAR_ID, DOWNLINK_PHYSICAL_FAR_ID), - new PiActionParam(NEEDS_GTPU_DECAP, FALSE), - new PiActionParam(TC, DEFAULT_TC) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_UPLINK_FAR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_FARS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_FAR_ID, UPLINK_PHYSICAL_FAR_ID) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR) - .withParameters(Arrays.asList( - new PiActionParam(DROP, 0), - new PiActionParam(NOTIFY_CP, 0) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_DOWNLINK_FAR = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_FARS) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchExact(HDR_FAR_ID, DOWNLINK_PHYSICAL_FAR_ID) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR) - .withParameters(Arrays.asList( - new PiActionParam(DROP, 0), - new PiActionParam(NOTIFY_CP, 0), - new PiActionParam(TEID, TEID_VALUE), - new PiActionParam(TUNNEL_SRC_ADDR, S1U_ADDR.toInt()), - new PiActionParam(TUNNEL_DST_ADDR, ENB_ADDR.toInt()), - new PiActionParam(TUNNEL_SRC_PORT, TUNNEL_SPORT) - )) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_UPLINK_INTERFACE = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_INTERFACES) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchLpm(HDR_IPV4_DST_ADDR, - S1U_ADDR.toInt(), - 32) - .matchExact(HDR_GTPU_IS_VALID, 1) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction( - PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) - .withParameter(new PiActionParam(SRC_IFACE, INTERFACE_ACCESS)) - .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - public static final FlowRule FABRIC_DOWNLINK_INTERFACE = DefaultFlowRule.builder() - .forDevice(DEVICE_ID).fromApp(APP_ID).makePermanent() - .forTable(FABRIC_INGRESS_SPGW_INTERFACES) - .withSelector(DefaultTrafficSelector.builder() - .matchPi(PiCriterion.builder() - .matchLpm(HDR_IPV4_DST_ADDR, - UE_POOL.address().toInt(), - UE_POOL.prefixLength()) - .matchExact(HDR_GTPU_IS_VALID, 0) - .build()).build()) - .withTreatment(DefaultTrafficTreatment.builder() - .piTableAction(PiAction.builder() - .withId(FABRIC_INGRESS_SPGW_LOAD_IFACE) - .withParameter(new PiActionParam(SRC_IFACE, INTERFACE_CORE)) - .withParameter(new PiActionParam(SLICE_ID, DEFAULT_SLICE_ID)) - .build()).build()) - .withPriority(DEFAULT_PRIORITY) - .build(); - - /** - * Hidden constructor for utility class. - */ - private TestUpfConstants() { - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfUtils.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfUtils.java deleted file mode 100644 index 6280f8ef04d..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/TestUpfUtils.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.pipelines.fabric.impl.behaviour.upf; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.onosproject.net.DeviceId; -import org.onosproject.net.config.basics.BasicDeviceConfig; - -import java.io.IOException; -import java.io.InputStream; - -public final class TestUpfUtils { - - private static final String BASIC_CONFIG_KEY = "basic"; - - private TestUpfUtils() { - // hide constructor - } - - public static BasicDeviceConfig getBasicConfig(DeviceId deviceId, String fileName) - throws IOException { - BasicDeviceConfig basicCfg = new BasicDeviceConfig(); - InputStream jsonStream = TestUpfUtils.class.getResourceAsStream(fileName); - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonNode = mapper.readTree(jsonStream); - basicCfg.init(deviceId, BASIC_CONFIG_KEY, jsonNode, mapper, config -> { - }); - return basicCfg; - } -} diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java deleted file mode 100644 index fe4c5903ed3..00000000000 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/upf/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2021-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Unit tests for UPF programmable behaviour. - */ -package org.onosproject.pipelines.fabric.impl.behaviour.upf; From 5ab309fc691c48fa392a0e6c4a6beaa59e3a0e5d Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Wed, 5 Jan 2022 11:23:51 +0100 Subject: [PATCH 171/235] Fix toString in UPF UE Sessions and Terminations Change-Id: I90c9d3180ba9cbbd688ccadd5734792c13504c56 --- .../java/org/onosproject/net/behaviour/upf/SessionDownlink.java | 2 +- .../java/org/onosproject/net/behaviour/upf/SessionUplink.java | 2 +- .../onosproject/net/behaviour/upf/UpfTerminationDownlink.java | 2 +- .../org/onosproject/net/behaviour/upf/UpfTerminationUplink.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java index c35410bf28e..8146d2b6a7e 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java @@ -75,7 +75,7 @@ public int hashCode() { @Override public String toString() { - return "UESessionDL{" + matchString() + " -> " + actionString(); + return "UESessionDL{" + matchString() + " -> " + actionString() + "}"; } private String matchString() { diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java index 70db84cc71c..a2f046005ff 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java @@ -72,7 +72,7 @@ public int hashCode() { @Override public String toString() { - return "UESessionUL{" + matchString() + " -> " + actionString(); + return "UESessionUL{" + matchString() + " -> " + actionString() + "}"; } private String matchString() { diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java index 3bc9a91b059..1c11dcc4920 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -141,7 +141,7 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationUL{" + matchString() + "->" + actionString() + "}"; + return "TerminationDL{" + matchString() + "->" + actionString() + "}"; } private String matchString() { diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java index 74dbc0132ce..f7592020a82 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -117,7 +117,7 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationDL{" + matchString() + "->" + actionString() + "}"; + return "TerminationUL{" + matchString() + "->" + actionString() + "}"; } private String matchString() { From a618d74a7596633d666679f709a853d374fe2cb9 Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Tue, 4 Jan 2022 16:39:44 -0800 Subject: [PATCH 172/235] Avoid probing hosts on non-existent or disabled ports - All ports that has a subnet configured in netcfg will be used for probing - A port may not exist on the device even if it's configured in interfces - A port will never be added to the edge port list if it is never enabled If a port meets both conditions above, it will fail the isEdgePort check and produce repeating warning messages. This patch explicitly avoid probing on non-existent or disabled ports Change-Id: I5cc5f32d4b2ff9fc00729e0adddbede29fb49ca0 --- .../net/host/impl/HostManager.java | 2 +- .../net/host/impl/HostMonitor.java | 22 +++++++++++++++---- .../net/host/impl/HostMonitorTest.java | 21 +++++++++++++----- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java index a02159c9333..adeda77f93c 100644 --- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java +++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java @@ -193,7 +193,7 @@ public void activate(ComponentContext context) { eventDispatcher.addSink(HostEvent.class, listenerRegistry); cfgService.registerProperties(getClass()); networkConfigService.addListener(networkConfigListener); - monitor = new HostMonitor(packetService, this, interfaceService, edgePortService); + monitor = new HostMonitor(packetService, this, interfaceService, edgePortService, deviceService); monitor.setProbeRate(probeRate); monitor.start(); cfgService.registerProperties(getClass()); diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java index ef1c796dc1d..82522139597 100644 --- a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java +++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java @@ -25,6 +25,8 @@ import org.onlab.packet.VlanId; import org.onlab.packet.ndp.NeighborSolicitation; import org.onlab.util.SharedScheduledExecutors; +import org.onosproject.net.Port; +import org.onosproject.net.device.DeviceService; import org.onosproject.net.intf.InterfaceService; import org.onosproject.net.ConnectPoint; import org.onosproject.net.Host; @@ -63,6 +65,7 @@ public class HostMonitor implements Runnable { private HostManager hostManager; private InterfaceService interfaceService; private EdgePortService edgePortService; + private DeviceService deviceService; private final Set monitoredAddresses; @@ -78,19 +81,21 @@ public class HostMonitor implements Runnable { * Creates a new host monitor. * * @param packetService packet service used to send packets on the data plane - * @param hostManager host manager used to look up host information and - * probe existing hosts + * @param hostManager host manager used to look up host information and probe existing hosts * @param interfaceService interface service for interface information * @param edgePortService edge port service + * @param deviceService device service */ public HostMonitor(PacketService packetService, HostManager hostManager, InterfaceService interfaceService, - EdgePortService edgePortService) { + EdgePortService edgePortService, + DeviceService deviceService) { this.packetService = packetService; this.hostManager = hostManager; this.interfaceService = interfaceService; this.edgePortService = edgePortService; + this.deviceService = deviceService; monitoredAddresses = Collections.newSetFromMap(new ConcurrentHashMap<>()); hostProviders = new ConcurrentHashMap<>(); @@ -188,8 +193,17 @@ private void probe(IpAddress ip) { */ private void sendRequest(IpAddress targetIp) { interfaceService.getMatchingInterfaces(targetIp).forEach(intf -> { + Port port = deviceService.getPort(intf.connectPoint()); + if (port == null) { + log.debug("Aborting probing non-existent port: {}", intf); + return; + } + if (!port.isEnabled()) { + log.debug("Aborting probing disabled port: {}", intf); + return; + } if (!edgePortService.isEdgePoint(intf.connectPoint())) { - log.warn("Aborting attempt to send probe out non-edge port: {}", intf); + log.warn("Aborting probing non-edge port: {}", intf); return; } diff --git a/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java b/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java index 37ae0d39f44..d492e39f569 100644 --- a/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java +++ b/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java @@ -126,7 +126,7 @@ private void testMonitorHostExists(IpAddress hostIp) throws Exception { expectLastCall().times(2); replay(hostProvider); - hostMonitor = new HostMonitor(null, hostManager, null, edgePortService); + hostMonitor = new HostMonitor(null, hostManager, null, edgePortService, null); hostMonitor.registerHostProvider(hostProvider); hostMonitor.addMonitoringFor(hostIp); @@ -151,6 +151,7 @@ public void testMonitorIpv4HostDoesNotExist() throws Exception { Port port = createMock(Port.class); expect(port.number()).andReturn(portNum).anyTimes(); + expect(port.isEnabled()).andReturn(true).anyTimes(); replay(port); TestDeviceService deviceService = new TestDeviceService(); @@ -173,7 +174,7 @@ public void testMonitorIpv4HostDoesNotExist() throws Exception { // Run the test - hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService); + hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService); hostMonitor.addMonitoringFor(TARGET_IPV4_ADDR); hostMonitor.run(); @@ -220,6 +221,7 @@ public void testMonitorIpv6HostDoesNotExist() throws Exception { Port port = createMock(Port.class); expect(port.number()).andReturn(portNum).anyTimes(); + expect(port.isEnabled()).andReturn(true).anyTimes(); replay(port); TestDeviceService deviceService = new TestDeviceService(); @@ -242,7 +244,7 @@ public void testMonitorIpv6HostDoesNotExist() throws Exception { // Run the test - hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService); + hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService); hostMonitor.addMonitoringFor(TARGET_IPV6_ADDR); hostMonitor.run(); @@ -291,6 +293,7 @@ public void testMonitorIpv4HostDoesNotExistWithVlan() throws Exception { Port port = createMock(Port.class); expect(port.number()).andReturn(portNum).anyTimes(); + expect(port.isEnabled()).andReturn(true).anyTimes(); replay(port); TestDeviceService deviceService = new TestDeviceService(); @@ -313,7 +316,7 @@ public void testMonitorIpv4HostDoesNotExistWithVlan() throws Exception { // Run the test - hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService); + hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService); hostMonitor.addMonitoringFor(TARGET_IPV4_ADDR); hostMonitor.run(); @@ -361,6 +364,7 @@ public void testMonitorIpv6HostDoesNotExistWithVlan() throws Exception { Port port = createMock(Port.class); expect(port.number()).andReturn(portNum).anyTimes(); + expect(port.isEnabled()).andReturn(true).anyTimes(); replay(port); TestDeviceService deviceService = new TestDeviceService(); @@ -383,7 +387,7 @@ public void testMonitorIpv6HostDoesNotExistWithVlan() throws Exception { // Run the test - hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService); + hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService); hostMonitor.addMonitoringFor(TARGET_IPV6_ADDR); hostMonitor.run(); @@ -451,5 +455,12 @@ public List getPorts(DeviceId deviceId) { } return ports; } + + @Override + public Port getPort(ConnectPoint cp) { + return devicePorts.get(cp.deviceId()).stream() + .filter(p -> p.number().equals(cp.port())) + .findAny().orElse(null); + } } } From 041d4497e2e1319832582b6e249a3fce22055e55 Mon Sep 17 00:00:00 2001 From: Ray Milkey Date: Wed, 5 Jan 2022 11:33:10 -0800 Subject: [PATCH 173/235] Upgrade karaf to version 4.2.14 Change-Id: Ibfa72941a01fb8026513d39f5b3d5f2bb3dcc9d2 --- deps/deps.json | 14 ++--- tools/build/bazel/generate_workspace.bzl | 44 ++++++++-------- tools/build/bazel/osgi_features.bzl | 2 +- tools/build/build-offline-karaf | 11 ++-- tools/build/envDefaults | 2 +- tools/build/push-karaf | 50 ++++++++++++++++++ tools/package/bin/onos-backup | 2 +- tools/package/bin/onos-restore | 2 +- tools/package/dependencies/template.pom | 2 +- .../package/etc/org.apache.karaf.features.cfg | 52 +++++++++---------- tools/package/etc/startup.properties | 26 ++++------ tools/package/onos-prep-karaf | 6 +-- tools/package/onos_stage.py | 2 +- 13 files changed, 128 insertions(+), 87 deletions(-) create mode 100755 tools/build/push-karaf diff --git a/deps/deps.json b/deps/deps.json index f653a15df62..042ca402b46 100644 --- a/deps/deps.json +++ b/deps/deps.json @@ -251,14 +251,14 @@ "org.osgi.service.metatype.annotations": "mvn:org.osgi:org.osgi.service.metatype.annotations:1.4.0", "org.osgi.service.cm": "mvn:org.osgi:org.osgi.service.cm:1.6.0", "org.apache.felix.scr.bnd": "mvn:org.apache.felix:org.apache.felix.scr.bnd:1.9.0", - "org.apache.karaf.bundle.core": "mvn:org.apache.karaf.bundle:org.apache.karaf.bundle.core:4.2.9", - "org.apache.karaf.features.core": "mvn:org.apache.karaf.features:org.apache.karaf.features.core:4.2.9", - "org.apache.karaf.shell.console": "mvn:org.apache.karaf.shell:org.apache.karaf.shell.console:4.2.9", - "org.apache.karaf.shell.core": "mvn:org.apache.karaf.shell:org.apache.karaf.shell.core:4.2.9", + "org.apache.karaf.bundle.core": "mvn:org.apache.karaf.bundle:org.apache.karaf.bundle.core:4.2.14", + "org.apache.karaf.features.core": "mvn:org.apache.karaf.features:org.apache.karaf.features.core:4.2.14", + "org.apache.karaf.shell.console": "mvn:org.apache.karaf.shell:org.apache.karaf.shell.console:4.2.14", + "org.apache.karaf.shell.core": "mvn:org.apache.karaf.shell:org.apache.karaf.shell.core:4.2.14", "org.apache.httpcomponents.httpasyncclient-osgi": "mvn:org.apache.httpcomponents:httpasyncclient-osgi:4.1.2", "org.apache.httpcomponents.httpcore-nio": "mvn:org.apache.httpcomponents:httpcore-nio:4.4.4", - "org.apache.karaf.jaas": "mvn:org.apache.karaf.jaas:org.apache.karaf.jaas.modules:4.2.9", - "org.apache.karaf.system.core": "mvn:org.apache.karaf.system:org.apache.karaf.system.core:4.2.9", + "org.apache.karaf.jaas": "mvn:org.apache.karaf.jaas:org.apache.karaf.jaas.modules:4.2.14", + "org.apache.karaf.system.core": "mvn:org.apache.karaf.system:org.apache.karaf.system.core:4.2.14", "org.apache.servicemix.bundles.snmp4j": "mvn:org.apache.servicemix.bundles:org.apache.servicemix.bundles.snmp4j:2.3.4_1", "org.osgi.cmpn": "mvn:org.osgi:osgi.cmpn:6.0.0", "osgi-core": "mvn:org.osgi:org.osgi.core:6.0.0", @@ -275,7 +275,7 @@ "validation-api": "mvn:javax.validation:validation-api:2.0.1.Final", "checkstyle": "mvn:com.puppycrawl.tools:checkstyle:8.10", // N.B. WHEN UPDATING KARAF: check the kafka-clients library version. Chain of dependencies: karaf->pax-logging-log4j2->log4j2-core->kafka-clients - "apache-karaf": "https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.9-offline-20200706/apache-karaf-4.2.9-offline-20200706.tar.gz", + "apache-karaf": "https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.14-offline-20220105/apache-karaf-4.2.14-offline-20220105.tar.gz", "bndlib": "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.1.0", "bndexe": "mvn:biz.aQute.bnd:biz.aQute.bnd:4.1.0", "libthrift": "mvn:org.apache.thrift:libthrift:0.11.0", diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index 55c35c7cbe1..5ebcd10cd74 100644 --- a/tools/build/bazel/generate_workspace.bzl +++ b/tools/build/bazel/generate_workspace.bzl @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Tue, 30 Mar 2021 16:02:11 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Thu, 6 Jan 2022 08:36:09 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -871,27 +871,27 @@ def generated_maven_jars(): if "org_apache_karaf_bundle_core" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_bundle_core", - jar_sha256 = "1b494b5c596e1b5fe81136c69a7b0e3ad8e86134207c46bf4cbb029b5414aaf8", + jar_sha256 = "e4b1d099c21c03308855055c9df9993fbdba826d4b5301a5fb75f9d194fbef93", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/bundle/org.apache.karaf.bundle.core/4.2.9/org.apache.karaf.bundle.core-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/bundle/org.apache.karaf.bundle.core/4.2.14/org.apache.karaf.bundle.core-4.2.14.jar"], ) if "org_apache_karaf_features_core" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_features_core", - jar_sha256 = "0b9baf7a41e95d184f26d59cd923431900699b6bf55e09b883300d43fa97aa18", + jar_sha256 = "98273471d25ad9b01c8d2bee22c99f01f5f0763aed66d0fc79a1910ab0faf3b9", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/features/org.apache.karaf.features.core/4.2.9/org.apache.karaf.features.core-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/features/org.apache.karaf.features.core/4.2.14/org.apache.karaf.features.core-4.2.14.jar"], ) if "org_apache_karaf_shell_console" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_shell_console", - jar_sha256 = "8bb60748f6bf6498b8f2c13cf96919e6f8c361af97d9a373eade474841e85196", + jar_sha256 = "08bcab878989aec2ef352aebe99d6a03e490fd76cb6dbe43208a3eec78f3dcee", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/shell/org.apache.karaf.shell.console/4.2.9/org.apache.karaf.shell.console-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/shell/org.apache.karaf.shell.console/4.2.14/org.apache.karaf.shell.console-4.2.14.jar"], ) if "org_apache_karaf_shell_core" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_shell_core", - jar_sha256 = "2b39bfcc5972271f697894364d7937a72317962248b6a6734614f656cb840459", + jar_sha256 = "e769595061487eeb143c298f4d01272cfc3f78ef6ef8c5e49ff8b0689a647e99", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/shell/org.apache.karaf.shell.core/4.2.9/org.apache.karaf.shell.core-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/shell/org.apache.karaf.shell.core/4.2.14/org.apache.karaf.shell.core-4.2.14.jar"], ) if "org_apache_httpcomponents_httpasyncclient_osgi" not in native.existing_rules(): java_import_external( name = "org_apache_httpcomponents_httpasyncclient_osgi", @@ -907,15 +907,15 @@ def generated_maven_jars(): if "org_apache_karaf_jaas" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_jaas", - jar_sha256 = "a24b744898d9d1bafcd0c094270652896d1e4e4ebaacb35b638dd46b93e5c600", + jar_sha256 = "3434034496ee96593cb13c9461380f88c6868f3797b45464c931ff02441dc225", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/jaas/org.apache.karaf.jaas.modules/4.2.9/org.apache.karaf.jaas.modules-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/jaas/org.apache.karaf.jaas.modules/4.2.14/org.apache.karaf.jaas.modules-4.2.14.jar"], ) if "org_apache_karaf_system_core" not in native.existing_rules(): java_import_external( name = "org_apache_karaf_system_core", - jar_sha256 = "34d1f8057b7d2226cbd1a5219454d038c1799995e9ac9626baa35e284ddfa238", + jar_sha256 = "307ce836799a81562b9d181d89a049aebeae7c2961d1cb4feabf2b7f1165aaef", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/system/org.apache.karaf.system.core/4.2.9/org.apache.karaf.system.core-4.2.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/apache/karaf/system/org.apache.karaf.system.core/4.2.14/org.apache.karaf.system.core-4.2.14.jar"], ) if "org_apache_servicemix_bundles_snmp4j" not in native.existing_rules(): java_import_external( name = "org_apache_servicemix_bundles_snmp4j", @@ -1009,9 +1009,9 @@ def generated_maven_jars(): if "apache_karaf" not in native.existing_rules(): java_import_external( name = "apache_karaf", - jar_sha256 = "ad1c15da75d9112537df09bef1e9fcadb11446619f38a22105592a9273061bf4", + jar_sha256 = "892241ce4b48406e7f66d6a4e40bfb039a2dfbf88760e6ff8a62a7df680bcaf9", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.9-offline-20200706/apache-karaf-4.2.9-offline-20200706.tar.gz"], ) + jar_urls = ["https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.14-offline-20220105/apache-karaf-4.2.14-offline-20220105.tar.gz"], ) if "bndlib" not in native.existing_rules(): java_import_external( name = "bndlib", @@ -1467,14 +1467,14 @@ artifact_map["@org_osgi_service_component_annotations//:org_osgi_service_compone artifact_map["@org_osgi_service_metatype_annotations//:org_osgi_service_metatype_annotations"] = "mvn:org.osgi:org.osgi.service.metatype.annotations:jar:1.4.0" artifact_map["@org_osgi_service_cm//:org_osgi_service_cm"] = "mvn:org.osgi:org.osgi.service.cm:jar:1.6.0" artifact_map["@org_apache_felix_scr_bnd//:org_apache_felix_scr_bnd"] = "mvn:org.apache.felix:org.apache.felix.scr.bnd:jar:NON-OSGI:1.9.0" -artifact_map["@org_apache_karaf_bundle_core//:org_apache_karaf_bundle_core"] = "mvn:org.apache.karaf.bundle:org.apache.karaf.bundle.core:jar:4.2.9" -artifact_map["@org_apache_karaf_features_core//:org_apache_karaf_features_core"] = "mvn:org.apache.karaf.features:org.apache.karaf.features.core:jar:4.2.9" -artifact_map["@org_apache_karaf_shell_console//:org_apache_karaf_shell_console"] = "mvn:org.apache.karaf.shell:org.apache.karaf.shell.console:jar:4.2.9" -artifact_map["@org_apache_karaf_shell_core//:org_apache_karaf_shell_core"] = "mvn:org.apache.karaf.shell:org.apache.karaf.shell.core:jar:4.2.9" +artifact_map["@org_apache_karaf_bundle_core//:org_apache_karaf_bundle_core"] = "mvn:org.apache.karaf.bundle:org.apache.karaf.bundle.core:jar:4.2.14" +artifact_map["@org_apache_karaf_features_core//:org_apache_karaf_features_core"] = "mvn:org.apache.karaf.features:org.apache.karaf.features.core:jar:4.2.14" +artifact_map["@org_apache_karaf_shell_console//:org_apache_karaf_shell_console"] = "mvn:org.apache.karaf.shell:org.apache.karaf.shell.console:jar:4.2.14" +artifact_map["@org_apache_karaf_shell_core//:org_apache_karaf_shell_core"] = "mvn:org.apache.karaf.shell:org.apache.karaf.shell.core:jar:4.2.14" artifact_map["@org_apache_httpcomponents_httpasyncclient_osgi//:org_apache_httpcomponents_httpasyncclient_osgi"] = "mvn:org.apache.httpcomponents:httpasyncclient-osgi:jar:4.1.2" artifact_map["@org_apache_httpcomponents_httpcore_nio//:org_apache_httpcomponents_httpcore_nio"] = "mvn:org.apache.httpcomponents:httpcore-nio:jar:NON-OSGI:4.4.4" -artifact_map["@org_apache_karaf_jaas//:org_apache_karaf_jaas"] = "mvn:org.apache.karaf.jaas:org.apache.karaf.jaas.modules:jar:4.2.9" -artifact_map["@org_apache_karaf_system_core//:org_apache_karaf_system_core"] = "mvn:org.apache.karaf.system:org.apache.karaf.system.core:jar:4.2.9" +artifact_map["@org_apache_karaf_jaas//:org_apache_karaf_jaas"] = "mvn:org.apache.karaf.jaas:org.apache.karaf.jaas.modules:jar:4.2.14" +artifact_map["@org_apache_karaf_system_core//:org_apache_karaf_system_core"] = "mvn:org.apache.karaf.system:org.apache.karaf.system.core:jar:4.2.14" artifact_map["@org_apache_servicemix_bundles_snmp4j//:org_apache_servicemix_bundles_snmp4j"] = "mvn:org.apache.servicemix.bundles:org.apache.servicemix.bundles.snmp4j:jar:2.3.4_1" artifact_map["@org_osgi_cmpn//:org_osgi_cmpn"] = "mvn:org.osgi:osgi.cmpn:jar:6.0.0" artifact_map["@osgi_core//:osgi_core"] = "mvn:org.osgi:org.osgi.core:jar:6.0.0" @@ -1490,7 +1490,7 @@ artifact_map["@slf4j_nop//:slf4j_nop"] = "mvn:org.slf4j:slf4j-nop:jar:1.7.25" artifact_map["@typesafe_config//:typesafe_config"] = "mvn:com.typesafe:config:jar:1.3.2" artifact_map["@validation_api//:validation_api"] = "mvn:javax.validation:validation-api:jar:2.0.1.Final" artifact_map["@checkstyle//:checkstyle"] = "mvn:com.puppycrawl.tools:checkstyle:jar:NON-OSGI:8.10" -artifact_map["@apache_karaf//:apache_karaf"] = "https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.9-offline-20200706/apache-karaf-4.2.9-offline-20200706.tar.gz" +artifact_map["@apache_karaf//:apache_karaf"] = "https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.14-offline-20220105/apache-karaf-4.2.14-offline-20220105.tar.gz" artifact_map["@bndlib//:bndlib"] = "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.1.0" artifact_map["@bndexe//:bndexe"] = "mvn:biz.aQute.bnd:biz.aQute.bnd:jar:4.1.0" artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.11.0" diff --git a/tools/build/bazel/osgi_features.bzl b/tools/build/bazel/osgi_features.bzl index a15618956d7..e83df6822da 100644 --- a/tools/build/bazel/osgi_features.bzl +++ b/tools/build/bazel/osgi_features.bzl @@ -102,7 +102,7 @@ FEATURES_HEADER = '''\ - mvn:org.apache.karaf.features/standard/4.2.9/xml/features + mvn:org.apache.karaf.features/standard/4.2.14/xml/features ''' % ONOS_VERSION FEATURES_FOOTER = "" diff --git a/tools/build/build-offline-karaf b/tools/build/build-offline-karaf index 3563c490882..f5aa56067d4 100755 --- a/tools/build/build-offline-karaf +++ b/tools/build/build-offline-karaf @@ -1,7 +1,6 @@ #!/bin/bash -KARAF_RELEASE_VERSION="4.2.9" -KARAF_BASE_PACKAGE_VERSION="4.2.9" +KARAF_BASE_PACKAGE_VERSION="$KARAF_RELEASE_VERSION" KARAF_TARFILE_NAME="apache-karaf-${KARAF_RELEASE_VERSION}.tar" ADDED_BOOT_FEATURES="kar/${KARAF_RELEASE_VERSION},webconsole/${KARAF_RELEASE_VERSION},scr/${KARAF_RELEASE_VERSION},war/${KARAF_RELEASE_VERSION}" @@ -9,13 +8,14 @@ ADDED_BOOT_FEATURES="kar/${KARAF_RELEASE_VERSION},webconsole/${KARAF_RELEASE_VER rm -f /tmp/${KARAF_TARFILE_NAME} curl -o /tmp/${KARAF_TARFILE_NAME}.gz https://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/${KARAF_BASE_PACKAGE_VERSION}/apache-karaf-${KARAF_BASE_PACKAGE_VERSION}.tar.gz -# get a small cell source ${ONOS_ROOT}/tools/dev/bash_profile -cell borrow 60 1+0 scp /tmp/${KARAF_TARFILE_NAME}.gz sdn@[${OC1}]:/tmp/${KARAF_TARFILE_NAME}.gz ssh sdn@${OC1} " + # clear out the existing maven cache + rm -rf ~/.m2/repository + # unroll the base karaf rm -rf karaf mkdir karaf @@ -53,9 +53,8 @@ ssh sdn@${OC1} " # fetch the new offline karaf tar ball BUILD_NUMBER="${KARAF_RELEASE_VERSION}-offline-$(date +'%Y%m%d')" -scp sdn@[${OC1}]:karaf-offline.tar.gz /tmp/${BUILD_NUMBER}.tar.gz +scp sdn@[${OC1}]:karaf-offline.tar.gz ./apache-karaf-${BUILD_NUMBER}.tar.gz -cell return diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 791a711ac6c..dc47fb8fc22 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -5,7 +5,7 @@ export ONOS_ROOT=${ONOS_ROOT:-~/onos} # M2 repository and Karaf gold bits export M2_REPO=${M2_REPO:-~/.m2/repository} -export KARAF_VERSION=4.2.9 +export KARAF_VERSION=4.2.14 export KARAF_ZIP=${KARAF_ZIP:-~/Downloads/apache-karaf-$KARAF_VERSION.zip} export KARAF_TAR=${KARAF_TAR:-~/Downloads/apache-karaf-$KARAF_VERSION.tar.gz} export KARAF_DIST=$(basename $KARAF_ZIP .zip) diff --git a/tools/build/push-karaf b/tools/build/push-karaf new file mode 100755 index 00000000000..7d74a74187d --- /dev/null +++ b/tools/build/push-karaf @@ -0,0 +1,50 @@ +#!/bin/bash +# Copyright 2020-present Open Networking Foundation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eu -o pipefail + +if [ $# != 2 ]; then + echo Usage: push-karaf version directory + exit 1 +fi + +PLUGIN_VERSION=$1 +DIRECTORY=$2 +SONATYPE_USER=${SONATYPE_USER:-""} +SONATYPE_PASSWORD=${SONATYPE_PASSWORD:-""} + +if [ "$SONATYPE_USER" == "" -o "$SONATYPE_PASSWORD" == "" ]; then + echo SONATYPE_USER and SONATYPE_PASSWORD must be set + exit 1 +fi + +PLUGIN_FILE="$DIRECTORY/apache-karaf-${PLUGIN_VERSION}.tar.gz" +BASE_ARTIFACT_NAME="apache-karaf" + +UPLOAD_BASE="https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/apache-karaf-offline/$PLUGIN_VERSION" + +# Make the signature file +gpg --armor --detach-sig $PLUGIN_FILE + +# Make the MD5 checksum file +md5 -q $PLUGIN_FILE >$PLUGIN_FILE.md5 + +# Make the SHA1 checksum file +( shasum $PLUGIN_FILE | cut -d' ' -f1 ) > $PLUGIN_FILE.sha1 + +curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE $UPLOAD_BASE/$BASE_ARTIFACT_NAME-$PLUGIN_VERSION.tar.gz +curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.asc $UPLOAD_BASE/$BASE_ARTIFACT_NAME-$PLUGIN_VERSION.tar.gz.asc +curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.md5 $UPLOAD_BASE/$BASE_ARTIFACT_NAME-$PLUGIN_VERSION.tar.gz.md5 +curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.sha1 $UPLOAD_BASE/$BASE_ARTIFACT_NAME-$PLUGIN_VERSION.tar.gz.sha1 diff --git a/tools/package/bin/onos-backup b/tools/package/bin/onos-backup index 6a1af049e72..3def6454240 100755 --- a/tools/package/bin/onos-backup +++ b/tools/package/bin/onos-backup @@ -5,7 +5,7 @@ ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)} ONOS_DEFAULT_ARCHIVE=$(dirname $ONOS_HOME)/onos-data.tar.gz -ONOS_KARAF=$ONOS_HOME/apache-karaf-4.2.9 +ONOS_KARAF=$ONOS_HOME/apache-karaf-4.2.14 # Fetch the name of the archive or use a default if none is specified archive=${1:-$ONOS_DEFAULT_ARCHIVE} diff --git a/tools/package/bin/onos-restore b/tools/package/bin/onos-restore index 790032768c5..987b1b44c99 100755 --- a/tools/package/bin/onos-restore +++ b/tools/package/bin/onos-restore @@ -5,7 +5,7 @@ ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)} ONOS_DEFAULT_ARCHIVE=$(dirname $ONOS_HOME)/onos-data.tar.gz -ONOS_KARAF=$ONOS_HOME/apache-karaf-4.2.9 +ONOS_KARAF=$ONOS_HOME/apache-karaf-4.2.14 # Fetch the name of the archive or use a default if none is specified archive=${1:-$ONOS_DEFAULT_ARCHIVE} diff --git a/tools/package/dependencies/template.pom b/tools/package/dependencies/template.pom index 618f6fd62a0..e0a94b07367 100644 --- a/tools/package/dependencies/template.pom +++ b/tools/package/dependencies/template.pom @@ -33,7 +33,7 @@ UTF-8 - 4.2.9 + 4.2.14 3.3.9 diff --git a/tools/package/etc/org.apache.karaf.features.cfg b/tools/package/etc/org.apache.karaf.features.cfg index 863bdc5b22f..beab9a1e4b8 100644 --- a/tools/package/etc/org.apache.karaf.features.cfg +++ b/tools/package/etc/org.apache.karaf.features.cfg @@ -20,38 +20,38 @@ # # Comma separated list of features repositories to register by default # -featuresRepositories = \ mvn:org.apache.karaf.features/standard/4.2.9/xml/features, \ +featuresRepositories = \ mvn:org.apache.karaf.features/standard/4.2.14/xml/features, \ mvn:org.onosproject/onos-features/$ONOS_VERSION/xml/features, \ - mvn:org.apache.karaf.features/enterprise/4.2.9/xml/features, \ - mvn:org.apache.karaf.features/spring/4.2.9/xml/features, \ - mvn:org.apache.karaf.features/standard/4.2.9/xml/features, \ - mvn:org.apache.karaf.features/framework/4.2.9/xml/features + mvn:org.apache.karaf.features/enterprise/4.2.14/xml/features, \ + mvn:org.apache.karaf.features/spring/4.2.14/xml/features, \ + mvn:org.apache.karaf.features/standard/4.2.14/xml/features, \ + mvn:org.apache.karaf.features/framework/4.2.14/xml/features # # Comma separated list of features to install at startup # featuresBoot = \ - (instance/4.2.9, \ - package/4.2.9, \ - log/4.2.9, \ - ssh/4.2.9, \ - framework/4.2.9, \ - system/4.2.9, \ - eventadmin/4.2.9, \ - feature/4.2.9, \ - shell/4.2.9, \ - management/4.2.9, \ - service/4.2.9, \ - jaas/4.2.9, \ - deployer/4.2.9, \ - diagnostic/4.2.9, \ - wrap/2.6.2, \ - bundle/4.2.9, \ - config/4.2.9, \ - kar/4.2.9, \ - webconsole/4.2.9, \ - scr/4.2.9, \ - war/4.2.9), \ + (instance/4.2.14, \ + package/4.2.14, \ + log/4.2.14, \ + ssh/4.2.14, \ + framework/4.2.14, \ + system/4.2.14, \ + eventadmin/4.2.14, \ + feature/4.2.14, \ + shell/4.2.14, \ + management/4.2.14, \ + service/4.2.14, \ + jaas/4.2.14, \ + deployer/4.2.14, \ + diagnostic/4.2.14, \ + wrap/2.6.7, \ + bundle/4.2.14, \ + config/4.2.14, \ + kar/4.2.14, \ + webconsole/4.2.14, \ + scr/4.2.14, \ + war/4.2.14), \ (onos-thirdparty-base/$ONOS_VERSION), \ (onos-api/$ONOS_VERSION, \ onos-core/$ONOS_VERSION, \ diff --git a/tools/package/etc/startup.properties b/tools/package/etc/startup.properties index 996b47b1903..ddcfcbfe526 100644 --- a/tools/package/etc/startup.properties +++ b/tools/package/etc/startup.properties @@ -1,21 +1,17 @@ -# Valid for Karaf 4.2.9. If updating Karaf version in ONOS, make sure to -# copy-paste here the content of apache-karaf-*/etc/startup.properties in, and -# update the Kafka and log4j2 additions at the end if needed - -# Standard startup.properties file # Bundles to be started on startup, with startlevel -mvn\:org.apache.karaf.features/org.apache.karaf.features.extension/4.2.9 = 1 -mvn\:org.ops4j.pax.url/pax-url-aether/2.6.2 = 5 -mvn\:org.apache.karaf.services/org.apache.karaf.services.eventadmin/4.2.9 = 5 -mvn\:org.apache.felix/org.apache.felix.metatype/1.2.2 = 5 -mvn\:org.ops4j.pax.logging/pax-logging-api/1.11.6 = 8 -mvn\:org.ops4j.pax.logging/pax-logging-log4j2/1.11.6 = 8 +mvn\:org.apache.karaf.features/org.apache.karaf.features.extension/4.2.14 = 1 +mvn\:org.apache.karaf.services/org.apache.karaf.services.eventadmin/4.2.14 = 5 +mvn\:org.apache.felix/org.apache.felix.metatype/1.2.4 = 5 +mvn\:org.ops4j.pax.url/pax-url-aether/2.6.7 = 5 +mvn\:org.ops4j.pax.logging/pax-logging-log4j2/1.11.12 = 8 +mvn\:org.ops4j.pax.logging/pax-logging-api/1.11.12 = 8 mvn\:org.fusesource.jansi/jansi/1.18 = 8 +mvn\:org.osgi/org.osgi.util.promise/1.1.1 = 9 mvn\:org.apache.felix/org.apache.felix.coordinator/1.0.2 = 9 -mvn\:org.apache.felix/org.apache.felix.configadmin/1.9.16 = 10 -mvn\:org.apache.felix/org.apache.felix.fileinstall/3.6.6 = 11 -mvn\:org.apache.karaf.features/org.apache.karaf.features.core/4.2.9 = 15 - +mvn\:org.osgi/org.osgi.util.function/1.1.0 = 9 +mvn\:org.apache.felix/org.apache.felix.configadmin/1.9.22 = 10 +mvn\:org.apache.felix/org.apache.felix.fileinstall/3.7.2 = 11 +mvn\:org.apache.karaf.features/org.apache.karaf.features.core/4.2.14 = 15 # Added part to enable Kafka log4j2 appender # N.B.: kafka-clients should have startlevel lower than onos-tools-package-log4j2-extra diff --git a/tools/package/onos-prep-karaf b/tools/package/onos-prep-karaf index 45029ead007..f81634b16d6 100755 --- a/tools/package/onos-prep-karaf +++ b/tools/package/onos-prep-karaf @@ -13,7 +13,7 @@ KARAF_PATCHES=$5 LOG4J2_EXTRA=$6 SANDBOX=${7:-.} -KARAF_VERSION="4.2.9" +KARAF_VERSION="4.2.14" ONOS_SECURITY_MODE="false" PREFIX="onos-$ONOS_VERSION" @@ -38,10 +38,6 @@ perl -pi.old -e "s/maxFileSize=1MB/maxFileSize=10MB/g" \ echo "felix.fileinstall.filter='\\*.jar'" >> \ $KARAF_DIR/etc/org.apache.felix.fileinstall-deploy.cfg -# Patch log4j to mitigate CVE-2021-44228 -# https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228 -zip -q -d $KARAF_DIR/system/org/ops4j/pax/logging/pax-logging-log4j2/1.11.6/pax-logging-log4j2-1.11.6.jar org/apache/logging/log4j/core/lookup/JndiLookup.class - # Patch-in proper Karaf version into the startup script perl -pi.bk -e 's/apache-karaf-\$KARAF_VERSION/$ENV{KARAF_DIR}/g' $SANDBOX/bin/onos-service diff --git a/tools/package/onos_stage.py b/tools/package/onos_stage.py index 9dc1973ae0e..7a4865023b8 100755 --- a/tools/package/onos_stage.py +++ b/tools/package/onos_stage.py @@ -27,7 +27,7 @@ written_files = set() now = time.time() -karaf_version = "4.2.9" +karaf_version = "4.2.14" karaf_system = "apache-karaf-" + karaf_version + "/system/" def addFile(tar, dest, file, file_size): From bb2a72c4806390fd438d3f4391bc5f92cf537867 Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 4 Jan 2022 19:08:46 +0100 Subject: [PATCH 174/235] [SDFAB-887][SDFAB-893] Missig flowrules in the ECFlowRuleStore Mastership changes can happen during the processing of the flow rules stats, If there is no master while we are executing handleExistingFlow we will get null when we try to retrieve the stored flow rule. This is wrongly handled with the removal of the flow rule from the store which will cause lost of connectivity. This patch basically removes the flow rule only when we are sure of what we are doing, when we are not the code verifies if there are proper conditions to continue the processing (check if there was a mastership change). Additionally, this patch improves the logging of the ECFlowRuleStore Change-Id: I7b79e7ab3d8ccfa6edca6ba4ad5de93ada082265 --- .../net/flow/impl/FlowRuleManager.java | 29 ++++++++++++------- .../store/flow/impl/ECFlowRuleStore.java | 8 ++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index 833a40c3c4e..d593e458878 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -526,19 +526,28 @@ private boolean handleExistingFlow(FlowEntry flowEntry) { checkNotNull(flowEntry, FLOW_RULE_NULL); checkValidity(); FlowEntry storedEntry = store.getFlowEntry(flowEntry); - if ((storedEntry != null && storedEntry.state() != FlowEntry.FlowEntryState.PENDING_REMOVE) - && checkRuleLiveness(flowEntry, storedEntry)) { - FlowRuleEvent event = store.addOrUpdateFlowRule(flowEntry); - if (event == null) { - log.debug("No flow store event generated."); - return false; + if (storedEntry != null) { + // Flow rule is still valid, let's try to update the stats + if (storedEntry.state() != FlowEntry.FlowEntryState.PENDING_REMOVE && + checkRuleLiveness(flowEntry, storedEntry)) { + FlowRuleEvent event = store.addOrUpdateFlowRule(flowEntry); + /* Something went wrong or there is no master + better check if it is the latter */ + if (event == null) { + log.debug("No flow store event generated for addOrUpdate of {}", flowEntry); + return false; + } else { + log.trace("Flow {} {}", flowEntry, event.type()); + post(event); + } } else { - log.trace("Flow {} {}", flowEntry, event.type()); - post(event); + log.debug("Removing {}", flowEntry); + removeFlowRules(flowEntry); } } else { - log.debug("Removing flow rules...."); - removeFlowRules(flowEntry); + /* It was already removed or there is no master + better check if it is the latter */ + return false; } return true; } diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java index e4850d8866c..602f4d31a59 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java @@ -380,7 +380,7 @@ public int getFlowRuleCount(DeviceId deviceId) { public int getFlowRuleCount(DeviceId deviceId, FlowEntryState state) { NodeId master = mastershipService.getMasterFor(deviceId); if (master == null && deviceService.isAvailable(deviceId)) { - log.debug("Failed to getFlowRuleCount: No master for {}", deviceId); + log.warn("Failed to getFlowRuleCount: No master for {}", deviceId); return 0; } @@ -405,7 +405,7 @@ public FlowEntry getFlowEntry(FlowRule rule) { NodeId master = mastershipService.getMasterFor(rule.deviceId()); if (master == null && deviceService.isAvailable(rule.deviceId())) { - log.debug("Failed to getFlowEntry: No master for {}", rule.deviceId()); + log.warn("Failed to getFlowEntry: No master for {}", rule.deviceId()); return null; } @@ -451,7 +451,7 @@ public void storeBatch(FlowRuleBatchOperation operation) { NodeId master = mastershipService.getMasterFor(deviceId); if (master == null) { - log.warn("No master for {} ", deviceId); + log.warn("Failed to storeBatch: No master for {}", deviceId); Set allFailures = operation.getOperations() .stream() @@ -960,7 +960,7 @@ public Iterable getTableStatistics(DeviceId deviceId) { NodeId master = mastershipService.getMasterFor(deviceId); if (master == null && deviceService.isAvailable(deviceId)) { - log.debug("Failed to getTableStats: No master for {}", deviceId); + log.warn("Failed to getTableStats: No master for {}", deviceId); return Collections.emptyList(); } From d70d3f53762f767597fb6d765c69b7aacaf17c43 Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 12 Jan 2022 21:26:24 +0100 Subject: [PATCH 175/235] Missing update of the karaf home Change-Id: I90967e70ed371ce3e3018db378843b10aa2da89f --- tools/package/deb/prerm | 2 +- tools/test/bin/onos-check-bits | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/package/deb/prerm b/tools/package/deb/prerm index c688faaedc4..dc21de912b6 100755 --- a/tools/package/deb/prerm +++ b/tools/package/deb/prerm @@ -14,7 +14,7 @@ # Clean up onos runtime directories # TODO don't hardcode karaf version -rm -rf /opt/onos/apache-karaf-4.2.9/ +rm -rf /opt/onos/apache-karaf-4.2.14/ rm -rf /opt/onos/var/* rm -rf /opt/onos/config rm -rf /opt/onos/options diff --git a/tools/test/bin/onos-check-bits b/tools/test/bin/onos-check-bits index 71f897eb93f..865abd2dbaf 100755 --- a/tools/test/bin/onos-check-bits +++ b/tools/test/bin/onos-check-bits @@ -32,7 +32,7 @@ if [ $? -ne 0 ]; then echo "ONOS archive does not contain the proper version file" && exit 1 fi -tar tzf ${ONOS_TAR} | grep -q apache-karaf-4.2.9 +tar tzf ${ONOS_TAR} | grep -q apache-karaf-4.2.14 if [ $? -ne 0 ]; then echo "ONOS archive does not contain karaf" && exit 1 fi From 0e9ccebe19db20d9f4e408f2b1b4956fe0b7ea4f Mon Sep 17 00:00:00 2001 From: Jian Li Date: Wed, 12 Jan 2022 03:35:38 +0900 Subject: [PATCH 176/235] Fix: invoke a fake role reply ack on role change event for ovsdb Change-Id: If824ccc41d0136fb7b16f81cc08e3aa9abd2db4a --- .../ovsdb/providers/device/OvsdbDeviceProvider.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java b/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java index 5fbf3044f94..dbe7bae42b2 100644 --- a/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java +++ b/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java @@ -53,6 +53,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.onlab.util.Tools.groupedThreads; +import static org.onosproject.net.MastershipRole.NONE; import static org.slf4j.LoggerFactory.getLogger; /** @@ -121,7 +122,12 @@ public void triggerProbe(DeviceId deviceId) { @Override public void roleChanged(DeviceId deviceId, MastershipRole newRole) { - // TODO: This will be implemented later. + // for OVSDB there is no Mastership concept, simulating here a fake + // Mastership handshake to be compliant with the ONOS core + if (newRole != null && newRole != NONE) { + final MastershipRole role = mastershipService.getLocalRole(deviceId); + providerService.receivedRoleReply(deviceId, role, role); + } } @Override @@ -149,7 +155,6 @@ public void nodeAdded(OvsdbNodeId nodeId) { cid, annotations); providerService.deviceConnected(deviceId, deviceDescription); - } @Override From 97fd80c104570275937d4c24227916c83bf0dd4c Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Thu, 13 Jan 2022 19:16:34 +0100 Subject: [PATCH 177/235] [SDFAB-834] Add application filtering to ONOS UPF programmable APIs Change-Id: I3e3d44d5d160470c3f4bfca32e7a83e194d155d8 --- .../net/behaviour/upf/UpfApplication.java | 245 ++++++++++++++++++ .../net/behaviour/upf/UpfEntity.java | 5 + .../net/behaviour/upf/UpfEntityType.java | 3 +- .../behaviour/upf/UpfTerminationDownlink.java | 52 +++- .../behaviour/upf/UpfTerminationUplink.java | 53 +++- 5 files changed, 337 insertions(+), 21 deletions(-) create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java new file mode 100644 index 00000000000..83bb82078f1 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java @@ -0,0 +1,245 @@ +/* + * Copyright 2022-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.annotations.Beta; +import com.google.common.collect.Range; +import org.onlab.packet.Ip4Prefix; + +import java.util.Objects; +import java.util.Optional; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A structure representing the application filtering for the UPF-programmable device. + */ +@Beta +public final class UpfApplication implements UpfEntity { + // Match Keys + private final Ip4Prefix ipPrefix; + private final Range l4PortRange; + private final Byte ipProto; + // Action parameter + private final byte appId; + + private final int priority; + + private UpfApplication(Ip4Prefix ipPrefix, Range l4PortRange, + Byte ipProto, byte appId, int priority) { + this.ipPrefix = ipPrefix; + this.l4PortRange = l4PortRange; + this.ipProto = ipProto; + this.appId = appId; + this.priority = priority; + } + + public static Builder builder() { + return new Builder(); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object == null) { + return false; + } + if (getClass() != object.getClass()) { + return false; + } + + UpfApplication that = (UpfApplication) object; + + return Objects.equals(this.ipPrefix, that.ipPrefix) && + Objects.equals(this.l4PortRange, that.l4PortRange) && + Objects.equals(this.ipProto, that.ipProto) && + this.appId == that.appId && + this.priority == that.priority; + } + + @Override + public int hashCode() { + return Objects.hash(ipPrefix, l4PortRange, ipProto, appId, priority); + } + + @Override + public String toString() { + return "UpfApplication{priority=" + this.priority + ", " + matchString() + " -> " + actionString() + "}"; + } + + private String matchString() { + StringBuilder matchStrBuilder = new StringBuilder("Match("); + if (this.ipPrefix != null) { + matchStrBuilder.append("ip_prefix=") + .append(this.ipPrefix) + .append(", "); + } + if (this.l4PortRange != null) { + matchStrBuilder.append("l4_port_range=") + .append(l4PortRange) + .append(", "); + } + if (this.ipProto != null) { + matchStrBuilder.append("ip_proto=") + .append(this.ipProto) + .append(", "); + } + matchStrBuilder.delete(matchStrBuilder.length() - 2, matchStrBuilder.length()); + return matchStrBuilder.append(")").toString(); + } + + private String actionString() { + return "(app_id=" + this.appId + ")"; + } + + /** + * Gets the IPv4 prefix of this UPF application rule. + * + * @return The IPv4 prefix, Empty if none. + */ + public Optional ip4Prefix() { + return Optional.ofNullable(ipPrefix); + } + + /** + * Gets the L4 port range of this application filtering rule. + * + * @return A bounded range of L4 port + */ + public Optional> l4PortRange() { + return Optional.ofNullable(l4PortRange); + } + + /** + * Gets the IP protocol field value of this UPF application rule. + * + * @return IP protocol field, Empty if none + */ + public Optional ipProto() { + return Optional.ofNullable(ipProto); + } + + /** + * Get the application ID of this UPF application rule. + * + * @return Application ID + */ + public byte appId() { + return appId; + } + + /** + * Get the priority of this UPF application rule. + * + * @return Priority + */ + public int priority() { + return priority; + } + + @Override + public UpfEntityType type() { + return UpfEntityType.APPLICATION; + } + + /** + * Builder of UpfApplication object. + */ + public static class Builder { + // Match Keys + private Ip4Prefix ipPrefix = null; + private Range l4PortRange = null; + private Byte ipProto = null; + // Action parameters + private Byte appId = null; + + private Integer priority = null; + + public Builder() { + + } + + /** + * Set the IP prefix of the UPF application rule. + * + * @param ipPrefix IPv4 prefix + * @return This builder object + */ + public Builder withIp4Prefix(Ip4Prefix ipPrefix) { + this.ipPrefix = ipPrefix; + return this; + } + + /** + * Set the L4 port range of the UPF application rule. + * + * @param l4PortRange bounded range of L4 port + * @return This builder object + */ + public Builder withL4PortRange(Range l4PortRange) { + checkArgument(l4PortRange.hasLowerBound() && l4PortRange.hasUpperBound(), + "Range must be provided with bounds"); + this.l4PortRange = l4PortRange; + return this; + } + + /** + * Set the IP protocol field value of the UPF application rule. + * + * @param ipProto IP protocol field + * @return This builder object + */ + public Builder withIpProto(byte ipProto) { + this.ipProto = ipProto; + return this; + } + + /** + * Set the application ID of the UPF application rule. + * + * @param appId Application ID + * @return This builder object + */ + public Builder withAppId(byte appId) { + this.appId = appId; + return this; + } + + /** + * Set the priority of the UPF application rule. + * + * @param priority Priority + * @return This builder object + */ + public Builder withPriority(int priority) { + this.priority = priority; + return this; + } + + public UpfApplication build() { + checkArgument(ipPrefix != null || l4PortRange != null || + ipProto != null, + "At least one match field is required"); + checkNotNull(appId, "Application ID must be provided"); + checkNotNull(priority, "Priority must be provided"); + return new UpfApplication(ipPrefix, l4PortRange, ipProto, appId, priority); + } + } +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java index ad1fbaae890..81dd28aa18e 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java @@ -23,6 +23,11 @@ */ @Beta public interface UpfEntity { + /** + * Default Application ID, to be used if application filtering is performed. + */ + byte DEFAULT_APP_ID = 0; + /** * Returns the type of this entity. * diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java index 7ec3b191309..e61abf1cd89 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -29,7 +29,8 @@ public enum UpfEntityType { SESSION_DOWNLINK("session_downlink"), SESSION_UPLINK("session_downlink"), TUNNEL_PEER("tunnel_peer"), - COUNTER("counter"); + COUNTER("counter"), + APPLICATION("application"); private final String humanReadableName; diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java index 1c11dcc4920..cbb601b3095 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -26,12 +26,13 @@ /** * A structure representing the UE Termination in the downlink direction on the * UPF-programmable device. - * Provides means to configure the traffic behavior (e.g. set Traffic Class, GTP TEID, or QFI). + * Provide means to configure the traffic behavior (e.g. set Traffic Class, GTP TEID, or QFI). */ @Beta public final class UpfTerminationDownlink implements UpfEntity { // Match Keys private final Ip4Address ueSessionId; // UE Session ID, use UE IP address to uniquely identify a session. + private final byte applicationId; // Application ID, defaults to DEFAULT_APP_ID // Action parameters private final Integer ctrId; // Counter ID unique to this UPF Termination Rule private final Byte trafficClass; @@ -39,9 +40,10 @@ public final class UpfTerminationDownlink implements UpfEntity { private final Byte qfi; // QoS Flow Identifier private final boolean dropping; - private UpfTerminationDownlink(Ip4Address ueSessionId, Integer ctrId, Byte trafficClass, + private UpfTerminationDownlink(Ip4Address ueSessionId, byte applicationId, Integer ctrId, Byte trafficClass, Integer teid, Byte qfi, boolean dropping) { this.ueSessionId = ueSessionId; + this.applicationId = applicationId; this.ctrId = ctrId; this.trafficClass = trafficClass; this.teid = teid; @@ -69,6 +71,7 @@ public boolean equals(Object obj) { // Safe comparisons between potentially null objects return this.dropping == that.dropping && Objects.equals(this.ueSessionId, that.ueSessionId) && + Objects.equals(this.applicationId, that.applicationId) && Objects.equals(this.ctrId, that.ctrId) && Objects.equals(this.trafficClass, that.trafficClass) && Objects.equals(this.teid, that.teid) && @@ -77,7 +80,7 @@ public boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hash(ueSessionId, ctrId, trafficClass, teid, qfi, dropping); + return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, teid, qfi, dropping); } /** @@ -89,6 +92,15 @@ public Ip4Address ueSessionId() { return ueSessionId; } + /** + * Get the application ID associated with UPF Termination rule. + * + * @return the application ID + */ + public byte applicationId() { + return applicationId; + } + /** * Get PDR Counter ID associated with UPF Termination rule. * @@ -141,15 +153,20 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationDL{" + matchString() + "->" + actionString() + "}"; + return "TerminationDL{" + matchString() + " -> " + actionString() + "}"; } private String matchString() { - return "Match(ue_addr=" + this.ueSessionId() + ")"; + return "Match(ue_addr=" + this.ueSessionId() + ", app_id=" + this.applicationId + ")"; } private String actionString() { - return "(TEID=" + this.teid() + + String fwd = "FWD"; + if (this.needsDropping()) { + fwd = "DROP"; + } + return "(" + fwd + + ", TEID=" + this.teid() + ", CTR_ID=" + this.counterId() + ", QFI=" + this.qfi() + ", TC=" + this.trafficClass() + @@ -158,6 +175,7 @@ private String actionString() { public static class Builder { private Ip4Address ueSessionId = null; + private Byte applicationId = null; private Integer ctrId = null; private Byte trafficClass = null; private Integer teid = null; @@ -179,6 +197,17 @@ public Builder withUeSessionId(Ip4Address ueSessionId) { return this; } + /** + * Set the ID of the application. + * + * @param applicationId Application ID + * @return This builder object + */ + public Builder withApplicationId(byte applicationId) { + this.applicationId = applicationId; + return this; + } + /** * Set the dataplane counter cell ID. * @@ -226,7 +255,7 @@ public Builder withQfi(byte qfi) { /** * Sets whether to drop downlink UPF termination traffic or not. * - * @param drop True if request to buffer, false otherwise + * @param drop True if request to drop, false otherwise * @return This builder object */ public Builder needsDropping(boolean drop) { @@ -234,16 +263,17 @@ public Builder needsDropping(boolean drop) { return this; } - public UpfTerminationDownlink build() { // Match fields must be provided checkNotNull(ueSessionId, "UE session ID must be provided"); - + if (applicationId == null) { + applicationId = DEFAULT_APP_ID; + } checkNotNull(ctrId, "Counter ID must be provided"); // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationDownlink( - this.ueSessionId, this.ctrId, this.trafficClass, this.teid, - this.qfi, this.drop + this.ueSessionId, this.applicationId, this.ctrId, this.trafficClass, + this.teid, this.qfi, this.drop ); } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java index f7592020a82..1c6dd56491b 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -26,20 +26,22 @@ /** * A structure representing the UE Termination in the uplink direction on the * UPF-programmable device. - * Provides means to configure the traffic behavior (e.g. set Traffic Class). + * Provide means to configure the traffic behavior (e.g. set Traffic Class). */ @Beta public final class UpfTerminationUplink implements UpfEntity { // Match Keys private final Ip4Address ueSessionId; // UE Session ID, use UE IP address to uniquely identify a session. + private final byte applicationId; // Application ID defaults to DEFAULT_APP_ID // Action parameters private final Integer ctrId; // Counter ID unique to this UPF Termination Rule private final Byte trafficClass; private final boolean dropping; - private UpfTerminationUplink(Ip4Address ueSessionId, Integer ctrId, Byte trafficClass, + private UpfTerminationUplink(Ip4Address ueSessionId, byte applicationId, Integer ctrId, Byte trafficClass, boolean dropping) { this.ueSessionId = ueSessionId; + this.applicationId = applicationId; this.ctrId = ctrId; this.trafficClass = trafficClass; this.dropping = dropping; @@ -65,13 +67,14 @@ public boolean equals(Object obj) { // Safe comparisons between potentially null objects return this.dropping == that.dropping && Objects.equals(this.ueSessionId, that.ueSessionId) && + Objects.equals(this.applicationId, that.applicationId) && Objects.equals(this.ctrId, that.ctrId) && Objects.equals(this.trafficClass, that.trafficClass); } @Override public int hashCode() { - return Objects.hash(ueSessionId, ctrId, trafficClass, dropping); + return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, dropping); } /** @@ -83,6 +86,15 @@ public Ip4Address ueSessionId() { return ueSessionId; } + /** + * Get the application ID associated with UPF Termination rule. + * + * @return Application ID + */ + public byte applicationId() { + return applicationId; + } + /** * Get PDR Counter ID associated with UPF Termination rule. * @@ -117,19 +129,27 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationUL{" + matchString() + "->" + actionString() + "}"; + return "TerminationUL{" + matchString() + " -> " + actionString() + "}"; } private String matchString() { - return "Match(ue_addr=" + this.ueSessionId() + ")"; + return "Match(ue_addr=" + this.ueSessionId() + ", app_id=" + this.applicationId() + ")"; } private String actionString() { - return "(CTR_ID=" + this.counterId() + ", TC=" + this.trafficClass() + ")"; + String fwd = "FWD"; + if (this.needsDropping()) { + fwd = "DROP"; + } + return "(" + fwd + + ", CTR_ID=" + this.counterId() + + ", TC=" + this.trafficClass() + + ")"; } public static class Builder { private Ip4Address ueSessionId = null; + private Byte applicationId = null; private Integer ctrId = null; private Byte trafficClass = null; private boolean dropping = false; @@ -149,6 +169,17 @@ public Builder withUeSessionId(Ip4Address ueSessionId) { return this; } + /** + * Set the ID of the application. + * + * @param applicationId Application ID + * @return This builder object + */ + public Builder withApplicationId(byte applicationId) { + this.applicationId = applicationId; + return this; + } + /** * Set the dataplane counter cell ID. * @@ -174,7 +205,7 @@ public Builder withTrafficClass(byte trafficClass) { /** * Sets whether to drop uplink UPF termination traffic or not. * - * @param dropping True if request to buffer, false otherwise + * @param dropping True if request to drop, false otherwise * @return This builder object */ public Builder needsDropping(boolean dropping) { @@ -185,11 +216,15 @@ public Builder needsDropping(boolean dropping) { public UpfTerminationUplink build() { // Match fields must be provided checkNotNull(ueSessionId, "UE session ID must be provided"); - + if (applicationId == null) { + applicationId = DEFAULT_APP_ID; + } checkNotNull(ctrId, "Counter ID must be provided"); // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationUplink( - this.ueSessionId, this.ctrId, this.trafficClass, this.dropping); + this.ueSessionId, this.applicationId, this.ctrId, + this.trafficClass, this.dropping + ); } } From d9ec6be17ab76c853b9ebea2506d6708e353e140 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Wed, 26 Jan 2022 10:11:11 +0000 Subject: [PATCH 178/235] Tagging 2.5.6 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 3b6d004ad52..632ed5f333d 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.6-SNAPSHOT"); + private static Version version = Version.version("2.5.6"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index c0e72329c3a..73ed2db2156 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.6-SNAPSHOT" +ONOS_VERSION = "2.5.6" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index dc47fb8fc22..6c1e550169e 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.6-SNAPSHOT" +export ONOS_POM_VERSION="2.5.6" export ONOS_VERSION=${ONOS_VERSION:-2.5.6.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 18ef046503d..c3a78ba6dce 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 66ac424c7b8..523d3a067fc 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 0d113da324a..066846c4dad 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 9a2e63fd7ca..948d733a285 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index cd903ee6deb..b8f681e5f62 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 42f0e40061d..2609e737491 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index e8028e851a0..ee58bb7bc03 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 528c3ba54eb..4f698a228b1 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index ae93627671a..28a72d08614 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 3b2761fd567..f91187b03bf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index da19f62420f..ea322a87a20 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 5ab61b7748c..00ef2dc7b14 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 87073f72926..bc22476f204 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 2a2c7cc3f6b..7a30ab8215f 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index daa3f49a2fd..a5bad96b357 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 067e4d2acc3..0798878db84 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6-SNAPSHOT + 2.5.6 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 3fb0ca804c0..ff09d662006 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.6-SNAPSHOT + 2.5.6 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index f43695db6da..c907f22e4e3 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.6-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.6" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From f886bffc089135110bc5a0e85d76a7f5ad95ab72 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Wed, 26 Jan 2022 10:11:16 +0000 Subject: [PATCH 179/235] Starting snapshot 2.5.7-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 632ed5f333d..934ff946dcb 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.6"); + private static Version version = Version.version("2.5.7-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 73ed2db2156..58b2963e84f 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.6" +ONOS_VERSION = "2.5.7-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 6c1e550169e..c1ea9f26306 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.6" -export ONOS_VERSION=${ONOS_VERSION:-2.5.6.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index c3a78ba6dce..e126e653bf6 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 523d3a067fc..5b7ddfaadae 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 066846c4dad..753860fa868 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 948d733a285..7e972427237 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index b8f681e5f62..e1af1a5772b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 2609e737491..36a1a19dbed 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index ee58bb7bc03..72ef5dba606 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 4f698a228b1..1e843e290bb 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 28a72d08614..076dc5f133b 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index f91187b03bf..f37199f78cf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index ea322a87a20..12194a2db7c 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 00ef2dc7b14..886039bcef2 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index bc22476f204..cec5d33bf40 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 7a30ab8215f..6e5cf3c14fc 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a5bad96b357..f5493f9b7f5 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 0798878db84..a60599a2cfc 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.6 + 2.5.7-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index ff09d662006..e95985c41de 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.6 + 2.5.7-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index c907f22e4e3..78e84f2ad98 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.6" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 7a77287839b366ca1c051b712b961402806a7841 Mon Sep 17 00:00:00 2001 From: Yi Tseng Date: Mon, 24 Jan 2022 10:51:44 -0800 Subject: [PATCH 180/235] New PiInterpreter API to map logical port to long type Introduce a new API for PiInterpreter to map logical port number to a long port number and deprecate the old one. The reason we need to translate logical port number to a long type is that the mapped number will become negative when translating port number to an unsigned integer with MSB (e.g., 0xFFFFFFFD) and the low level driver or translator is expecting to get a positive number. Change-Id: I751e69461b0cf97280f12fd98ca2b15b83cbe84f --- .../net/pi/model/PiPipelineInterpreter.java | 14 ++++++++++++++ .../pi/impl/PiReplicationGroupTranslatorImpl.java | 2 +- .../fabric/impl/behaviour/FabricCapabilities.java | 4 ++-- .../fabric/impl/behaviour/FabricInterpreter.java | 2 +- .../impl/behaviour/pipeliner/FabricPipeliner.java | 4 ++-- .../behaviour/pipeliner/FabricPipelinerTest.java | 2 +- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java index 1ba85e0335f..11ca7c94bf3 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java @@ -106,11 +106,25 @@ InboundPacket mapInboundPacket(PiPacketOperation packetOperation, DeviceId devic * * @param port port number * @return optional integer + * @deprecated in ONOS 3.0 using {@link #mapLogicalPort} instead */ + @Deprecated default Optional mapLogicalPortNumber(PortNumber port) { return Optional.empty(); } + /** + * Maps the given logical port number to the data plane port ID (long) + * identifying the same port for this pipeconf, if such mapping is + * possible. + * + * @param port port number + * @return optional long + */ + default Optional mapLogicalPort(PortNumber port) { + return mapLogicalPortNumber(port).map(integer -> (long) integer); + } + /** * If the given table allows for mutable default actions, this method * returns an action instance to be used when ONOS tries to remove a diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorImpl.java index 3407cf29bbc..112aab2c2a3 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorImpl.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiReplicationGroupTranslatorImpl.java @@ -156,7 +156,7 @@ private static PortNumber logicalToPipelineSpecific( "missing interpreter, cannot map logical port " + logicalPort.toString()); } final PiPipelineInterpreter interpreter = device.as(PiPipelineInterpreter.class); - Optional mappedPort = interpreter.mapLogicalPortNumber(logicalPort); + Optional mappedPort = interpreter.mapLogicalPort(logicalPort); if (!mappedPort.isPresent()) { throw new PiTranslationException( "interpreter cannot map logical port " + logicalPort.toString()); diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java index 93605e2d87c..fc9fe21a9c7 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java @@ -49,7 +49,7 @@ public boolean hasHashedTable() { .table(FabricConstants.FABRIC_INGRESS_NEXT_HASHED).isPresent(); } - public Optional cpuPort() { + public Optional cpuPort() { // This is probably brittle, but needed to dynamically get the CPU port // for different platforms. if (!pipeconf.extension(CPU_PORT_TXT).isPresent()) { @@ -67,7 +67,7 @@ public Optional cpuPort() { return Optional.empty(); } try { - return Optional.of(Integer.parseInt(str)); + return Optional.of(Long.parseLong(str)); } catch (NumberFormatException e) { log.error("Invalid CPU port for {}: {}", pipeconf.id(), str); return Optional.empty(); diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java index 9f848ed2d62..46b584d7974 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java @@ -308,7 +308,7 @@ public Optional getOriginalDefaultAction(PiTableId tableId) { } @Override - public Optional mapLogicalPortNumber(PortNumber port) { + public Optional mapLogicalPort(PortNumber port) { if (!port.equals(CONTROLLER)) { return Optional.empty(); } diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java index e3bc567aab5..cea5c47ab6b 100644 --- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java +++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java @@ -148,7 +148,7 @@ public void init(DeviceId deviceId, PipelinerContext context) { protected void initializePipeline() { // Set up rules for packet-out forwarding. We support only IPv4 routing. - final int cpuPort = capabilities.cpuPort().get(); + final long cpuPort = capabilities.cpuPort().get(); flowRuleService.applyFlowRules( ingressVlanRule(cpuPort, false, DEFAULT_VLAN), fwdClassifierRule(cpuPort, null, Ethernet.TYPE_IPV4, FWD_IPV4_ROUTING, @@ -390,7 +390,7 @@ public FlowRule ingressVlanRule(long port, boolean vlanValid, int vlanId) { .build(); } - public FlowRule fwdClassifierRule(int port, Short ethType, short ipEthType, byte fwdType, int priority) { + public FlowRule fwdClassifierRule(long port, Short ethType, short ipEthType, byte fwdType, int priority) { final TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder() .matchInPort(PortNumber.portNumber(port)) .matchPi(PiCriterion.builder() diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java index d3a7c5c8782..ad988f5a005 100644 --- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java +++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java @@ -56,7 +56,7 @@ public class FabricPipelinerTest { private static final ApplicationId APP_ID = TestApplicationId.create("FabricPipelinerTest"); private static final DeviceId DEVICE_ID = DeviceId.deviceId("device:1"); private static final int DEFAULT_FLOW_PRIORITY = 100; - private static final int CPU_PORT = 320; + private static final long CPU_PORT = 320; private static final byte FWD_IPV4_ROUTING = 2; private static final int DEFAULT_VLAN = 4094; public static final byte[] ONE = new byte[]{1}; From 2e70e23a720d42ed839bd7bf5b5c02a2d3a62f7e Mon Sep 17 00:00:00 2001 From: David Glantz Date: Wed, 26 Jan 2022 14:39:56 -0600 Subject: [PATCH 181/235] Fix to notify the link provider service form netcfglinkprovider when link netcfg is added Change-Id: Ifc34e0c8789d131c8459ef75bde2a3a5c6ecf19b --- .../provider/netcfglinks/NetworkConfigLinksProvider.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java index 30608e40f5e..d908681465e 100644 --- a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java +++ b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java @@ -519,7 +519,11 @@ public void event(DeviceEvent event) { private class InternalConfigListener implements NetworkConfigListener { private void addLink(LinkKey linkKey) { + DefaultLinkDescription linkDescription = + new DefaultLinkDescription(linkKey.src(), linkKey.dst(), + Link.Type.DIRECT); configuredLinks.add(linkKey); + providerService.linkDetected(linkDescription); } private void removeLink(LinkKey linkKey) { From 2018fa52d4bb445e96bde22e8432570a3c6f5ca9 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 31 Jan 2022 09:11:32 +0100 Subject: [PATCH 182/235] Fix ONOS CI by removing the usage of getRegisteredApps getRegisteredApps is deprecated and it has been discontinued This patch partially reverts: - https://gerrit.onosproject.org/c/onos/+/22325 - https://gerrit.onosproject.org/c/onos/+/22362 - https://gerrit.onosproject.org/c/onos/+/22382 Change-Id: I652d814a006709bd40a673699697ba229955b0e4 --- .../cli/app/ApplicationCommand.java | 34 +------- .../cli/app/ApplicationNameCompleter.java | 21 ++--- .../cli/app/ApplicationsListCommand.java | 12 +-- .../onosproject/app/ApplicationService.java | 3 + .../app/impl/ApplicationManager.java | 82 ++----------------- .../app/impl/ApplicationManagerTest.java | 8 -- 6 files changed, 19 insertions(+), 141 deletions(-) diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java index 67bd6bad3fe..0571fb2aa4a 100644 --- a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java +++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java @@ -21,19 +21,13 @@ import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.onosproject.app.ApplicationAdminService; -import org.onosproject.app.ApplicationService; import org.onosproject.cli.AbstractShellCommand; import org.onosproject.core.Application; import org.onosproject.core.ApplicationId; -import org.onosproject.core.VersionService; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.component.annotations.ReferenceCardinality; import java.io.IOException; import java.net.URL; -import java.util.Iterator; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; /** @@ -49,12 +43,8 @@ public class ApplicationCommand extends AbstractShellCommand { static final String ACTIVATE = "activate"; static final String DEACTIVATE = "deactivate"; static final String DOWNLOAD = "download"; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - protected VersionService versionService; - @Argument(index = 0, name = "command", - description = "Command name (install|activate|deactivate|uninstall|download|installreg)", + description = "Command name (install|activate|deactivate|uninstall|download)", required = true) @Completion(ApplicationCommandCompleter.class) String command = null; @@ -90,31 +80,11 @@ protected void doExecute() { // Installs the application from input of the specified URL private boolean installApp(ApplicationAdminService service, String url) { - try { if ("-".equals(url)) { service.install(System.in); - } else if (url.contains("oar")) { - service.install(new URL(url).openStream()); } else { - Set app = get(ApplicationService.class) - .getRegisteredApplications(); - if (app.isEmpty()) { - System.out.println("Could Not Install " + url); - return false; - } - Iterator iterator = app.iterator(); - Application recent = null; - while (iterator.hasNext()) { - Application application = iterator.next(); - if (recent == null && application.id().name().equals(url)) { - recent = application; - } else if (application.version().compareTo(recent.version()) > 0 && - application.id().name().equals(url)) { - recent = application; - } - } - service.install(recent.imageUrl().openStream()); + service.install(new URL(url).openStream()); } } catch (IOException e) { error("Unable to get URL: %s", url); diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java index 03409d0f371..5984603b0dc 100644 --- a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java +++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java @@ -58,20 +58,13 @@ public int complete(Session session, CommandLine commandLine, List candi ApplicationService service = get(ApplicationService.class); Iterator it = service.getApplications().iterator(); SortedSet strings = delegate.getStrings(); - if ("install".equals(cmd)) { - it = service.getRegisteredApplications().iterator(); - while (it.hasNext()) { - strings.add(it.next().id().name()); - } - } else { - while (it.hasNext()) { - Application app = it.next(); - ApplicationState state = service.getState(app.id()); - if ("uninstall".equals(cmd) || "download".equals(cmd) || - ("activate".equals(cmd) && state == INSTALLED) || - ("deactivate".equals(cmd) && state == ACTIVE)) { - strings.add(app.id().name()); - } + while (it.hasNext()) { + Application app = it.next(); + ApplicationState state = service.getState(app.id()); + if ("uninstall".equals(cmd) || "download".equals(cmd) || + ("activate".equals(cmd) && state == INSTALLED) || + ("deactivate".equals(cmd) && state == ACTIVE)) { + strings.add(app.id().name()); } } diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationsListCommand.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationsListCommand.java index 806449e954e..0832f8ca7b2 100644 --- a/cli/src/main/java/org/onosproject/cli/app/ApplicationsListCommand.java +++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationsListCommand.java @@ -61,24 +61,16 @@ public class ApplicationsListCommand extends AbstractShellCommand { @Option(name = "-n", aliases = "--name", description = "Sort by application ID name") private boolean sortByName = false; - - @Option(name = "-r", aliases = "--regapps", description = "Get Registered Apps for Runtime Version") - private boolean getRegisteredApps = false; - @Override protected void doExecute() { ApplicationService service = get(ApplicationService.class); - List apps; - if (getRegisteredApps) { - apps = newArrayList(service.getRegisteredApplications()); - } else { - apps = newArrayList(service.getApplications()); - } + List apps = newArrayList(service.getApplications()); if (sortByName) { apps.sort(Comparator.comparing(app -> app.id().name())); } else { Collections.sort(apps, Comparators.APP_COMPARATOR); } + if (outputJson()) { print("%s", json(service, apps)); } else { diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationService.java b/core/api/src/main/java/org/onosproject/app/ApplicationService.java index 0f2d155add4..aa6b8e6ca68 100644 --- a/core/api/src/main/java/org/onosproject/app/ApplicationService.java +++ b/core/api/src/main/java/org/onosproject/app/ApplicationService.java @@ -91,7 +91,10 @@ default InputStream getApplicationArchive(ApplicationId appId) { * Returns the set of all installed applications. * * @return set of apps putside the build/core environment + * + * @deprecated since onos-2.5 */ + @Deprecated default Set getRegisteredApplications() { return ImmutableSet.of(); } diff --git a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java index 6b18a04b4df..8ebfa4cbd7c 100644 --- a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java +++ b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java @@ -15,14 +15,9 @@ */ package org.onosproject.app.impl; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; import com.google.common.util.concurrent.Uninterruptibles; @@ -37,9 +32,6 @@ import org.onosproject.app.ApplicationStoreDelegate; import org.onosproject.core.Application; import org.onosproject.core.ApplicationId; -import org.onosproject.core.DefaultApplication; -import org.onosproject.core.DefaultApplicationId; -import org.onosproject.core.Version; import org.onosproject.core.VersionService; import org.onosproject.event.AbstractListenerManager; import org.onosproject.security.Permission; @@ -51,19 +43,17 @@ import org.osgi.service.component.annotations.ReferenceCardinality; import org.slf4j.Logger; -import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Iterator; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.app.ApplicationEvent.Type.*; +import static org.onosproject.app.ApplicationEvent.Type.APP_ACTIVATED; +import static org.onosproject.app.ApplicationEvent.Type.APP_DEACTIVATED; +import static org.onosproject.app.ApplicationEvent.Type.APP_INSTALLED; +import static org.onosproject.app.ApplicationEvent.Type.APP_UNINSTALLED; import static org.onosproject.security.AppGuard.checkPermission; import static org.onosproject.security.AppPermission.Type.APP_READ; import static org.slf4j.LoggerFactory.getLogger; @@ -78,8 +68,6 @@ public class ApplicationManager private final Logger log = getLogger(getClass()); - private static final String APP_REGISTRY_URL = "http://api.onosproject.org:8080/api/applications"; - private static final String APP_ID_NULL = "Application ID cannot be null"; private static final long DEFAULT_OPERATION_TIMEOUT_MILLIS = 2000; private final ApplicationStoreDelegate delegate = new InternalStoreDelegate(); @@ -336,67 +324,7 @@ private void invokeHook(Runnable hook, ApplicationId appId) { @Override public Set getRegisteredApplications() { - ImmutableSet.Builder builder = ImmutableSet.builder(); - ObjectMapper mapper = new ObjectMapper(); - String vers = versionService.version().toString(); - vers = vers.substring(0, vers.lastIndexOf(".") + 2); - // Get input stream from the URL - try { - URL serverUrl = new URL(APP_REGISTRY_URL + "?onosVersion=" + vers); - HttpURLConnection serverHttp = (HttpURLConnection) serverUrl.openConnection(); - InputStream githubStream = serverHttp.getInputStream(); - - // Read input stream into an ArrayNode - ArrayNode rootTree = (ArrayNode) mapper.readTree(githubStream); - - // Iterate over the array node for each object add each version as application object to the set - rootTree.forEach(n -> { - mapObject(builder, (ObjectNode) n); - }); - - //Iterate through Builder to remove unnecessary apps - Set apps = builder.build(); - - return apps; - } catch (MalformedURLException e) { - throw new IllegalStateException("Bad URL: " + APP_REGISTRY_URL + "?onosVersion=" + vers, e); - } catch (IOException e) { - throw new IllegalStateException("Unable to fetch URL: " + APP_REGISTRY_URL + "?onosVersion=" + vers, e); - } + return ImmutableSet.of(); } - private void mapObject(ImmutableSet.Builder apps, ObjectNode node) { - String appIDs = node.get("id").asText(); - ApplicationId appID = new DefaultApplicationId(1, appIDs); - String title = node.get("title").asText(); - String readme = node.get("readme").asText(); - String category = node.get("category").asText(); - String url = node.get("url").asText(); - String origin = node.get("maintainer").asText(); - JsonNode it = node.get("versions"); - Iterator iterate = it.iterator(); - while (iterate.hasNext()) { - DefaultApplication.Builder app = new DefaultApplication.Builder(); - JsonNode jsonNode = (JsonNode) iterate.next(); - URL imageUrl = null; - try { - imageUrl = new URL(jsonNode.get("oarURL").asText()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - Version version1 = Version.version(jsonNode.get("onosVersion").asText()); - app.withImageUrl(imageUrl) - .withAppId(new DefaultApplicationId(1, node.get("id").asText())) - .withVersion(version1) - .withAppId(appID) - .withReadme(readme) - .withDescription(readme) - .withTitle(title) - .withFeatures(ImmutableList.of("none")) - .withCategory(category) - .withUrl(url) - .withOrigin(origin); - apps.add(app.build()); - } - } } \ No newline at end of file diff --git a/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java b/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java index 203abb78017..8c835c195a7 100644 --- a/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java +++ b/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java @@ -85,14 +85,6 @@ private void validate(Application app) { assertEquals("incorrect features", FEATURES, app.features()); } - @Test - public void testGetRegisteredApps() { - mgr.versionService = new TestVersionService(); - Set apps = mgr.getRegisteredApplications(); - System.out.println(apps); - assertFalse("SET contains less Apps than it should", apps.size() < 158); - } - private static class TestVersionService extends VersionServiceAdapter { @Override From 374e261568453f6bdfced679bc4bf944cad51195 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 31 Jan 2022 13:14:46 +0100 Subject: [PATCH 183/235] [SDFAB-944] Add support for `id` leaf in GNMI driver The id is available through /interfaces/interface[name=*]/state/id, if the device does not support `id` leaf uses as fall back ifindex Change-Id: I22ff5e1df11485ba277644778f4309b1bd407849 --- ...nConfigGnmiDeviceDescriptionDiscovery.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java index eb41f4dea1e..5717ffebe2f 100644 --- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java +++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java @@ -92,6 +92,7 @@ public List discoverPortDetails() { final Map ports = Maps.newHashMap(); final Map annotations = Maps.newHashMap(); + final Map portIds = Maps.newHashMap(); // Creates port descriptions with port name and port number response.getNotificationList() @@ -106,7 +107,7 @@ public List discoverPortDetails() { } final DefaultPortDescription.Builder builder = ports.get(ifName); final DefaultAnnotations.Builder annotationsBuilder = annotations.get(ifName); - parseInterfaceInfo(update, ifName, builder, annotationsBuilder); + parseInterfaceInfo(update, ifName, builder, annotationsBuilder, portIds); }); }); @@ -117,9 +118,14 @@ public List discoverPortDetails() { if (!annotationsBuilder.build().keys().contains(LAST_CHANGE)) { annotationsBuilder.set(LAST_CHANGE, String.valueOf(0)); } + // Override port number if /interfaces/interface/state/id is available + if (portIds.containsKey(key)) { + value.withPortNumber(portIds.get(key)); + } DefaultAnnotations annotation = annotations.get(key).build(); portDescriptionList.add(value.annotations(annotation).build()); }); + return portDescriptionList; } @@ -144,15 +150,17 @@ private GetRequest buildPortStateRequest() { private void parseInterfaceInfo(Update update, String ifName, DefaultPortDescription.Builder builder, - DefaultAnnotations.Builder annotationsBuilder) { + DefaultAnnotations.Builder annotationsBuilder, + Map portIds) { final Path path = update.getPath(); final List elems = path.getElemList(); final Gnmi.TypedValue val = update.getVal(); if (elems.size() == 4) { - // /interfaces/interface/state/ifindex - // /interfaces/interface/state/oper-status - // /interfaces/interface/state/last-change + /* /interfaces/interface/state/ifindex + /interfaces/interface/state/oper-status + /interfaces/interface/state/last-change + /interfaces/interface/state/id */ final String pathElemName = elems.get(3).getName(); switch (pathElemName) { case "ifindex": // port number @@ -164,6 +172,12 @@ private void parseInterfaceInfo(Update update, case "last-change": annotationsBuilder.set(LAST_CHANGE, String.valueOf(val.getUintVal())); return; + case "id": + /* Temporary stored in portIds and eventually substituted + when all updates have been processed. This is done because + there is no guarantee about the order of the updates delivery */ + portIds.put(ifName, PortNumber.portNumber(val.getUintVal(), ifName)); + return; default: break; } From de1f1f7806716ac6e368e55eaf0b887ab89530d4 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Wed, 26 Jan 2022 16:47:08 +0100 Subject: [PATCH 184/235] Refactor UPF entities to have consistent naming and string representations Also, add slice ID into applications and interfaces entities Change-Id: I159bcf04af1504b4e5c7210aa1402218fae3eb8f --- .../net/behaviour/upf/UpfApplication.java | 42 ++++++++-- .../net/behaviour/upf/UpfCounter.java | 40 +++++++++- .../net/behaviour/upf/UpfEntityType.java | 2 +- ...pTunnelPeer.java => UpfGtpTunnelPeer.java} | 48 ++++++------ .../net/behaviour/upf/UpfInterface.java | 78 +++++++++++++------ ...nDownlink.java => UpfSessionDownlink.java} | 44 ++++++----- ...ssionUplink.java => UpfSessionUplink.java} | 36 +++++---- .../behaviour/upf/UpfTerminationDownlink.java | 12 +-- .../behaviour/upf/UpfTerminationUplink.java | 8 +- 9 files changed, 205 insertions(+), 105 deletions(-) rename core/api/src/main/java/org/onosproject/net/behaviour/upf/{GtpTunnelPeer.java => UpfGtpTunnelPeer.java} (72%) rename core/api/src/main/java/org/onosproject/net/behaviour/upf/{SessionDownlink.java => UpfSessionDownlink.java} (76%) rename core/api/src/main/java/org/onosproject/net/behaviour/upf/{SessionUplink.java => UpfSessionUplink.java} (77%) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java index 83bb82078f1..017de89d650 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java @@ -35,16 +35,19 @@ public final class UpfApplication implements UpfEntity { private final Ip4Prefix ipPrefix; private final Range l4PortRange; private final Byte ipProto; + // TODO: move to SliceId object when slice APIs will be promoted to ONOS core. + private final int sliceId; // Action parameter private final byte appId; private final int priority; private UpfApplication(Ip4Prefix ipPrefix, Range l4PortRange, - Byte ipProto, byte appId, int priority) { + Byte ipProto, int sliceId, byte appId, int priority) { this.ipPrefix = ipPrefix; this.l4PortRange = l4PortRange; this.ipProto = ipProto; + this.sliceId = sliceId; this.appId = appId; this.priority = priority; } @@ -70,18 +73,19 @@ public boolean equals(Object object) { return Objects.equals(this.ipPrefix, that.ipPrefix) && Objects.equals(this.l4PortRange, that.l4PortRange) && Objects.equals(this.ipProto, that.ipProto) && + this.sliceId == that.sliceId && this.appId == that.appId && this.priority == that.priority; } @Override public int hashCode() { - return Objects.hash(ipPrefix, l4PortRange, ipProto, appId, priority); + return Objects.hash(ipPrefix, l4PortRange, ipProto, sliceId, appId, priority); } @Override public String toString() { - return "UpfApplication{priority=" + this.priority + ", " + matchString() + " -> " + actionString() + "}"; + return "UpfApplication(priority=" + this.priority + ", " + matchString() + " -> " + actionString() + ")"; } private String matchString() { @@ -101,12 +105,14 @@ private String matchString() { .append(this.ipProto) .append(", "); } - matchStrBuilder.delete(matchStrBuilder.length() - 2, matchStrBuilder.length()); - return matchStrBuilder.append(")").toString(); + matchStrBuilder.append("slice_id=") + .append(this.sliceId) + .append(")"); + return matchStrBuilder.toString(); } private String actionString() { - return "(app_id=" + this.appId + ")"; + return "Action(app_id=" + this.appId + ")"; } /** @@ -136,6 +142,15 @@ public Optional ipProto() { return Optional.ofNullable(ipProto); } + /** + * Gets the slice ID of this UPF application rule. + * + * @return Slice ID + */ + public int sliceId() { + return this.sliceId; + } + /** * Get the application ID of this UPF application rule. * @@ -167,6 +182,7 @@ public static class Builder { private Ip4Prefix ipPrefix = null; private Range l4PortRange = null; private Byte ipProto = null; + private Integer sliceId = null; // Action parameters private Byte appId = null; @@ -211,6 +227,17 @@ public Builder withIpProto(byte ipProto) { return this; } + /** + * Set the slice ID of the UPF application rule. + * + * @param sliceId the slice ID + * @return This builder object + */ + public Builder withSliceId(int sliceId) { + this.sliceId = sliceId; + return this; + } + /** * Set the application ID of the UPF application rule. * @@ -237,9 +264,10 @@ public UpfApplication build() { checkArgument(ipPrefix != null || l4PortRange != null || ipProto != null, "At least one match field is required"); + checkNotNull(sliceId, "Slice ID must be provided"); checkNotNull(appId, "Application ID must be provided"); checkNotNull(priority, "Priority must be provided"); - return new UpfApplication(ipPrefix, l4PortRange, ipProto, appId, priority); + return new UpfApplication(ipPrefix, l4PortRange, ipProto, sliceId, appId, priority); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java index 4eee3fed421..eb41a04cdd2 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java @@ -19,6 +19,8 @@ import com.google.common.annotations.Beta; +import java.util.Objects; + import static com.google.common.base.Preconditions.checkNotNull; /** @@ -50,10 +52,46 @@ public static Builder builder() { @Override public String toString() { - return String.format("Stats:{ CellID: %d, Ingress:(%dpkts,%dbytes), Egress:(%dpkts,%dbytes) }", + return String.format("UpfStats(cell_id=%d, ingress=(%dpkts,%dbytes), egress=(%dpkts,%dbytes))", cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); } + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object == null) { + return false; + } + if (getClass() != object.getClass()) { + return false; + } + UpfCounter that = (UpfCounter) object; + return this.cellId == that.cellId; + } + + /** + * Returns whether this UpfCounter is exactly equal to the given UpfCounter, + * including their packets and bytes values. + * + * @param that other {@link UpfCounter} instance to compare + * @return true if exactly equals, false otherwise + */ + public boolean exactlyEquals(UpfCounter that) { + return this.equals(that) && + this.ingressPkts == that.ingressPkts && + this.ingressBytes == that.ingressBytes && + this.egressPkts == that.egressPkts && + this.egressBytes == that.egressBytes; + } + + + @Override + public int hashCode() { + return Objects.hash(cellId); + } + /** * Get the cell ID (index) of the dataplane counter that produced this set of stats. * diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java index e61abf1cd89..2e9a26a1bc4 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -39,7 +39,7 @@ public enum UpfEntityType { } /** - * Returns a human readable representation of this UPF entity type (useful + * Returns a human-readable representation of this UPF entity type (useful * for logging). * * @return string diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfGtpTunnelPeer.java similarity index 72% rename from core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfGtpTunnelPeer.java index a3cf6628392..04b216bd683 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/GtpTunnelPeer.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfGtpTunnelPeer.java @@ -24,13 +24,13 @@ import static com.google.common.base.Preconditions.checkArgument; /** - * A structure representing a GTP tunnel peer. + * A structure representing a UPF GTP tunnel peer. * The GTP Tunnel Peer is used by UPF to identify a second end of a GTP tunnel. * The source and destination tunnel IPv4 addresses, and source UDP port are set * based on the information from this structure. */ @Beta -public final class GtpTunnelPeer implements UpfEntity { +public final class UpfGtpTunnelPeer implements UpfEntity { // Match keys private final byte tunPeerId; // Action parameters @@ -38,20 +38,20 @@ public final class GtpTunnelPeer implements UpfEntity { private final Ip4Address dst; // The destination address of the unidirectional tunnel private final short srcPort; // Tunnel source port, default 2152 - private GtpTunnelPeer(byte tunPeerId, Ip4Address src, Ip4Address dst, short srcPort) { + private UpfGtpTunnelPeer(byte tunPeerId, Ip4Address src, Ip4Address dst, short srcPort) { this.tunPeerId = tunPeerId; this.src = src; this.dst = dst; this.srcPort = srcPort; } - public static GtpTunnelPeer.Builder builder() { - return new GtpTunnelPeer.Builder(); + public static UpfGtpTunnelPeer.Builder builder() { + return new UpfGtpTunnelPeer.Builder(); } @Override public String toString() { - return String.format("GTP-Tunnel-Peer(%s -> src:%s, dst:%s srcPort:%s)", + return String.format("UpfGtpTunnelPeer(tunn_peer_id=%s -> src=%s, dst=%s src_port=%s)", tunPeerId, src.toString(), dst.toString(), srcPort); } @@ -68,20 +68,20 @@ public boolean equals(Object object) { return false; } - GtpTunnelPeer that = (GtpTunnelPeer) object; - return (this.tunPeerId == that.tunPeerId && + UpfGtpTunnelPeer that = (UpfGtpTunnelPeer) object; + return this.tunPeerId == that.tunPeerId && this.src.equals(that.src) && this.dst.equals(that.dst) && - (this.srcPort == that.srcPort)); + this.srcPort == that.srcPort; } @Override public int hashCode() { - return Objects.hash(src, dst, srcPort); + return Objects.hash(tunPeerId, src, dst, srcPort); } /** - * Get the ID of the GTP tunnel peer. + * Get the ID of the UPF GTP tunnel peer. * * @return GTP tunnel peer ID */ @@ -90,7 +90,7 @@ public byte tunPeerId() { } /** - * Get the source IP address of this unidirectional GTP tunnel. + * Get the source IP address of this unidirectional UPF GTP tunnel. * * @return tunnel source IP */ @@ -99,7 +99,7 @@ public Ip4Address src() { } /** - * Get the destination address of this unidirectional GTP tunnel. + * Get the destination address of this unidirectional UPF GTP tunnel. * * @return tunnel destination IP */ @@ -108,7 +108,7 @@ public Ip4Address dst() { } /** - * Get the source L4 port of this unidirectional GTP tunnel. + * Get the source L4 port of this unidirectional UPF GTP tunnel. * * @return tunnel source port */ @@ -132,54 +132,54 @@ public Builder() { } /** - * Set the ID of the GTP Tunnel peer. + * Set the ID of the UPF GTP Tunnel peer. * * @param tunPeerId GTP tunnel peer ID * @return This builder object */ - public GtpTunnelPeer.Builder withTunnelPeerId(byte tunPeerId) { + public UpfGtpTunnelPeer.Builder withTunnelPeerId(byte tunPeerId) { this.tunPeerId = tunPeerId; return this; } /** - * Set the source IP address of the unidirectional GTP tunnel. + * Set the source IP address of the unidirectional UPF GTP tunnel. * * @param src GTP tunnel source IP * @return This builder object */ - public GtpTunnelPeer.Builder withSrcAddr(Ip4Address src) { + public UpfGtpTunnelPeer.Builder withSrcAddr(Ip4Address src) { this.src = src; return this; } /** - * Set the destination IP address of the unidirectional GTP tunnel. + * Set the destination IP address of the unidirectional UPF GTP tunnel. * * @param dst GTP tunnel destination IP * @return This builder object */ - public GtpTunnelPeer.Builder withDstAddr(Ip4Address dst) { + public UpfGtpTunnelPeer.Builder withDstAddr(Ip4Address dst) { this.dst = dst; return this; } /** - * Set the source port of this unidirectional GTP tunnel. + * Set the source port of this unidirectional UPF GTP tunnel. * * @param srcPort tunnel source port * @return this builder object */ - public GtpTunnelPeer.Builder withSrcPort(short srcPort) { + public UpfGtpTunnelPeer.Builder withSrcPort(short srcPort) { this.srcPort = srcPort; return this; } - public GtpTunnelPeer build() { + public UpfGtpTunnelPeer build() { checkArgument(tunPeerId != null, "Tunnel Peer ID must be provided"); checkArgument(src != null, "Tunnel source address cannot be null"); checkArgument(dst != null, "Tunnel destination address cannot be null"); - return new GtpTunnelPeer(this.tunPeerId, this.src, this.dst, srcPort); + return new UpfGtpTunnelPeer(this.tunPeerId, this.src, this.dst, srcPort); } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java index f697d15797f..cf10ae17afb 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java @@ -31,10 +31,13 @@ public final class UpfInterface implements UpfEntity { private final Ip4Prefix prefix; private final Type type; + // TODO: move to SliceId object when slice APIs will be promoted to ONOS core. + private final int sliceId; - private UpfInterface(Ip4Prefix prefix, Type type) { + private UpfInterface(Ip4Prefix prefix, Type type, int sliceId) { this.prefix = prefix; this.type = type; + this.sliceId = sliceId; } public static Builder builder() { @@ -43,17 +46,7 @@ public static Builder builder() { @Override public String toString() { - String typeStr; - if (type.equals(Type.ACCESS)) { - typeStr = "Access"; - } else if (type.equals(Type.CORE)) { - typeStr = "Core"; - } else if (type.equals(Type.DBUF)) { - typeStr = "Dbuf-Receiver"; - } else { - typeStr = "UNKNOWN"; - } - return String.format("Interface{%s, %s}", typeStr, prefix); + return String.format("UpfInterface(type=%s, prefix=%s, slice_id=%s)", type.toString(), prefix, sliceId); } @Override @@ -68,43 +61,58 @@ public boolean equals(Object obj) { return false; } UpfInterface that = (UpfInterface) obj; - return (this.type.equals(that.type) && - this.prefix.equals(that.prefix)); + return this.type.equals(that.type) && + this.prefix.equals(that.prefix) && + this.sliceId == that.sliceId; } @Override public int hashCode() { - return Objects.hash(prefix, type); + return Objects.hash(prefix, type, sliceId); } /** * Create a core-facing UPF Interface from the given address, which will be treated as a /32 prefix. - * * @param address the address of the new core-facing interface + * @param sliceId the slice if of the new interface * @return a new UPF interface */ - public static UpfInterface createS1uFrom(Ip4Address address) { - return builder().setAccess().setPrefix(Ip4Prefix.valueOf(address, 32)).build(); + public static UpfInterface createS1uFrom(Ip4Address address, int sliceId) { + return builder() + .setAccess() + .setPrefix(Ip4Prefix.valueOf(address, 32)) + .setSliceId(sliceId) + .build(); } /** * Create a core-facing UPF Interface from the given IP prefix. * * @param prefix the prefix of the new core-facing interface + * @param sliceId the slice if of the new interface * @return a new UPF interface */ - public static UpfInterface createUePoolFrom(Ip4Prefix prefix) { - return builder().setCore().setPrefix(prefix).build(); + public static UpfInterface createUePoolFrom(Ip4Prefix prefix, int sliceId) { + return builder() + .setCore() + .setPrefix(prefix) + .setSliceId(sliceId) + .build(); } /** * Create a dbuf-receiving UPF interface from the given IP address. * * @param address the address of the dbuf-receiving interface + * @param sliceId the slice if of the new interface * @return a new UPF interface */ - public static UpfInterface createDbufReceiverFrom(Ip4Address address) { - return UpfInterface.builder().setDbufReceiver().setAddress(address).build(); + public static UpfInterface createDbufReceiverFrom(Ip4Address address, int sliceId) { + return builder() + .setDbufReceiver() + .setAddress(address) + .setSliceId(sliceId) + .build(); } /** @@ -116,6 +124,15 @@ public Ip4Prefix prefix() { return prefix; } + /** + * Get the slice ID of this interface. + * + * @return the slice ID + */ + public int sliceId() { + return sliceId; + } + /** * Check if this UPF interface is for packets traveling from UEs. * This will be true for S1U interface table entries. @@ -187,6 +204,7 @@ public enum Type { public static class Builder { private Ip4Prefix prefix; private Type type; + private Integer sliceId; public Builder() { type = Type.UNKNOWN; @@ -203,6 +221,17 @@ public Builder setPrefix(Ip4Prefix prefix) { return this; } + /** + * Set the slice ID of this interface. + * + * @param sliceId the slice ID + * @return this builder object + */ + public Builder setSliceId(int sliceId) { + this.sliceId = sliceId; + return this; + } + /** * Set the IPv4 prefix of this interface, by turning the given address into a /32 prefix. * @@ -245,8 +274,9 @@ public Builder setDbufReceiver() { } public UpfInterface build() { - checkNotNull(prefix); - return new UpfInterface(prefix, type); + checkNotNull(prefix, "The IPv4 prefix must be provided"); + checkNotNull(sliceId, "Slice ID must be provided"); + return new UpfInterface(prefix, type, sliceId); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java similarity index 76% rename from core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java index 8146d2b6a7e..413c7ed4eba 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java @@ -25,10 +25,10 @@ /** * A structure representing the UE Session on the UPF-programmable device. - * Provides means to set up the UE Session in the downlink direction. + * Provide means to set up the UPF UE Session in the downlink direction. */ @Beta -public final class SessionDownlink implements UpfEntity { +public final class UpfSessionDownlink implements UpfEntity { // Match Keys private final Ip4Address ueAddress; // Action parameters @@ -36,10 +36,10 @@ public final class SessionDownlink implements UpfEntity { private final boolean buffering; private final boolean dropping; - private SessionDownlink(Ip4Address ipv4Address, - Byte tunPeerId, - boolean buffering, - boolean drop) { + private UpfSessionDownlink(Ip4Address ipv4Address, + Byte tunPeerId, + boolean buffering, + boolean drop) { this.ueAddress = ipv4Address; this.tunPeerId = tunPeerId; this.buffering = buffering; @@ -50,6 +50,7 @@ public static Builder builder() { return new Builder(); } + @Override public boolean equals(Object object) { if (object == this) { return true; @@ -61,7 +62,7 @@ public boolean equals(Object object) { return false; } - SessionDownlink that = (SessionDownlink) object; + UpfSessionDownlink that = (UpfSessionDownlink) object; return this.buffering == that.buffering && this.dropping == that.dropping && @@ -69,13 +70,14 @@ public boolean equals(Object object) { Objects.equals(tunPeerId, that.tunPeerId); } + @Override public int hashCode() { return java.util.Objects.hash(ueAddress, tunPeerId, buffering, dropping); } @Override public String toString() { - return "UESessionDL{" + matchString() + " -> " + actionString() + "}"; + return "UpfSessionDL(" + matchString() + " -> " + actionString() + ")"; } private String matchString() { @@ -83,7 +85,7 @@ private String matchString() { } private String actionString() { - StringBuilder actionStrBuilder = new StringBuilder("("); + StringBuilder actionStrBuilder = new StringBuilder("Action("); if (this.needsBuffering() && this.needsDropping()) { actionStrBuilder.append("BUFF+DROP, "); } else if (this.needsBuffering()) { @@ -98,25 +100,25 @@ private String actionString() { } /** - * True if this UE Session needs buffering of the downlink traffic. + * True if this UPF UE Session needs buffering of the downlink traffic. * - * @return true if the UE Session needs buffering. + * @return true if the UPF UE Session needs buffering. */ public boolean needsBuffering() { return buffering; } /** - * True if this UE Session needs dropping of the downlink traffic. + * True if this UPF UE Session needs dropping of the downlink traffic. * - * @return true if the UE Session needs dropping. + * @return true if the UPF UE Session needs dropping. */ public boolean needsDropping() { return dropping; } /** - * Get the UE IP address of this downlink UE session. + * Get the UE IP address of this downlink UPF UE session. * * @return UE IP address */ @@ -125,7 +127,7 @@ public Ip4Address ueAddress() { } /** - * Get the GTP tunnel peer ID that is set by this UE Session rule. + * Get the GTP tunnel peer ID that is set by this UPF UE Session rule. * * @return GTP tunnel peer ID */ @@ -149,7 +151,7 @@ public Builder() { } /** - * Set the UE IP address that this downlink UE session rule matches on. + * Set the UE IP address that this downlink UPF UE session rule matches on. * * @param ueAddress UE IP address * @return This builder object @@ -160,7 +162,7 @@ public Builder withUeAddress(Ip4Address ueAddress) { } /** - * Set the GTP tunnel peer ID that is set by this UE Session rule. + * Set the GTP tunnel peer ID that is set by this UPF UE Session rule. * * @param tunnelPeerId GTP tunnel peer ID * @return This builder object @@ -171,7 +173,7 @@ public Builder withGtpTunnelPeerId(Byte tunnelPeerId) { } /** - * Sets whether to buffer downlink UE session traffic or not. + * Set whether to buffer downlink UPF UE session traffic or not. * * @param buffer True if request to buffer, false otherwise * @return This builder object @@ -182,7 +184,7 @@ public Builder needsBuffering(boolean buffer) { } /** - * Sets whether to drop downlink UE session traffic or not. + * Set whether to drop downlink UPF UE session traffic or not. * * @param drop True if request to buffer, false otherwise * @return This builder object @@ -192,10 +194,10 @@ public Builder needsDropping(boolean drop) { return this; } - public SessionDownlink build() { + public UpfSessionDownlink build() { // Match fields are required checkNotNull(ueAddress, "UE address must be provided"); - return new SessionDownlink(ueAddress, tunPeerId, buffer, drop); + return new UpfSessionDownlink(ueAddress, tunPeerId, buffer, drop); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java similarity index 77% rename from core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java rename to core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java index a2f046005ff..0a6bfa43660 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/SessionUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java @@ -25,10 +25,10 @@ /** * A structure representing the UE Session on the UPF-programmable device. - * Provides means to set up the UE Session in the uplink direction. + * Provide means to set up the UPF UE Session in the uplink direction. */ @Beta -public final class SessionUplink implements UpfEntity { +public final class UpfSessionUplink implements UpfEntity { // Match Keys private final Ip4Address tunDestAddr; // The tunnel destination address (N3/S1U IPv4 address) private final Integer teid; // The Tunnel Endpoint ID that this UeSession matches on @@ -36,9 +36,9 @@ public final class SessionUplink implements UpfEntity { // Action parameters private final boolean dropping; // Used to convey dropping information - private SessionUplink(Ip4Address tunDestAddr, - Integer teid, - boolean drop) { + private UpfSessionUplink(Ip4Address tunDestAddr, + Integer teid, + boolean drop) { this.tunDestAddr = tunDestAddr; this.teid = teid; this.dropping = drop; @@ -48,6 +48,7 @@ public static Builder builder() { return new Builder(); } + @Override public boolean equals(Object object) { if (object == this) { return true; @@ -59,28 +60,29 @@ public boolean equals(Object object) { return false; } - SessionUplink that = (SessionUplink) object; + UpfSessionUplink that = (UpfSessionUplink) object; return this.dropping == that.dropping && Objects.equals(tunDestAddr, that.tunDestAddr) && Objects.equals(teid, that.teid); } + @Override public int hashCode() { return Objects.hash(tunDestAddr, teid, dropping); } @Override public String toString() { - return "UESessionUL{" + matchString() + " -> " + actionString() + "}"; + return "UpfSessionUL(" + matchString() + " -> " + actionString() + ")"; } private String matchString() { - return "Match(tun_dst_addr=" + this.tunDstAddr() + ", TEID=" + this.teid() + ")"; + return "Match(tun_dst_addr=" + this.tunDstAddr() + ", teid=" + this.teid() + ")"; } private String actionString() { - StringBuilder actionStrBuilder = new StringBuilder("("); + StringBuilder actionStrBuilder = new StringBuilder("Action("); if (this.needsDropping()) { actionStrBuilder.append("DROP"); @@ -91,7 +93,7 @@ private String actionString() { } /** - * True if this UE Session needs dropping of the uplink traffic. + * True if this UPF UE Session needs dropping of the uplink traffic. * * @return true if the UE Session needs dropping. */ @@ -100,7 +102,7 @@ public boolean needsDropping() { } /** - * Get the tunnel destination IP address in the uplink UE session (N3/S1U IP address). + * Get the tunnel destination IP address in the uplink UPF UE session (N3/S1U IP address). * * @return UE IP address */ @@ -109,7 +111,7 @@ public Ip4Address tunDstAddr() { } /** - * Get the identifier of the GTP tunnel that this UE Session rule matches on. + * Get the identifier of the GTP tunnel that this UPF UE Session rule matches on. * * @return GTP tunnel ID */ @@ -132,7 +134,7 @@ public Builder() { } /** - * Set the tunnel destination IP address (N3/S1U address) that this UE Session rule matches on. + * Set the tunnel destination IP address (N3/S1U address) that this UPF UE Session rule matches on. * * @param tunDstAddr The tunnel destination IP address * @return This builder object @@ -143,7 +145,7 @@ public Builder withTunDstAddr(Ip4Address tunDstAddr) { } /** - * Set the identifier of the GTP tunnel that this UE Session rule matches on. + * Set the identifier of the GTP tunnel that this UPF UE Session rule matches on. * * @param teid GTP tunnel ID * @return This builder object @@ -155,7 +157,7 @@ public Builder withTeid(Integer teid) { /** - * Sets whether to drop uplink UE session traffic or not. + * Sets whether to drop uplink UPF UE session traffic or not. * * @param drop True if request to buffer, false otherwise * @return This builder object @@ -165,11 +167,11 @@ public Builder needsDropping(boolean drop) { return this; } - public SessionUplink build() { + public UpfSessionUplink build() { // Match keys are required. checkNotNull(tunDstAddr, "Tunnel destination must be provided"); checkNotNull(teid, "TEID must be provided"); - return new SessionUplink(tunDstAddr, teid, drop); + return new UpfSessionUplink(tunDstAddr, teid, drop); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java index cbb601b3095..edab0acec4c 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -153,7 +153,7 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationDL{" + matchString() + " -> " + actionString() + "}"; + return "UpfTerminationDL(" + matchString() + " -> " + actionString() + ")"; } private String matchString() { @@ -165,11 +165,11 @@ private String actionString() { if (this.needsDropping()) { fwd = "DROP"; } - return "(" + fwd + - ", TEID=" + this.teid() + - ", CTR_ID=" + this.counterId() + - ", QFI=" + this.qfi() + - ", TC=" + this.trafficClass() + + return "Action(" + fwd + + ", teid=" + this.teid() + + ", ctr_id=" + this.counterId() + + ", qfi=" + this.qfi() + + ", tc=" + this.trafficClass() + ")"; } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java index 1c6dd56491b..93ac0b732cc 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -129,7 +129,7 @@ public UpfEntityType type() { @Override public String toString() { - return "TerminationUL{" + matchString() + " -> " + actionString() + "}"; + return "UpfTerminationUL(" + matchString() + " -> " + actionString() + ")"; } private String matchString() { @@ -141,9 +141,9 @@ private String actionString() { if (this.needsDropping()) { fwd = "DROP"; } - return "(" + fwd + - ", CTR_ID=" + this.counterId() + - ", TC=" + this.trafficClass() + + return "Action(" + fwd + + ", ctr_id=" + this.counterId() + + ", tc=" + this.trafficClass() + ")"; } From c19294d321e00526bc1748766bda344c859e7cbf Mon Sep 17 00:00:00 2001 From: pierventre Date: Wed, 2 Feb 2022 22:33:41 +0100 Subject: [PATCH 185/235] Introduce cfg property to enable/disable read port-id path Change-Id: Ieaf08c730039cd44af0d60462a3b4b5885322c45 --- ...nConfigGnmiDeviceDescriptionDiscovery.java | 9 +++++++-- providers/general/device/BUILD | 1 + .../device/impl/GeneralDeviceProvider.java | 20 +++++++++++++++++++ .../device/impl/OsgiPropertyConstants.java | 3 +++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java index 5717ffebe2f..ee7ccc5df96 100644 --- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java +++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java @@ -61,6 +61,10 @@ public class OpenConfigGnmiDeviceDescriptionDiscovery private static final String UNKNOWN = "unknown"; + // FIXME temporary solution will be removed when the + // transition to p4rt translation is completed + public static boolean readPortId = false; + public OpenConfigGnmiDeviceDescriptionDiscovery() { super(GnmiController.class); } @@ -118,8 +122,9 @@ public List discoverPortDetails() { if (!annotationsBuilder.build().keys().contains(LAST_CHANGE)) { annotationsBuilder.set(LAST_CHANGE, String.valueOf(0)); } - // Override port number if /interfaces/interface/state/id is available - if (portIds.containsKey(key)) { + /* Override port number if read port-id is enabled + and /interfaces/interface/state/id is available */ + if (readPortId && portIds.containsKey(key)) { value.withPortNumber(portIds.get(key)); } DefaultAnnotations annotation = annotations.get(key).build(); diff --git a/providers/general/device/BUILD b/providers/general/device/BUILD index 511201a838e..6e1d53ea08f 100644 --- a/providers/general/device/BUILD +++ b/providers/general/device/BUILD @@ -3,6 +3,7 @@ COMPILE_DEPS = CORE_DEPS + JACKSON + [ "//protocols/gnmi/api:onos-protocols-gnmi-api", "//deps:com_google_protobuf_protobuf_java", "//protocols/grpc/api:onos-protocols-grpc-api", + "//drivers/gnmi:onos-drivers-gnmi", ] osgi_jar_with_tests( diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index b892460bbdf..c91cfb24115 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -27,6 +27,7 @@ import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; import org.onosproject.core.CoreService; +import org.onosproject.drivers.gnmi.OpenConfigGnmiDeviceDescriptionDiscovery; import org.onosproject.gnmi.api.GnmiController; import org.onosproject.mastership.MastershipInfo; import org.onosproject.mastership.MastershipService; @@ -97,6 +98,8 @@ import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.CHECKUP_INTERVAL; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.CHECKUP_INTERVAL_DEFAULT; +import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.READ_PORT_ID; +import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.READ_PORT_ID_DEFAULT; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.STATS_POLL_INTERVAL; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.STATS_POLL_INTERVAL_DEFAULT; import static org.slf4j.LoggerFactory.getLogger; @@ -111,6 +114,7 @@ property = { CHECKUP_INTERVAL + ":Integer=" + CHECKUP_INTERVAL_DEFAULT, STATS_POLL_INTERVAL + ":Integer=" + STATS_POLL_INTERVAL_DEFAULT, + READ_PORT_ID + ":Boolean=" + READ_PORT_ID_DEFAULT, }) public class GeneralDeviceProvider extends AbstractProvider implements DeviceProvider { @@ -174,6 +178,11 @@ public class GeneralDeviceProvider extends AbstractProvider */ private int statsPollInterval = STATS_POLL_INTERVAL_DEFAULT; + /** + * Configure read port-id for gnmi drivers; default is false. + */ + private boolean readPortId = READ_PORT_ID_DEFAULT; + private final Map handshakersWithListeners = Maps.newConcurrentMap(); private final Map lastCheckups = Maps.newConcurrentMap(); private final InternalPipeconfWatchdogListener pipeconfWatchdogListener = new InternalPipeconfWatchdogListener(); @@ -233,6 +242,11 @@ public void modified(ComponentContext context) { properties, STATS_POLL_INTERVAL, STATS_POLL_INTERVAL_DEFAULT); log.info("Configured. {} is configured to {} seconds", STATS_POLL_INTERVAL, statsPollInterval); + final boolean oldReaPortId = readPortId; + String strReadPortId = Tools.get(properties, READ_PORT_ID); + readPortId = Boolean.parseBoolean(strReadPortId); + log.info("Configured. {} is configured to {}", + READ_PORT_ID, readPortId); if (oldCheckupInterval != checkupInterval) { startOrReschedulePeriodicCheckupTasks(); @@ -241,6 +255,12 @@ public void modified(ComponentContext context) { if (oldStatsPollFrequency != statsPollInterval) { statsPoller.reschedule(statsPollInterval); } + + if (oldReaPortId != readPortId) { + // FIXME temporary solution will be removed when the + // transition to p4rt translation is completed + OpenConfigGnmiDeviceDescriptionDiscovery.readPortId = readPortId; + } } @Deactivate diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java index f2f2d08fc82..ce18b0f3751 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java @@ -29,4 +29,7 @@ private OsgiPropertyConstants() {} public static final String CHECKUP_INTERVAL = "checkupInterval"; public static final int CHECKUP_INTERVAL_DEFAULT = 10; + public static final String READ_PORT_ID = "readPortId"; + public static final boolean READ_PORT_ID_DEFAULT = false; + } From bac5f692fffeea6f91a059c9e0cfb35e77c4ac9e Mon Sep 17 00:00:00 2001 From: Yi Tseng Date: Thu, 3 Feb 2022 15:33:55 -0800 Subject: [PATCH 186/235] Handle huge egress port number in PreReplicaCodec When using logical port for replica such as SDN CPU port (0xfffffffd), the PreReplicaCodec will throw an ArithmeticException since this value is too big for an signed 32-bit integer. In that example, we need to convert the value to -3 According to the protobuf document[1]: "In Java, unsigned 32-bit and 64-bit integers are represented using their signed counterparts, with the top bit simply being stored in the sign bit." [1]: https://developers.google.com/protocol-buffers/docs/proto#scalar Change-Id: Ie3bda828d499b7d26d7b790f9ed76bb687243e57 --- .../onosproject/p4runtime/ctl/codec/PreReplicaCodec.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java index 7402b142c50..315e2697cea 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PreReplicaCodec.java @@ -16,6 +16,7 @@ package org.onosproject.p4runtime.ctl.codec; +import com.google.common.primitives.UnsignedInteger; import org.onosproject.net.PortNumber; import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.runtime.PiPreReplica; @@ -37,8 +38,9 @@ protected P4RuntimeOuterClass.Replica encode( throws CodecException, P4InfoBrowser.NotFoundException { final int p4PortId; try { - p4PortId = Math.toIntExact(replica.egressPort().toLong()); - } catch (ArithmeticException e) { + UnsignedInteger egressPort = UnsignedInteger.valueOf(replica.egressPort().toLong()); + p4PortId = egressPort.intValue(); + } catch (IllegalArgumentException e) { throw new CodecException(format( "Cannot cast 64 bit port value '%s' to 32 bit", replica.egressPort())); From 34583b772af30429052efcc781bd5b57ed1247ca Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Fri, 4 Feb 2022 21:44:25 -0800 Subject: [PATCH 187/235] Replace tost with sdfabric Change-Id: I67ea7df69452eed8d41691098f338f005ea5e091 --- BUILD | 6 ++-- tools/build/bazel/modules.bzl | 58 +++++++++++++++++------------------ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/BUILD b/BUILD index 1ac4159699d..a2530c5e99e 100644 --- a/BUILD +++ b/BUILD @@ -20,7 +20,7 @@ profiles([ "minimal", "seba", "stratum", - "tost", + "sdfabric", "sona", ]) @@ -35,7 +35,7 @@ filegroup( ":minimal_profile": extensions("minimal") + apps("minimal"), ":seba_profile": extensions("seba") + apps("seba"), ":stratum_profile": extensions("stratum") + apps("stratum"), - ":tost_profile": extensions("tost") + apps("tost"), + ":sdfabric_profile": extensions("sdfabric") + apps("sdfabric"), ":sona_profile": extensions("sona") + apps("sona"), "//conditions:default": extensions() + apps(), }), @@ -77,7 +77,7 @@ genrule( ":minimal_profile": apps("minimal"), ":seba_profile": apps("seba"), ":stratum_profile": apps("stratum"), - ":tost_profile": apps("tost"), + ":sdfabric_profile": apps("sdfabric"), ":sona_profile": apps("sona"), "//conditions:default": apps(), }), diff --git a/tools/build/bazel/modules.bzl b/tools/build/bazel/modules.bzl index 32edeb80594..129c3015785 100644 --- a/tools/build/bazel/modules.bzl +++ b/tools/build/bazel/modules.bzl @@ -77,10 +77,10 @@ PROTOCOL_MAP = { } PROTOCOL_APP_MAP = { - "//protocols/grpc:onos-protocols-grpc-oar": ["stratum", "tost", "sona"], - "//protocols/gnmi:onos-protocols-gnmi-oar": ["stratum", "tost", "sona"], - "//protocols/gnoi:onos-protocols-gnoi-oar": ["stratum", "tost"], - "//protocols/p4runtime:onos-protocols-p4runtime-oar": ["stratum", "tost"], + "//protocols/grpc:onos-protocols-grpc-oar": ["stratum", "sdfabric", "sona"], + "//protocols/gnmi:onos-protocols-gnmi-oar": ["stratum", "sdfabric", "sona"], + "//protocols/gnoi:onos-protocols-gnoi-oar": ["stratum", "sdfabric"], + "//protocols/p4runtime:onos-protocols-p4runtime-oar": ["stratum", "sdfabric"], "//protocols/restconf/server:onos-protocols-restconf-server-oar": [], "//protocols/xmpp/core:onos-protocols-xmpp-core-oar": [], "//protocols/xmpp/pubsub:onos-protocols-xmpp-pubsub-oar": [], @@ -103,12 +103,12 @@ PROVIDER_MAP = { } PROVIDER_APP_MAP = { - "//providers/general:onos-providers-general-oar": ["stratum", "tost", "sona"], - "//providers/host:onos-providers-host-oar": ["seba", "stratum", "tost", "sona"], - "//providers/hostprobing:onos-providers-hostprobing-oar": ["seba", "stratum", "tost", "sona"], + "//providers/general:onos-providers-general-oar": ["stratum", "sdfabric", "sona"], + "//providers/host:onos-providers-host-oar": ["seba", "stratum", "sdfabric", "sona"], + "//providers/hostprobing:onos-providers-hostprobing-oar": ["seba", "stratum", "sdfabric", "sona"], "//providers/link:onos-providers-link-oar": ["stratum"], - "//providers/lldp:onos-providers-lldp-oar": ["seba", "stratum", "tost", "sona"], - "//providers/netcfghost:onos-providers-netcfghost-oar": ["seba", "stratum", "tost", "sona"], + "//providers/lldp:onos-providers-lldp-oar": ["seba", "stratum", "sdfabric", "sona"], + "//providers/netcfghost:onos-providers-netcfghost-oar": ["seba", "stratum", "sdfabric", "sona"], "//providers/netcfglinks:onos-providers-netcfglinks-oar": ["stratum"], "//providers/netconf:onos-providers-netconf-oar": [], "//providers/null:onos-providers-null-oar": [], @@ -118,7 +118,7 @@ PROVIDER_APP_MAP = { "//providers/ovsdb:onos-providers-ovsdb-oar": ["sona"], "//providers/ovsdb/host:onos-providers-ovsdb-host-oar": ["sona"], "//providers/ovsdb/base:onos-providers-ovsdb-base-oar": ["sona"], - "//providers/p4runtime:onos-providers-p4runtime-oar": ["stratum", "tost"], + "//providers/p4runtime:onos-providers-p4runtime-oar": ["stratum", "sdfabric"], "//providers/rest:onos-providers-rest-oar": [], "//providers/snmp:onos-providers-snmp-oar": [], "//providers/lisp:onos-providers-lisp-oar": [], @@ -131,10 +131,10 @@ PROVIDER_APP_MAP = { # DRIVER_MAP = { - "//drivers/default:onos-drivers-default-oar": ["minimal", "seba", "stratum", "tost", "sona"], + "//drivers/default:onos-drivers-default-oar": ["minimal", "seba", "stratum", "sdfabric", "sona"], "//drivers/arista:onos-drivers-arista-oar": [], - "//drivers/bmv2:onos-drivers-bmv2-oar": ["stratum", "tost"], - "//drivers/barefoot:onos-drivers-barefoot-oar": ["stratum", "tost"], + "//drivers/bmv2:onos-drivers-bmv2-oar": ["stratum", "sdfabric"], + "//drivers/barefoot:onos-drivers-barefoot-oar": ["stratum", "sdfabric"], "//drivers/ciena/waveserver:onos-drivers-ciena-waveserver-oar": [], "//drivers/ciena/c5162:onos-drivers-ciena-c5162-oar": [], "//drivers/ciena/c5170:onos-drivers-ciena-c5170-oar": [], @@ -145,8 +145,8 @@ DRIVER_MAP = { "//drivers/czechlight:onos-drivers-czechlight-oar": [], "//drivers/flowspec:onos-drivers-flowspec-oar": [], "//drivers/fujitsu:onos-drivers-fujitsu-oar": [], - "//drivers/gnmi:onos-drivers-gnmi-oar": ["stratum", "tost", "sona"], - "//drivers/gnoi:onos-drivers-gnoi-oar": ["stratum", "tost"], + "//drivers/gnmi:onos-drivers-gnmi-oar": ["stratum", "sdfabric", "sona"], + "//drivers/gnoi:onos-drivers-gnoi-oar": ["stratum", "sdfabric"], "//drivers/hp:onos-drivers-hp-oar": [], "//drivers/juniper:onos-drivers-juniper-oar": [], "//drivers/lisp:onos-drivers-lisp-oar": [], @@ -157,11 +157,11 @@ DRIVER_MAP = { "//drivers/oplink:onos-drivers-oplink-oar": [], "//drivers/optical:onos-drivers-optical-oar": [], "//drivers/ovsdb:onos-drivers-ovsdb-oar": ["sona"], - "//drivers/p4runtime:onos-drivers-p4runtime-oar": ["stratum", "tost"], + "//drivers/p4runtime:onos-drivers-p4runtime-oar": ["stratum", "sdfabric"], "//drivers/polatis/netconf:onos-drivers-polatis-netconf-oar": [], "//drivers/polatis/openflow:onos-drivers-polatis-openflow-oar": [], "//drivers/server:onos-drivers-server-oar": [], - "//drivers/stratum:onos-drivers-stratum-oar": ["stratum", "tost"], + "//drivers/stratum:onos-drivers-stratum-oar": ["stratum", "sdfabric"], "//drivers/stratum-odtn:onos-drivers-stratum-odtn-oar": [], "//drivers/zte:onos-drivers-zte-oar": [], } @@ -195,7 +195,7 @@ APP_MAP = { "//apps/cord-support:onos-apps-cord-support-oar": [], "//apps/cpman/app:onos-apps-cpman-app-oar": [], "//apps/dhcp:onos-apps-dhcp-oar": [], - "//apps/dhcprelay:onos-apps-dhcprelay-oar": ["tost"], + "//apps/dhcprelay:onos-apps-dhcprelay-oar": ["sdfabric"], "//apps/drivermatrix:onos-apps-drivermatrix-oar": [], "//apps/events:onos-apps-events-oar": [], "//apps/faultmanagement:onos-apps-faultmanagement-oar": [], @@ -205,7 +205,7 @@ APP_MAP = { "//apps/gangliametrics:onos-apps-gangliametrics-oar": [], "//apps/graphitemetrics:onos-apps-graphitemetrics-oar": [], "//apps/imr:onos-apps-imr-oar": [], - "//apps/inbandtelemetry:onos-apps-inbandtelemetry-oar": ["tost"], + "//apps/inbandtelemetry:onos-apps-inbandtelemetry-oar": ["sdfabric"], "//apps/influxdbmetrics:onos-apps-influxdbmetrics-oar": [], "//apps/intentsync:onos-apps-intentsync-oar": [], "//apps/k8s-networking:onos-apps-k8s-networking-oar": ["sona"], @@ -214,10 +214,10 @@ APP_MAP = { "//apps/layout:onos-apps-layout-oar": [], "//apps/linkprops:onos-apps-linkprops-oar": [], "//apps/mappingmanagement:onos-apps-mappingmanagement-oar": [], - "//apps/mcast:onos-apps-mcast-oar": ["seba", "tost"], + "//apps/mcast:onos-apps-mcast-oar": ["seba", "sdfabric"], "//apps/metrics:onos-apps-metrics-oar": [], "//apps/mfwd:onos-apps-mfwd-oar": [], - "//apps/mlb:onos-apps-mlb-oar": ["tost"], + "//apps/mlb:onos-apps-mlb-oar": ["sdfabric"], "//apps/mobility:onos-apps-mobility-oar": [], "//apps/network-troubleshoot:onos-apps-network-troubleshoot-oar": [], "//apps/newoptical:onos-apps-newoptical-oar": [], @@ -243,18 +243,18 @@ APP_MAP = { "//apps/packet-throttle:onos-apps-packet-throttle-oar": [], "//apps/pathpainter:onos-apps-pathpainter-oar": [], "//apps/pim:onos-apps-pim-oar": [], - "//apps/portloadbalancer:onos-apps-portloadbalancer-oar": ["seba", "tost"], + "//apps/portloadbalancer:onos-apps-portloadbalancer-oar": ["seba", "sdfabric"], "//apps/powermanagement:onos-apps-powermanagement-oar": [], "//apps/proxyarp:onos-apps-proxyarp-oar": [], "//apps/rabbitmq:onos-apps-rabbitmq-oar": [], "//apps/reactive-routing:onos-apps-reactive-routing-oar": [], "//apps/restconf:onos-apps-restconf-oar": [], "//apps/roadm:onos-apps-roadm-oar": [], - "//apps/route-service:onos-apps-route-service-oar": ["seba", "tost"], - "//apps/routeradvertisement:onos-apps-routeradvertisement-oar": ["tost"], + "//apps/route-service:onos-apps-route-service-oar": ["seba", "sdfabric"], + "//apps/routeradvertisement:onos-apps-routeradvertisement-oar": ["sdfabric"], "//apps/routing/cpr:onos-apps-routing-cpr-oar": [], "//apps/routing/fibinstaller:onos-apps-routing-fibinstaller-oar": [], - "//apps/routing/fpm:onos-apps-routing-fpm-oar": ["tost"], + "//apps/routing/fpm:onos-apps-routing-fpm-oar": ["sdfabric"], "//apps/scalablegateway:onos-apps-scalablegateway-oar": [], "//apps/sdnip:onos-apps-sdnip-oar": [], "//apps/simplefabric:onos-apps-simplefabric-oar": [], @@ -279,8 +279,8 @@ APP_MAP = { "//apps/workflow:onos-apps-workflow-oar": [], "//apps/yang-gui:onos-apps-yang-gui-oar": [], "//apps/yang:onos-apps-yang-oar": [], - "//web/gui:onos-web-gui-oar": ["sona", "tost"], - "//web/gui2:onos-web-gui2-oar": ["stratum", "tost"], + "//web/gui:onos-web-gui-oar": ["sona", "sdfabric"], + "//web/gui2:onos-web-gui2-oar": ["stratum", "sdfabric"], } # @@ -288,8 +288,8 @@ APP_MAP = { # PIPELINE_MAP = { - "//pipelines/basic:onos-pipelines-basic-oar": ["stratum", "tost"], - "//pipelines/fabric:onos-pipelines-fabric-oar": ["stratum", "tost"], + "//pipelines/basic:onos-pipelines-basic-oar": ["stratum", "sdfabric"], + "//pipelines/fabric:onos-pipelines-fabric-oar": ["stratum", "sdfabric"], } MODELS_MAP = { From 4a1b4fbcb5a2c358bbd0851116100f4dbec3eae6 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Tue, 8 Feb 2022 11:08:39 +0100 Subject: [PATCH 188/235] Fix get all meters filtering by device id Change-Id: I8fdd21100093579c6ac1caa689a38dc7be1a0141 --- .../onosproject/store/meter/impl/DistributedMeterStore.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java index 43188c1d253..17f85ff9992 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java @@ -357,12 +357,14 @@ public Collection getAllMeters(DeviceId deviceId, MeterScope scope) { if (scope.equals(MeterScope.globalScope())) { return Collections2.transform( Collections2.filter(ImmutableSet.copyOf(metersMap.values()), - (MeterData m) -> m.meter().meterCellId().type() == INDEX), + (MeterData m) -> m.meter().meterCellId().type() == INDEX && + m.meter().deviceId().equals(deviceId)), MeterData::meter); } return Collections2.transform( Collections2.filter(ImmutableSet.copyOf(metersMap.values()), (MeterData m) -> m.meter().meterCellId().type() == PIPELINE_INDEPENDENT && + m.meter().deviceId().equals(deviceId) && ((PiMeterCellId) m.meter().meterCellId()).meterId().id().equals(scope.id())), MeterData::meter); } From ca5cfe77821b2a750570a80418be30a90af25d9b Mon Sep 17 00:00:00 2001 From: Yi Tseng Date: Mon, 7 Feb 2022 11:42:12 -0800 Subject: [PATCH 189/235] Add sdk-port annotation with discover port from Stratum Change-Id: I37f810767df9fb5adee815cd19e78c71a1aaa37c --- .../drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java index ee7ccc5df96..6ae4c331e84 100644 --- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java +++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java @@ -58,6 +58,7 @@ public class OpenConfigGnmiDeviceDescriptionDiscovery .getLogger(OpenConfigGnmiDeviceDescriptionDiscovery.class); private static final String LAST_CHANGE = "last-change"; + private static final String SDK_PORT = "sdk-port"; private static final String UNKNOWN = "unknown"; @@ -170,6 +171,7 @@ private void parseInterfaceInfo(Update update, switch (pathElemName) { case "ifindex": // port number builder.withPortNumber(PortNumber.portNumber(val.getUintVal(), ifName)); + annotationsBuilder.set(SDK_PORT, String.valueOf(val.getUintVal())); return; case "oper-status": builder.isEnabled(parseOperStatus(val.getStringVal())); From b25299afaf824a8d352297224e5b9a1285901d00 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Wed, 26 Jan 2022 15:47:29 +0100 Subject: [PATCH 190/235] [SDFAB-831] Add UPF meters to UpfProgrammable APIs UPF meters can be of type session or application. Also, add meter index to sessions and terminations UPF entities. Change-Id: I8babfca35341a21b234d8eb6edaa2e1c02684210 --- .../net/behaviour/upf/UpfEntity.java | 10 + .../net/behaviour/upf/UpfEntityType.java | 4 +- .../net/behaviour/upf/UpfMeter.java | 268 ++++++++++++++++++ .../net/behaviour/upf/UpfProgrammable.java | 9 + .../net/behaviour/upf/UpfSessionDownlink.java | 41 ++- .../net/behaviour/upf/UpfSessionUplink.java | 38 ++- .../behaviour/upf/UpfTerminationDownlink.java | 33 ++- .../behaviour/upf/UpfTerminationUplink.java | 36 ++- .../onosproject/net/meter/DefaultBand.java | 22 ++ 9 files changed, 441 insertions(+), 20 deletions(-) create mode 100644 core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java index 81dd28aa18e..e54ab341953 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntity.java @@ -28,6 +28,16 @@ public interface UpfEntity { */ byte DEFAULT_APP_ID = 0; + /** + * Default session index, to be used if no session metering is performed. + */ + int DEFAULT_SESSION_INDEX = 0; + + /** + * Default app index, to be used if no app metering is performed. + */ + int DEFAULT_APP_INDEX = 0; + /** * Returns the type of this entity. * diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java index 2e9a26a1bc4..c5d5590d003 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -30,7 +30,9 @@ public enum UpfEntityType { SESSION_UPLINK("session_downlink"), TUNNEL_PEER("tunnel_peer"), COUNTER("counter"), - APPLICATION("application"); + APPLICATION("application"), + SESSION_METER("session_meter"), + APPLICATION_METER("application_meter"); private final String humanReadableName; diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java new file mode 100644 index 00000000000..1a3e79938a2 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java @@ -0,0 +1,268 @@ +/* + * Copyright 2022-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.behaviour.upf; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import org.onosproject.net.meter.Band; +import org.onosproject.net.meter.DefaultBand; + +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.net.behaviour.upf.UpfEntityType.APPLICATION_METER; +import static org.onosproject.net.behaviour.upf.UpfEntityType.SESSION_METER; +import static org.onosproject.net.meter.Band.Type.MARK_RED; +import static org.onosproject.net.meter.Band.Type.MARK_YELLOW; + +/** + * A structure representing a UPF meter, either for metering session (UE) or + * application traffic. + * UPF meters represent PFCP QER MBR and GBR information. + * UPF meters of type session support only the peak band. + * UPF meters of type application support both peak and committed bands. + */ +public final class UpfMeter implements UpfEntity { + private final int cellId; + private final ImmutableMap meterBands; + private final UpfEntityType type; + + private UpfMeter(int cellId, Map meterBands, UpfEntityType type) { + this.cellId = cellId; + this.meterBands = ImmutableMap.copyOf(meterBands); + this.type = type; + } + + @Override + public String toString() { + return String.format("UpfMeter(type=%s, index=%d, committed=%s, peak=%s)", + type, cellId, committedBand().orElse(null), + peakBand().orElse(null)); + } + + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } + + if (object == null) { + return false; + } + + if (getClass() != object.getClass()) { + return false; + } + + UpfMeter that = (UpfMeter) object; + return this.type.equals(that.type) && + this.cellId == that.cellId && + this.meterBands.equals(that.meterBands); + } + + @Override + public int hashCode() { + return Objects.hash(type, cellId, meterBands); + } + + @Override + public UpfEntityType type() { + return this.type; + } + + /** + * Get the meter cell index of this meter. + * + * @return the cell index + */ + public int cellId() { + return this.cellId; + } + + /** + * Get the committed band of this meter. + * + * @return the committed band, Empty if none + */ + public Optional committedBand() { + return Optional.ofNullable(meterBands.getOrDefault(MARK_YELLOW, null)); + } + + /** + * Get the peak band of this meter. + * + * @return the peak band, Empty if none + */ + public Optional peakBand() { + return Optional.ofNullable(meterBands.getOrDefault(MARK_RED, null)); + } + + /** + * Check if this UPF meter is for sessions (UE) traffic. + * + * @return true if the meter is for session traffic + */ + public boolean isSession() { + return type.equals(SESSION_METER); + } + + /** + * Check if this UPF meter is for application traffic. + * + * @return true if the meter is for application traffic + */ + public boolean isApplication() { + return type.equals(APPLICATION_METER); + } + + /** + * Check if this UPF meter is a reset. + * + * @return true if this represents a meter reset. + */ + public boolean isReset() { + return meterBands.isEmpty(); + } + + /** + * Return a session UPF meter with no bands. Used to reset the meter. + * + * @param cellId the meter cell index of this meter + * @return a UpfMeter of type session with no bands + */ + public static UpfMeter resetSession(int cellId) { + return new UpfMeter(cellId, Maps.newHashMap(), SESSION_METER); + } + + /** + * Return an application UPF meter with no bands. Used to reset the meter. + * + * @param cellId the meter cell index of this meter + * @return a UpfMeter of type application with no bands + */ + public static UpfMeter resetApplication(int cellId) { + return new UpfMeter(cellId, Maps.newHashMap(), APPLICATION_METER); + } + + public static Builder builder() { + return new Builder(); + } + + /** + * Builder of UpfMeter object. Use {@link #resetApplication(int)} and + * {@link #resetSession(int)} to reset the meter config. + */ + public static class Builder { + private Integer cellId = null; + private Map bands = Maps.newHashMap(); + private UpfEntityType type; + + public Builder() { + + } + + /** + * Set the meter cell index of this meter. + * + * @param cellId the meter cell index + * @return this builder object + */ + public Builder setCellId(int cellId) { + this.cellId = cellId; + return this; + } + + /** + * Set the committed band of this meter. + * Valid only for meter of type application. + * + * @param cir the Committed Information Rate in bytes/s + * @param cburst the Committed Burst in bytes + * @return this builder object + */ + public Builder setCommittedBand(long cir, long cburst) { + this.bands.put(MARK_YELLOW, + DefaultBand.builder() + .ofType(MARK_YELLOW) + .withRate(cir) + .burstSize(cburst) + .build() + ); + return this; + } + + /** + * Set the peak band of this meter. + * + * @param pir the Peak Information Rate in bytes/s + * @param pburst the Peak Burst in bytes + * @return this builder object + */ + public Builder setPeakBand(long pir, long pburst) { + this.bands.put(MARK_RED, + DefaultBand.builder() + .ofType(MARK_RED) + .withRate(pir) + .burstSize(pburst) + .build() + ); + return this; + } + + /** + * Make this meter a session meter. + * + * @return this builder object + */ + public Builder setSession() { + this.type = SESSION_METER; + return this; + } + + /** + * Make this meter an application meter. + * + * @return this builder object + */ + public Builder setApplication() { + this.type = APPLICATION_METER; + return this; + } + + public UpfMeter build() { + checkNotNull(type, "A meter type must be assigned"); + switch (type) { + case SESSION_METER: + checkArgument(!bands.containsKey(MARK_YELLOW), + "Committed band can not be provided for session meter!"); + break; + case APPLICATION_METER: + checkArgument((bands.containsKey(MARK_YELLOW) && bands.containsKey(MARK_RED)) || bands.isEmpty(), + "Bands (committed and peak) must be provided together or not at all!"); + break; + default: + // I should never reach this point + throw new IllegalArgumentException("Invalid meter type, I should never reach this point"); + } + checkNotNull(cellId, "Meter cell ID must be provided!"); + return new UpfMeter(cellId, bands, type); + } + } +} diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java index 052084e3fed..2fd718ce879 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfProgrammable.java @@ -19,6 +19,7 @@ import com.google.common.annotations.Beta; import org.onosproject.net.driver.HandlerBehaviour; import org.onosproject.net.flow.FlowRule; +import org.onosproject.net.meter.Meter; /** * Provides means to update the device forwarding state to implement a 3GPP @@ -43,4 +44,12 @@ public interface UpfProgrammable extends HandlerBehaviour, UpfDevice { * @return True if the given flow rule has been created by this UPF behaviour, False otherwise. */ boolean fromThisUpf(FlowRule flowRule); + + /** + * Checks if the given meter has been generated by this UPF behaviour. + * + * @param meter the meter to check + * @return True if the given meter has been created by this UPF behaviour, False otherwise. + */ + boolean fromThisUpf(Meter meter); } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java index 413c7ed4eba..02a8a547fe0 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionDownlink.java @@ -33,14 +33,17 @@ public final class UpfSessionDownlink implements UpfEntity { private final Ip4Address ueAddress; // Action parameters private final Byte tunPeerId; + private final int sessionMeterIdx; private final boolean buffering; private final boolean dropping; private UpfSessionDownlink(Ip4Address ipv4Address, Byte tunPeerId, + int sessionMeterIdx, boolean buffering, boolean drop) { this.ueAddress = ipv4Address; + this.sessionMeterIdx = sessionMeterIdx; this.tunPeerId = tunPeerId; this.buffering = buffering; this.dropping = drop; @@ -66,13 +69,14 @@ public boolean equals(Object object) { return this.buffering == that.buffering && this.dropping == that.dropping && + this.sessionMeterIdx == that.sessionMeterIdx && Objects.equals(ueAddress, that.ueAddress) && Objects.equals(tunPeerId, that.tunPeerId); } @Override public int hashCode() { - return java.util.Objects.hash(ueAddress, tunPeerId, buffering, dropping); + return java.util.Objects.hash(ueAddress, sessionMeterIdx, tunPeerId, buffering, dropping); } @Override @@ -95,7 +99,8 @@ private String actionString() { } else { actionStrBuilder.append("FWD, "); } - return actionStrBuilder.append(" tun_peer=").append(this.tunPeerId()).append(")") + return actionStrBuilder.append(" tun_peer=").append(this.tunPeerId()) + .append(", session_meter_idx=").append(this.sessionMeterIdx()).append(")") .toString(); } @@ -135,6 +140,15 @@ public Byte tunPeerId() { return tunPeerId; } + /** + * Get the session meter index that is set by this UPF UE Session rule. + * + * @return Session meter index + */ + public int sessionMeterIdx() { + return this.sessionMeterIdx; + } + @Override public UpfEntityType type() { return UpfEntityType.SESSION_DOWNLINK; @@ -143,6 +157,7 @@ public UpfEntityType type() { public static class Builder { private Ip4Address ueAddress = null; private Byte tunPeerId = null; + private int sessionMeterIdx = DEFAULT_SESSION_INDEX; private boolean buffer = false; private boolean drop = false; @@ -151,7 +166,7 @@ public Builder() { } /** - * Set the UE IP address that this downlink UPF UE session rule matches on. + * Sets the UE IP address that this downlink UPF UE session rule matches on. * * @param ueAddress UE IP address * @return This builder object @@ -162,7 +177,7 @@ public Builder withUeAddress(Ip4Address ueAddress) { } /** - * Set the GTP tunnel peer ID that is set by this UPF UE Session rule. + * Sets the GTP tunnel peer ID that is set by this UPF UE Session rule. * * @param tunnelPeerId GTP tunnel peer ID * @return This builder object @@ -173,7 +188,7 @@ public Builder withGtpTunnelPeerId(Byte tunnelPeerId) { } /** - * Set whether to buffer downlink UPF UE session traffic or not. + * Sets whether to buffer downlink UPF UE session traffic or not. * * @param buffer True if request to buffer, false otherwise * @return This builder object @@ -184,7 +199,7 @@ public Builder needsBuffering(boolean buffer) { } /** - * Set whether to drop downlink UPF UE session traffic or not. + * Sets whether to drop downlink UPF UE session traffic or not. * * @param drop True if request to buffer, false otherwise * @return This builder object @@ -194,10 +209,22 @@ public Builder needsDropping(boolean drop) { return this; } + /** + * Sets the meter index associated with this UE session. + * If not set, default to {@link UpfEntity#DEFAULT_SESSION_INDEX}. + * + * @param sessionMeterIdx Session meter index + * @return This builder object + */ + public Builder withSessionMeterIdx(int sessionMeterIdx) { + this.sessionMeterIdx = sessionMeterIdx; + return this; + } + public UpfSessionDownlink build() { // Match fields are required checkNotNull(ueAddress, "UE address must be provided"); - return new UpfSessionDownlink(ueAddress, tunPeerId, buffer, drop); + return new UpfSessionDownlink(ueAddress, tunPeerId, sessionMeterIdx, buffer, drop); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java index 0a6bfa43660..7cdff7e93ac 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfSessionUplink.java @@ -35,12 +35,15 @@ public final class UpfSessionUplink implements UpfEntity { // Action parameters private final boolean dropping; // Used to convey dropping information + private final int sessionMeterIdx; private UpfSessionUplink(Ip4Address tunDestAddr, Integer teid, + int sessionMeterIdx, boolean drop) { this.tunDestAddr = tunDestAddr; this.teid = teid; + this.sessionMeterIdx = sessionMeterIdx; this.dropping = drop; } @@ -63,13 +66,14 @@ public boolean equals(Object object) { UpfSessionUplink that = (UpfSessionUplink) object; return this.dropping == that.dropping && + this.sessionMeterIdx == that.sessionMeterIdx && Objects.equals(tunDestAddr, that.tunDestAddr) && Objects.equals(teid, that.teid); } @Override public int hashCode() { - return Objects.hash(tunDestAddr, teid, dropping); + return Objects.hash(tunDestAddr, teid, sessionMeterIdx, dropping); } @Override @@ -89,7 +93,9 @@ private String actionString() { } else { actionStrBuilder.append("FWD"); } - return actionStrBuilder.append(")").toString(); + return actionStrBuilder + .append(", session_meter_idx=").append(this.sessionMeterIdx()) + .append(")").toString(); } /** @@ -119,6 +125,15 @@ public Integer teid() { return teid; } + /** + * Get the session meter index that is set by this UPF UE Session rule. + * + * @return Session meter index + */ + public int sessionMeterIdx() { + return this.sessionMeterIdx; + } + @Override public UpfEntityType type() { return UpfEntityType.SESSION_UPLINK; @@ -127,6 +142,7 @@ public UpfEntityType type() { public static class Builder { private Ip4Address tunDstAddr = null; private Integer teid = null; + public int sessionMeterIdx = DEFAULT_SESSION_INDEX; private boolean drop = false; public Builder() { @@ -134,7 +150,7 @@ public Builder() { } /** - * Set the tunnel destination IP address (N3/S1U address) that this UPF UE Session rule matches on. + * Sets the tunnel destination IP address (N3/S1U address) that this UPF UE Session rule matches on. * * @param tunDstAddr The tunnel destination IP address * @return This builder object @@ -145,7 +161,7 @@ public Builder withTunDstAddr(Ip4Address tunDstAddr) { } /** - * Set the identifier of the GTP tunnel that this UPF UE Session rule matches on. + * Sets the identifier of the GTP tunnel that this UPF UE Session rule matches on. * * @param teid GTP tunnel ID * @return This builder object @@ -167,11 +183,23 @@ public Builder needsDropping(boolean drop) { return this; } + /** + * Sets the meter index associated with this UE session. + * If not set, default to {@link UpfEntity#DEFAULT_SESSION_INDEX}. + * + * @param sessionMeterIdx Session meter index + * @return This builder object + */ + public Builder withSessionMeterIdx(int sessionMeterIdx) { + this.sessionMeterIdx = sessionMeterIdx; + return this; + } + public UpfSessionUplink build() { // Match keys are required. checkNotNull(tunDstAddr, "Tunnel destination must be provided"); checkNotNull(teid, "TEID must be provided"); - return new UpfSessionUplink(tunDstAddr, teid, drop); + return new UpfSessionUplink(tunDstAddr, teid, sessionMeterIdx, drop); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java index edab0acec4c..dd667248ed3 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -38,16 +38,18 @@ public final class UpfTerminationDownlink implements UpfEntity { private final Byte trafficClass; private final Integer teid; // Tunnel Endpoint Identifier private final Byte qfi; // QoS Flow Identifier + private final int appMeterIdx; private final boolean dropping; private UpfTerminationDownlink(Ip4Address ueSessionId, byte applicationId, Integer ctrId, Byte trafficClass, - Integer teid, Byte qfi, boolean dropping) { + Integer teid, Byte qfi, int appMeterIdx, boolean dropping) { this.ueSessionId = ueSessionId; this.applicationId = applicationId; this.ctrId = ctrId; this.trafficClass = trafficClass; this.teid = teid; this.qfi = qfi; + this.appMeterIdx = appMeterIdx; this.dropping = dropping; } @@ -75,12 +77,13 @@ public boolean equals(Object obj) { Objects.equals(this.ctrId, that.ctrId) && Objects.equals(this.trafficClass, that.trafficClass) && Objects.equals(this.teid, that.teid) && + this.appMeterIdx == that.appMeterIdx && Objects.equals(this.qfi, that.qfi); } @Override public int hashCode() { - return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, teid, qfi, dropping); + return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, teid, qfi, appMeterIdx, dropping); } /** @@ -146,6 +149,15 @@ public boolean needsDropping() { return dropping; } + /** + * Get the app meter index set by this UPF Termination rule. + * + * @return App meter index + */ + public int appMeterIdx() { + return appMeterIdx; + } + @Override public UpfEntityType type() { return UpfEntityType.TERMINATION_DOWNLINK; @@ -170,6 +182,7 @@ private String actionString() { ", ctr_id=" + this.counterId() + ", qfi=" + this.qfi() + ", tc=" + this.trafficClass() + + ", app_meter_idx=" + this.appMeterIdx() + ")"; } @@ -180,6 +193,7 @@ public static class Builder { private Byte trafficClass = null; private Integer teid = null; private Byte qfi = null; + private int appMeterIdx = DEFAULT_APP_INDEX; private boolean drop = false; public Builder() { @@ -199,6 +213,7 @@ public Builder withUeSessionId(Ip4Address ueSessionId) { /** * Set the ID of the application. + * If not set, default to {@link UpfEntity#DEFAULT_APP_ID}. * * @param applicationId Application ID * @return This builder object @@ -263,6 +278,18 @@ public Builder needsDropping(boolean drop) { return this; } + /** + * Sets the app meter index. + * If not set, default to {@link UpfEntity#DEFAULT_APP_INDEX}. + * + * @param appMeterIdx App meter index + * @return This builder object + */ + public Builder withAppMeterIdx(int appMeterIdx) { + this.appMeterIdx = appMeterIdx; + return this; + } + public UpfTerminationDownlink build() { // Match fields must be provided checkNotNull(ueSessionId, "UE session ID must be provided"); @@ -273,7 +300,7 @@ public UpfTerminationDownlink build() { // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationDownlink( this.ueSessionId, this.applicationId, this.ctrId, this.trafficClass, - this.teid, this.qfi, this.drop + this.teid, this.qfi, this.appMeterIdx, this.drop ); } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java index 93ac0b732cc..ddec2e4946f 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -36,14 +36,17 @@ public final class UpfTerminationUplink implements UpfEntity { // Action parameters private final Integer ctrId; // Counter ID unique to this UPF Termination Rule private final Byte trafficClass; + private final int appMeterIdx; private final boolean dropping; - private UpfTerminationUplink(Ip4Address ueSessionId, byte applicationId, Integer ctrId, Byte trafficClass, - boolean dropping) { + private UpfTerminationUplink(Ip4Address ueSessionId, byte applicationId, + Integer ctrId, Byte trafficClass, + int appMeterIdx, boolean dropping) { this.ueSessionId = ueSessionId; this.applicationId = applicationId; this.ctrId = ctrId; this.trafficClass = trafficClass; + this.appMeterIdx = appMeterIdx; this.dropping = dropping; } @@ -69,12 +72,13 @@ public boolean equals(Object obj) { Objects.equals(this.ueSessionId, that.ueSessionId) && Objects.equals(this.applicationId, that.applicationId) && Objects.equals(this.ctrId, that.ctrId) && + this.appMeterIdx == that.appMeterIdx && Objects.equals(this.trafficClass, that.trafficClass); } @Override public int hashCode() { - return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, dropping); + return Objects.hash(ueSessionId, applicationId, ctrId, trafficClass, appMeterIdx, dropping); } /** @@ -122,6 +126,15 @@ public boolean needsDropping() { return dropping; } + /** + * Get the app meter index set by this UPF Termination rule. + * + * @return App meter index + */ + public int appMeterIdx() { + return appMeterIdx; + } + @Override public UpfEntityType type() { return UpfEntityType.TERMINATION_UPLINK; @@ -144,6 +157,7 @@ private String actionString() { return "Action(" + fwd + ", ctr_id=" + this.counterId() + ", tc=" + this.trafficClass() + + ", app_meter_idx=" + this.appMeterIdx() + ")"; } @@ -152,6 +166,7 @@ public static class Builder { private Byte applicationId = null; private Integer ctrId = null; private Byte trafficClass = null; + private int appMeterIdx = DEFAULT_APP_INDEX; private boolean dropping = false; public Builder() { @@ -171,6 +186,7 @@ public Builder withUeSessionId(Ip4Address ueSessionId) { /** * Set the ID of the application. + * If not set, default to {@link UpfEntity#DEFAULT_APP_ID}. * * @param applicationId Application ID * @return This builder object @@ -213,6 +229,18 @@ public Builder needsDropping(boolean dropping) { return this; } + /** + * Sets the app meter index. + * If not set, default to {@link UpfEntity#DEFAULT_APP_INDEX}. + * + * @param appMeterIdx App meter index + * @return This builder object + */ + public Builder withAppMeterIdx(int appMeterIdx) { + this.appMeterIdx = appMeterIdx; + return this; + } + public UpfTerminationUplink build() { // Match fields must be provided checkNotNull(ueSessionId, "UE session ID must be provided"); @@ -223,7 +251,7 @@ public UpfTerminationUplink build() { // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationUplink( this.ueSessionId, this.applicationId, this.ctrId, - this.trafficClass, this.dropping + this.trafficClass, this.appMeterIdx, this.dropping ); } diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java index e0069a5eb58..85e6c70f268 100644 --- a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java @@ -15,6 +15,8 @@ */ package org.onosproject.net.meter; +import com.google.common.base.Objects; + import static com.google.common.base.MoreObjects.toStringHelper; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -96,6 +98,26 @@ public static Builder builder() { return new Builder(); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultBand that = (DefaultBand) o; + return rate == that.rate && + type == that.type && + Objects.equal(burstSize, that.burstSize) && + Objects.equal(prec, that.prec); + } + + @Override + public int hashCode() { + return Objects.hashCode(type, rate, burstSize, prec); + } + public static final class Builder implements Band.Builder { private long rate; From 3894e9e1492d42d2bb2d8ec3be43da7a0caba945 Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Thu, 10 Feb 2022 18:21:01 +0100 Subject: [PATCH 191/235] Use N3 instead of S1U terminology Change-Id: I54e63b46b9df7a1b62cdb2e4f9807d79e71f8a3b --- .../net/behaviour/upf/UpfInterface.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java index cf10ae17afb..e903d30ae9f 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfInterface.java @@ -25,7 +25,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * A UPF device interface, such as a S1U or UE IP address pool. + * A UPF device interface, such as a N3, or UE IP address pool (N6). */ @Beta public final class UpfInterface implements UpfEntity { @@ -72,12 +72,13 @@ public int hashCode() { } /** - * Create a core-facing UPF Interface from the given address, which will be treated as a /32 prefix. - * @param address the address of the new core-facing interface - * @param sliceId the slice if of the new interface + * Create access-facing UPF Interface (N3) from the given address, which will be treated as a /32 prefix. + * + * @param address the address of the new access-facing interface (N3 interface) + * @param sliceId the slice id of the new interface * @return a new UPF interface */ - public static UpfInterface createS1uFrom(Ip4Address address, int sliceId) { + public static UpfInterface createN3From(Ip4Address address, int sliceId) { return builder() .setAccess() .setPrefix(Ip4Prefix.valueOf(address, 32)) @@ -86,10 +87,10 @@ public static UpfInterface createS1uFrom(Ip4Address address, int sliceId) { } /** - * Create a core-facing UPF Interface from the given IP prefix. + * Create a core-facing UPF Interface (N6) from the given IP prefix. * - * @param prefix the prefix of the new core-facing interface - * @param sliceId the slice if of the new interface + * @param prefix the prefix of the new core-facing interface (N6 interface) + * @param sliceId the slice id of the new interface * @return a new UPF interface */ public static UpfInterface createUePoolFrom(Ip4Prefix prefix, int sliceId) { @@ -104,7 +105,7 @@ public static UpfInterface createUePoolFrom(Ip4Prefix prefix, int sliceId) { * Create a dbuf-receiving UPF interface from the given IP address. * * @param address the address of the dbuf-receiving interface - * @param sliceId the slice if of the new interface + * @param sliceId the slice id of the new interface * @return a new UPF interface */ public static UpfInterface createDbufReceiverFrom(Ip4Address address, int sliceId) { @@ -135,7 +136,7 @@ public int sliceId() { /** * Check if this UPF interface is for packets traveling from UEs. - * This will be true for S1U interface table entries. + * This will be true for N3 interface table entries. * * @return true if interface receives from access */ @@ -185,13 +186,13 @@ public enum Type { /** * Interface that receives GTP encapsulated packets. - * This is the type of the S1U interface. + * This is the type of the N3 interface. */ ACCESS, /** * Interface that receives unencapsulated packets from the core of the network. - * This is the type of UE IP address pool interfaces. + * This is the type of UE IP address pool interfaces (N6). */ CORE, @@ -244,7 +245,7 @@ public Builder setAddress(Ip4Address address) { } /** - * Make this an access-facing interface. + * Make this an access-facing interface (N3). * * @return this builder object */ @@ -254,7 +255,7 @@ public Builder setAccess() { } /** - * Make this a core-facing interface. + * Make this a core-facing interface (N6). * * @return this builder object */ From cdcd91c321c4f9142c6de9d759ddaf6fef8e026e Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 6 May 2021 09:27:00 +0200 Subject: [PATCH 192/235] [SDFAB-933] Integrate atomix-3.1.12 and expose demote API Additionally, this patch adds unit tests for demote and updates a bunch of testing tools Change-Id: I6c4046730707fa3ac88bbd2bcaf2f60250baa899 --- WORKSPACE | 4 +- .../impl/VirtualNetworkMastershipManager.java | 5 +++ .../cluster/LeadershipAdminService.java | 11 +++++ .../onosproject/cluster/LeadershipStore.java | 12 +++++ .../mastership/MastershipAdminService.java | 9 ++++ .../mastership/MastershipStore.java | 9 ++++ .../primitives/DefaultLeaderElector.java | 5 +++ .../store/service/AsyncLeaderElector.java | 12 +++++ .../store/service/LeaderElector.java | 11 +++++ .../store/trivial/SimpleMastershipStore.java | 18 ++++++++ .../trivial/SimpleMastershipStoreTest.java | 27 ++++++++++++ .../cluster/impl/LeadershipManager.java | 5 +++ .../cluster/impl/MastershipManager.java | 9 ++++ .../cluster/impl/MastershipManagerTest.java | 28 ++++++++++++ .../impl/DistributedLeadershipStore.java | 5 +++ .../impl/ConsistentDeviceMastershipStore.java | 6 +++ .../primitives/impl/AtomixLeaderElector.java | 5 +++ deps/deps.json | 14 +++--- tools/build/bazel/generate_workspace.bzl | 44 +++++++++---------- tools/dev/docker/Dockerfile-sshd | 6 +-- tools/test/bin/atomix-push-bits | 2 +- tools/test/bin/atomix-service | 6 +-- tools/test/scenarios/odtn/createOdtnCell.sh | 2 +- 23 files changed, 215 insertions(+), 40 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 29dca06be06..e70e347f5f9 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,8 +42,8 @@ load("//tools/build/bazel:local_jar.bzl", "local_atomix", "local_jar", "local_ya # Use this to build against locally built Atomix #local_atomix( -# path = "/home/developer/atomix", -# version = "3.1.9-SNAPSHOT", +# path = "/home/sdn/atomix", +# version = "3.1.12-SNAPSHOT", #) # Use this to build against locally built YANG tools diff --git a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMastershipManager.java b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMastershipManager.java index 57c0774c9fa..29899528ebc 100644 --- a/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMastershipManager.java +++ b/apps/virtual/app/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkMastershipManager.java @@ -204,6 +204,11 @@ public void balanceRoles() { Futures.getUnchecked(balanceRolesFuture); } + @Override + public void demote(NodeId instance, DeviceId deviceId) { + throw new UnsupportedOperationException("VN mastership does not support promote api."); + } + public class InternalDelegate implements MastershipStoreDelegate { @Override public void notify(MastershipEvent event) { diff --git a/core/api/src/main/java/org/onosproject/cluster/LeadershipAdminService.java b/core/api/src/main/java/org/onosproject/cluster/LeadershipAdminService.java index fe9868a043f..bac18ad9aff 100644 --- a/core/api/src/main/java/org/onosproject/cluster/LeadershipAdminService.java +++ b/core/api/src/main/java/org/onosproject/cluster/LeadershipAdminService.java @@ -54,4 +54,15 @@ public interface LeadershipAdminService { * @return mapping from topic to leadership info. */ Map getLeaderBoard(); + + /** + * Attempts to demote a node to the bottom of the candidate list. It is not allowed + * to demote the current leader + * + * @param topic leadership topic + * @param nodeId identifier of node to be demoted + * @return {@code true} if nodeId is now the bottom candidate. This method returns {@code false} + * if {@code nodeId} is not one of the candidates for the topic or if it is the leader. + */ + boolean demote(String topic, NodeId nodeId); } diff --git a/core/api/src/main/java/org/onosproject/cluster/LeadershipStore.java b/core/api/src/main/java/org/onosproject/cluster/LeadershipStore.java index 0953e3898b8..ebc6b4cb88b 100644 --- a/core/api/src/main/java/org/onosproject/cluster/LeadershipStore.java +++ b/core/api/src/main/java/org/onosproject/cluster/LeadershipStore.java @@ -16,6 +16,7 @@ package org.onosproject.cluster; import java.util.Map; + import org.onosproject.store.Store; /** @@ -79,4 +80,15 @@ public interface LeadershipStore extends Store getLeaderships(); + + /** + * Attempts to demote a node to the bottom of the candidate list. It is not allowed + * to demote the current leader + * + * @param topic leadership topic + * @param nodeId identifier of node to be demoted + * @return {@code true} if nodeId is now the bottom candidate. This method returns {@code false} + * if {@code nodeId} is not one of the candidates for the topic or if it is the leader. + */ + boolean demote(String topic, NodeId nodeId); } \ No newline at end of file diff --git a/core/api/src/main/java/org/onosproject/mastership/MastershipAdminService.java b/core/api/src/main/java/org/onosproject/mastership/MastershipAdminService.java index 8e0679bb0a7..9af5e2f2837 100644 --- a/core/api/src/main/java/org/onosproject/mastership/MastershipAdminService.java +++ b/core/api/src/main/java/org/onosproject/mastership/MastershipAdminService.java @@ -58,4 +58,13 @@ default void setRoleSync(NodeId instance, DeviceId deviceId, MastershipRole role */ void balanceRoles(); + /** + * Attempts to demote a node to the bottom of the backup list. It is not allowed + * to demote the current master + * + * @param instance controller instance identifier + * @param deviceId device identifier + */ + void demote(NodeId instance, DeviceId deviceId); + } diff --git a/core/api/src/main/java/org/onosproject/mastership/MastershipStore.java b/core/api/src/main/java/org/onosproject/mastership/MastershipStore.java index 7f43a15e971..6a9fbf8b9a8 100644 --- a/core/api/src/main/java/org/onosproject/mastership/MastershipStore.java +++ b/core/api/src/main/java/org/onosproject/mastership/MastershipStore.java @@ -129,4 +129,13 @@ public interface MastershipStore extends Store> consumer) { complete(asyncElector.removeChangeListener(consumer)); } + @Override + public boolean demote(String topic, NodeId nodeId) { + return complete(asyncElector.demote(topic, nodeId)); + } + @Override public void addStatusChangeListener(Consumer listener) { asyncElector.addStatusChangeListener(listener); diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java index b253e2a5a25..7aee61fdd38 100644 --- a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java +++ b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java @@ -144,4 +144,16 @@ default LeaderElector asLeaderElector(long timeoutMillis) { default LeaderElector asLeaderElector() { return asLeaderElector(DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS); } + + /** + * Attempts to demote a node to the bottom of the candidate list. It is not allowed + * to demote the current leader + * + * @param topic leadership topic + * @param nodeId identifier of node to be demoted + * @return CompletableFuture that is completed with a boolean when the operation is done. Boolean is true if + * node is now the bottom candidate. This operation can fail (i.e. return false) if the node + * is not registered to run for election for the topic or it is leader + */ + CompletableFuture demote(String topic, NodeId nodeId); } diff --git a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java index 9ac1a6eae85..e7604ebde17 100644 --- a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java +++ b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java @@ -102,4 +102,15 @@ default DistributedPrimitive.Type primitiveType() { * @param consumer listener to remove */ void removeChangeListener(Consumer> consumer); + + /** + * Attempts to demote a node to the bottom of the candidate list. It is not allowed + * to demote the current leader + * + * @param topic leadership topic + * @param nodeId identifier of node to be demoted + * @return {@code true} if nodeId is now the bottom candidate. This method returns {@code false} + * if {@code nodeId} is not one of the candidates for the topic or if it is the leader. + */ + boolean demote(String topic, NodeId nodeId); } diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java index 4536ddae1d4..0f00a5fc05b 100644 --- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java +++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java @@ -412,4 +412,22 @@ public synchronized void relinquishAllRole(NodeId nodeId) { future.whenComplete((event, error) -> notifyDelegate(event)); }); } + + @Override + public void demote(NodeId instance, DeviceId deviceId) { + if (instance == null) { + return; + } + NodeId master = masterMap.get(deviceId); + if (master.equals(instance)) { + return; + } + List stbys = backups.getOrDefault(deviceId, new ArrayList<>()); + if (!stbys.contains(instance)) { + return; + } + stbys.remove(instance); + stbys.add(instance); + backups.put(deviceId, stbys); + } } diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStoreTest.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStoreTest.java index 24c7a47a0f6..cee24312058 100644 --- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStoreTest.java +++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStoreTest.java @@ -20,6 +20,7 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import com.google.common.collect.Lists; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -49,6 +50,8 @@ public class SimpleMastershipStoreTest { private static final NodeId N1 = new NodeId("local"); private static final NodeId N2 = new NodeId("other"); + private static final NodeId N3 = new NodeId("other2"); + private static final NodeId N4 = new NodeId("other3"); private SimpleMastershipStore sms; @@ -170,6 +173,30 @@ public void unsetMaster() { assertEquals("wrong master", N2, event.roleInfo().master()); } + @Test + public void demote() { + put(DID1, N1, true, false); + put(DID1, N2, false, true); + put(DID1, N3, false, true); + List stdbys = Lists.newArrayList(N2, N3); + // N1 master, N2 and N3 backups + assertEquals("wrong role", MASTER, sms.getRole(N1, DID1)); + assertEquals("wrong backups", stdbys, sms.backups.getOrDefault(DID1, new ArrayList<>())); + // No effect, it is the master + sms.demote(N1, DID1); + assertEquals("wrong role", MASTER, sms.getRole(N1, DID1)); + assertEquals("wrong backups", stdbys, sms.backups.getOrDefault(DID1, new ArrayList<>())); + // No effect, it is not part of the mastership + sms.demote(N4, DID1); + assertEquals("wrong role", MASTER, sms.getRole(N1, DID1)); + assertEquals("wrong backups", stdbys, sms.backups.getOrDefault(DID1, new ArrayList<>())); + // Demote N2 + stdbys = Lists.newArrayList(N3, N2); + sms.demote(N2, DID1); + assertEquals("wrong role", MASTER, sms.getRole(N1, DID1)); + assertEquals("wrong backups", stdbys, sms.backups.getOrDefault(DID1, new ArrayList<>())); + } + //helper to populate master/backup structures private void put(DeviceId dev, NodeId node, boolean master, boolean backup) { if (master) { diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/LeadershipManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/LeadershipManager.java index 5d02b5d03dd..f582f30f6ba 100644 --- a/core/net/src/main/java/org/onosproject/cluster/impl/LeadershipManager.java +++ b/core/net/src/main/java/org/onosproject/cluster/impl/LeadershipManager.java @@ -102,6 +102,11 @@ public Map getLeaderBoard() { return store.getLeaderships(); } + @Override + public boolean demote(String topic, NodeId nodeId) { + return store.demote(topic, nodeId); + } + @Override public boolean transferLeadership(String topic, NodeId to) { return store.moveLeadership(topic, to); diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java index 442aaefb924..d6a7eaeafcf 100644 --- a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java +++ b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java @@ -305,6 +305,15 @@ public void balanceRoles() { Futures.getUnchecked(balanceRolesFuture); } + @Override + public void demote(NodeId instance, DeviceId deviceId) { + checkNotNull(instance, NODE_ID_NULL); + checkNotNull(deviceId, DEVICE_ID_NULL); + checkPermission(CLUSTER_WRITE); + + store.demote(instance, deviceId); + } + /** * Balances the nodes specified in controllerDevices. * diff --git a/core/net/src/test/java/org/onosproject/cluster/impl/MastershipManagerTest.java b/core/net/src/test/java/org/onosproject/cluster/impl/MastershipManagerTest.java index 50fc37794fc..2666910ac5b 100644 --- a/core/net/src/test/java/org/onosproject/cluster/impl/MastershipManagerTest.java +++ b/core/net/src/test/java/org/onosproject/cluster/impl/MastershipManagerTest.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; @@ -33,6 +34,7 @@ import org.onosproject.cluster.DefaultControllerNode; import org.onosproject.cluster.NodeId; import org.onosproject.common.event.impl.TestEventDispatcher; +import org.onosproject.mastership.MastershipInfo; import org.onosproject.mastership.MastershipService; import org.onosproject.mastership.MastershipStore; import org.onosproject.mastership.MastershipTermService; @@ -354,6 +356,32 @@ public void balanceWithRegion2() { checkDeviceMasters(deviceIds, expectedMasters); } + @Test + public void demote() { + mgr.setRole(NID1, DID1, MASTER); + mgr.setRole(NID2, DID1, STANDBY); + mgr.setRole(NID3, DID1, STANDBY); + List stdbys = Lists.newArrayList(NID2, NID3); + MastershipInfo mastershipInfo = mgr.getMastershipFor(DID1); + assertTrue(mastershipInfo.master().isPresent()); + assertEquals("wrong role", NID1, mastershipInfo.master().get()); + assertEquals("wrong backups", stdbys, mastershipInfo.backups()); + // No effect, it is the master + mgr.demote(NID1, DID1); + assertEquals("wrong role", NID1, mastershipInfo.master().get()); + assertEquals("wrong backups", stdbys, mastershipInfo.backups()); + // No effect, it is not part of the mastership + mgr.demote(NID4, DID1); + assertEquals("wrong role", NID1, mastershipInfo.master().get()); + assertEquals("wrong backups", stdbys, mastershipInfo.backups()); + // Demote N2 + mgr.demote(NID2, DID1); + stdbys = Lists.newArrayList(NID3, NID2); + mastershipInfo = mgr.getMastershipFor(DID1); + assertEquals("wrong role", NID1, mastershipInfo.master().get()); + assertEquals("wrong backups", stdbys, mastershipInfo.backups()); + } + private void checkDeviceMasters(Set deviceIds, Set expectedMasters) { checkDeviceMasters(deviceIds, expectedMasters, null); } diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java index 43959de9f1d..3e4b68fd948 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java @@ -263,6 +263,11 @@ public Map getLeaderships() { e -> new Leadership(parseTopic(e.getKey()), e.getValue().leader(), e.getValue().candidates()))); } + @Override + public boolean demote(String topic, NodeId nodeId) { + return leaderElector.demote(getTopicFor(topic, nodeId), nodeId); + } + /** * Returns a leader elector topic namespaced with the local node's version. * diff --git a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java index 3c27df279b6..1b540247740 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java @@ -300,6 +300,12 @@ public void relinquishAllRole(NodeId nodeId) { // Noop. LeadershipService already takes care of detecting and purging stale locks. } + @Override + public void demote(NodeId instance, DeviceId deviceId) { + String leadershipTopic = createDeviceMastershipTopic(deviceId); + leadershipAdminService.demote(leadershipTopic, instance); + } + private MastershipInfo buildMastershipFromLeadership(Leadership leadership) { ImmutableMap.Builder builder = ImmutableMap.builder(); if (leadership.leaderNodeId() != null) { diff --git a/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixLeaderElector.java b/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixLeaderElector.java index e92eafba079..b296da061fa 100644 --- a/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixLeaderElector.java +++ b/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixLeaderElector.java @@ -105,6 +105,11 @@ public CompletableFuture removeChangeListener(Consumer> return CompletableFuture.completedFuture(null); } + @Override + public CompletableFuture demote(String topic, NodeId nodeId) { + return adaptFuture(atomixElector.demote(topic, nodeId)); + } + private Leadership toLeadership(String topic, io.atomix.core.election.Leadership leadership) { return leadership != null ? new Leadership(topic, toLeader(leadership.leader()), leadership.candidates()) diff --git a/deps/deps.json b/deps/deps.json index 042ca402b46..d235951500a 100644 --- a/deps/deps.json +++ b/deps/deps.json @@ -126,13 +126,13 @@ "aopalliance-repackaged": "mvn:org.glassfish.hk2.external:aopalliance-repackaged:2.5.0-b42", "amqp-client": "mvn:com.rabbitmq:amqp-client:jar:3.6.1", "asm": "mvn:org.ow2.asm:asm:5.2", - "atomix": "mvn:io.atomix:atomix:3.1.9", - "atomix-cluster": "mvn:io.atomix:atomix-cluster:3.1.9", - "atomix-primary-backup": "mvn:io.atomix:atomix-primary-backup:3.1.9", - "atomix-primitive": "mvn:io.atomix:atomix-primitive:3.1.9", - "atomix-raft": "mvn:io.atomix:atomix-raft:3.1.9", - "atomix-storage": "mvn:io.atomix:atomix-storage:3.1.9", - "atomix-utils": "mvn:io.atomix:atomix-utils:3.1.9", + "atomix": "mvn:io.atomix:atomix:3.1.12", + "atomix-cluster": "mvn:io.atomix:atomix-cluster:3.1.12", + "atomix-primary-backup": "mvn:io.atomix:atomix-primary-backup:3.1.12", + "atomix-primitive": "mvn:io.atomix:atomix-primitive:3.1.12", + "atomix-raft": "mvn:io.atomix:atomix-raft:3.1.12", + "atomix-storage": "mvn:io.atomix:atomix-storage:3.1.12", + "atomix-utils": "mvn:io.atomix:atomix-utils:3.1.12", "classgraph": "mvn:io.github.classgraph:classgraph:4.2.3", "commons-codec": "mvn:commons-codec:commons-codec:1.10", "commons-cli": "mvn:commons-cli:commons-cli:1.3", diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index 5ebcd10cd74..0944a76590a 100644 --- a/tools/build/bazel/generate_workspace.bzl +++ b/tools/build/bazel/generate_workspace.bzl @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Thu, 6 Jan 2022 08:36:09 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Tue, 8 Feb 2022 21:28:04 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -145,45 +145,45 @@ def generated_maven_jars(): if "atomix" not in native.existing_rules(): java_import_external( name = "atomix", - jar_sha256 = "e4700e1acf329747fc41f49279d9066c368877f1381f609fcb4c0ce63824e0c6", + jar_sha256 = "d5163b005977b5da5f27835af528fce4a71127a1c795f5350f05a5767324e019", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix/3.1.9/atomix-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix/3.1.12/atomix-3.1.12.jar"], ) if "atomix_cluster" not in native.existing_rules(): java_import_external( name = "atomix_cluster", - jar_sha256 = "38c3ee00cdc48fa00012c543abbd7cf5975568233ce25dbbb7d4c422b7579b57", + jar_sha256 = "4e3cbd01f23414934ffe5ccfafa0b16d4009c3d497390fcf8711236f6055fda2", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-cluster/3.1.9/atomix-cluster-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-cluster/3.1.12/atomix-cluster-3.1.12.jar"], ) if "atomix_primary_backup" not in native.existing_rules(): java_import_external( name = "atomix_primary_backup", - jar_sha256 = "f87527364ac10e006b714f55ce1a6d92a1f27fa27e8813de82454665876838d6", + jar_sha256 = "afa5191c3a1ab79e007c208c9ef44f4b7c6e0904a1d7f576200d3cacd90c3f4b", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-primary-backup/3.1.9/atomix-primary-backup-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-primary-backup/3.1.12/atomix-primary-backup-3.1.12.jar"], ) if "atomix_primitive" not in native.existing_rules(): java_import_external( name = "atomix_primitive", - jar_sha256 = "12c7ff4e65ad683419906d86d320250ce4ea160fbb394b90a577116563cb81b4", + jar_sha256 = "a2a4002824db7b80308f8cedd83a5abe67ebdb9723b6c50fa99ab935c49c2641", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-primitive/3.1.9/atomix-primitive-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-primitive/3.1.12/atomix-primitive-3.1.12.jar"], ) if "atomix_raft" not in native.existing_rules(): java_import_external( name = "atomix_raft", - jar_sha256 = "69a3188bc34d5f5629b6321be04c10ca3064faecbb6d139015c1fd5bcaac713f", + jar_sha256 = "9583123d7cfc60edb786964087b92f568aafdf00be1b52d4e4737a6cf9d4ca31", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-raft/3.1.9/atomix-raft-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-raft/3.1.12/atomix-raft-3.1.12.jar"], ) if "atomix_storage" not in native.existing_rules(): java_import_external( name = "atomix_storage", - jar_sha256 = "a049ae8a671bcacea4cbc8db31e78aa8c4f0bca4b3871929e06644d70d33e857", + jar_sha256 = "d81895846ca70202f38a13c9627b8fc3674e363a3670f7f1221e5444188bbaf3", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-storage/3.1.9/atomix-storage-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-storage/3.1.12/atomix-storage-3.1.12.jar"], ) if "atomix_utils" not in native.existing_rules(): java_import_external( name = "atomix_utils", - jar_sha256 = "dba1d7b0fa900f39cee3160045e3cd624ffcaf18f9756fdadadb1c876ef331e0", + jar_sha256 = "8d8b177488bf7665e008e892b33a5fbde92d6233dc83cf350d51f6bc3f5344d8", licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-utils/3.1.9/atomix-utils-3.1.9.jar"], ) + jar_urls = ["https://repo1.maven.org/maven2/io/atomix/atomix-utils/3.1.12/atomix-utils-3.1.12.jar"], ) if "classgraph" not in native.existing_rules(): java_import_external( name = "classgraph", @@ -1346,13 +1346,13 @@ artifact_map = {} artifact_map["@aopalliance_repackaged//:aopalliance_repackaged"] = "mvn:org.glassfish.hk2.external:aopalliance-repackaged:jar:2.5.0-b42" artifact_map["@amqp_client//:amqp_client"] = "mvn:com.rabbitmq:amqp-client:jar:3.6.1" artifact_map["@asm//:asm"] = "mvn:org.ow2.asm:asm:jar:5.2" -artifact_map["@atomix//:atomix"] = "mvn:io.atomix:atomix:jar:3.1.9" -artifact_map["@atomix_cluster//:atomix_cluster"] = "mvn:io.atomix:atomix-cluster:jar:3.1.9" -artifact_map["@atomix_primary_backup//:atomix_primary_backup"] = "mvn:io.atomix:atomix-primary-backup:jar:3.1.9" -artifact_map["@atomix_primitive//:atomix_primitive"] = "mvn:io.atomix:atomix-primitive:jar:3.1.9" -artifact_map["@atomix_raft//:atomix_raft"] = "mvn:io.atomix:atomix-raft:jar:3.1.9" -artifact_map["@atomix_storage//:atomix_storage"] = "mvn:io.atomix:atomix-storage:jar:3.1.9" -artifact_map["@atomix_utils//:atomix_utils"] = "mvn:io.atomix:atomix-utils:jar:3.1.9" +artifact_map["@atomix//:atomix"] = "mvn:io.atomix:atomix:jar:3.1.12" +artifact_map["@atomix_cluster//:atomix_cluster"] = "mvn:io.atomix:atomix-cluster:jar:3.1.12" +artifact_map["@atomix_primary_backup//:atomix_primary_backup"] = "mvn:io.atomix:atomix-primary-backup:jar:3.1.12" +artifact_map["@atomix_primitive//:atomix_primitive"] = "mvn:io.atomix:atomix-primitive:jar:3.1.12" +artifact_map["@atomix_raft//:atomix_raft"] = "mvn:io.atomix:atomix-raft:jar:3.1.12" +artifact_map["@atomix_storage//:atomix_storage"] = "mvn:io.atomix:atomix-storage:jar:3.1.12" +artifact_map["@atomix_utils//:atomix_utils"] = "mvn:io.atomix:atomix-utils:jar:3.1.12" artifact_map["@classgraph//:classgraph"] = "mvn:io.github.classgraph:classgraph:jar:4.2.3" artifact_map["@commons_codec//:commons_codec"] = "mvn:commons-codec:commons-codec:jar:1.10" artifact_map["@commons_cli//:commons_cli"] = "mvn:commons-cli:commons-cli:jar:1.3" diff --git a/tools/dev/docker/Dockerfile-sshd b/tools/dev/docker/Dockerfile-sshd index 2229787751c..6f0c00c3c86 100644 --- a/tools/dev/docker/Dockerfile-sshd +++ b/tools/dev/docker/Dockerfile-sshd @@ -2,9 +2,9 @@ FROM ubuntu:18.04 LABEL maintainer="Eric Tang " ARG ATOMIX_VERSION -ENV ENV_ATOMIX_VERSION=${ATOMIX_VERSION:-3.1.9} +ENV ENV_ATOMIX_VERSION=${ATOMIX_VERSION:-3.1.12} -RUN apt-get update +RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get -y install \ --no-install-recommends \ openjdk-11-jre \ @@ -66,7 +66,7 @@ RUN set -eux; \ # Install Atomix RUN set -eux; \ -# curl -o /tmp/atomix.tar.gz -XGET https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.1.9/atomix-dist-3.1.9.tar.gz; \ +# curl -o /tmp/atomix.tar.gz -XGET https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.1.12/atomix-dist-3.1.12.tar.gz; \ curl -o /tmp/atomix.tar.gz https://repo1.maven.org/maven2/io/atomix/atomix-dist/$ENV_ATOMIX_VERSION/atomix-dist-$ENV_ATOMIX_VERSION.tar.gz; \ mkdir /opt/atomix; \ tar zxmf /tmp/atomix.tar.gz -C /opt/atomix; \ diff --git a/tools/test/bin/atomix-push-bits b/tools/test/bin/atomix-push-bits index d82321c64b5..5eb91917d39 100755 --- a/tools/test/bin/atomix-push-bits +++ b/tools/test/bin/atomix-push-bits @@ -26,7 +26,7 @@ set -e . $ONOS_ROOT/tools/build/envDefaults -ATOMIX_VERSION=${ATOMIX_VERSION:-3.1.9} +ATOMIX_VERSION=${ATOMIX_VERSION:-3.1.12} ATOMIX_MAVEN=~/.m2/repository/io/atomix/atomix-dist/$ATOMIX_VERSION/atomix-dist-$ATOMIX_VERSION.tar.gz ATOMIX_LOCAL=/tmp/atomix-$ATOMIX_VERSION.tar.gz ATOMIX_REMOTE=https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/$ATOMIX_VERSION/atomix-dist-$ATOMIX_VERSION.tar.gz diff --git a/tools/test/bin/atomix-service b/tools/test/bin/atomix-service index 5910a8ca9a1..8eb6a5ec9fa 100755 --- a/tools/test/bin/atomix-service +++ b/tools/test/bin/atomix-service @@ -40,11 +40,9 @@ else fi # Define the java options for atomix -# FIXME atomix-agent already provides a gc algorithm. Once we fix atomix-agent we can allow this -# JAVA_OPTS="${JAVA_OPTS:--XX:+UseG1GC -XX:MaxGCPauseMillis=200}" +JAVA_OPTS="${JAVA_OPTS:--XX:+UseG1GC -XX:MaxGCPauseMillis=200}" if [ ! -z "$ONOS_YOURKIT" ]; then - #JAVA_OPTS+=" -agentpath:$ATOMIX_INSTALL_DIR/libyjpagent.so=listen=all" - JAVA_OPTS="${JAVA_OPTS:--agentpath:$ATOMIX_INSTALL_DIR/libyjpagent.so=listen=all}" + JAVA_OPTS+=" -agentpath:$ATOMIX_INSTALL_DIR/libyjpagent.so=listen=all" fi case $2 in diff --git a/tools/test/scenarios/odtn/createOdtnCell.sh b/tools/test/scenarios/odtn/createOdtnCell.sh index 8e5f74dabc1..fcb81ba7c73 100755 --- a/tools/test/scenarios/odtn/createOdtnCell.sh +++ b/tools/test/scenarios/odtn/createOdtnCell.sh @@ -16,7 +16,7 @@ FULL_SSH_KEY=$(cat ~/.ssh/id_rsa.pub) echo "The public key in local host is: $SSH_KEY" # Create Atomix cluster using Atomix docker image -ATOMIX_IMAGE=atomix/atomix:3.1.9 +ATOMIX_IMAGE=atomix/atomix:3.1.12 for i in {1..3}; do echo "Setting up atomix-$i..." docker container run --detach --name atomix-$i --hostname atomix-$i \ From d7cae13c11bdc6c9d344d362ecb71ad99df67367 Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 3 Feb 2022 21:34:04 +0100 Subject: [PATCH 193/235] Add probeReachability API to the DeviceProvider The new API is meant for probing the reachability of a device and adds the ability to directly asses the result of the probe. Change-Id: I310eba11b943208b5d6776fd8ccbc679d55dfb41 --- .../net/device/DeviceProvider.java | 18 +++++++++++++ .../device/impl/GeneralDeviceProvider.java | 26 ++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java b/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java index 771a8e43227..8dfa730dc81 100644 --- a/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java +++ b/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java @@ -20,6 +20,8 @@ import org.onosproject.net.PortNumber; import org.onosproject.net.provider.Provider; +import java.util.concurrent.CompletableFuture; + /** * Abstraction of a device information provider. */ @@ -107,4 +109,20 @@ default void triggerDisconnect(DeviceId deviceId) { throw new UnsupportedOperationException(id() + " does not implement this feature"); } + /** + * Probe the reachability of the device from the provider perspective. + *

+ * Implementations are encouraged to provide an async implementation. + * With the respect of triggerProbe, this method returns whether or + * not was possible to send a message to the device from this instance. + * Instead, isReachable asses only the capability to send a message from + * this node but does not imply sending a message to the device. + * + * @param deviceId device identifier + * @return completable future eventually true if reachable, false otherwise + */ + default CompletableFuture probeReachability(DeviceId deviceId) { + return CompletableFuture.completedFuture(isReachable(deviceId)); + } + } diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index c91cfb24115..6ce32697840 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -421,6 +421,22 @@ public void triggerDisconnect(DeviceId deviceId) { submitTask(deviceId, TaskType.CONNECTION_TEARDOWN); } + @Override + public CompletableFuture probeReachability(DeviceId deviceId) { + final DeviceHandshaker handshaker = getBehaviour( + deviceId, DeviceHandshaker.class); + if (handshaker == null) { + return CompletableFuture.completedFuture(false); + } + return handshaker.probeReachability(); + } + + private boolean probeReachabilitySync(DeviceId deviceId) { + // Wait 3/4 of the checkup interval + return Tools.futureGetOrElse(probeReachability(deviceId), (checkupInterval * 3000 / 4), + TimeUnit.MILLISECONDS, Boolean.FALSE); + } + /** * Listener for configuration events. */ @@ -741,16 +757,12 @@ private void doCheckupAndRepair(DeviceId deviceId) { // If here, device should be registered in the core. assertDeviceRegistered(deviceId); - if (!handshaker.isReachable()) { + if (!handshaker.isReachable() || !probeReachabilitySync(deviceId)) { // Device appears to be offline. markOfflineIfNeeded(deviceId); - // While we expect the protocol layer to implement some sort of + // We expect the protocol layer to implement some sort of // connection backoff mechanism and to signal availability via - // CHANNEL_OPEN events, we stimulate some channel activity now. - // Trigger probe over the network and forget about it (not waiting - // for future to complete). If channel is ready, we expect to come - // back here via a CHANNEL_OPEN event. - handshaker.probeReachability(); + // CHANNEL_OPEN events. return; } From b2f636bffd2783266826503755ba5f42dfdb2b75 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 3 Jan 2022 17:19:24 +0100 Subject: [PATCH 194/235] [SDFAB-977][SDFAB-978] Implement persistent mastership logic in ONOS Design doc can be found here: https://docs.google.com/document/d/1UStD1hGCy5YQlFmaWfclq6uYROtMY56jWxUBwfUEsRM Additionally, introduce few more changes in the DeviceManager: - Always reassert the role if the instance has a valid role - Test reachability through isReachable and probeReachability Change-Id: I35183c04b65a98bc0332ed256be8333b53d6b68f --- .../net/device/impl/DeviceManager.java | 315 ++++++++++++------ .../net/device/impl/DeviceManagerTest.java | 5 + 2 files changed, 209 insertions(+), 111 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index e50fe37aec7..cd8ab967203 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -23,7 +23,9 @@ import org.onlab.util.KryoNamespace; import org.onlab.util.Tools; import org.onosproject.cluster.ClusterService; +import org.onosproject.cluster.ControllerNode; import org.onosproject.cluster.NodeId; +import org.onosproject.mastership.MastershipAdminService; import org.onosproject.mastership.MastershipEvent; import org.onosproject.mastership.MastershipListener; import org.onosproject.mastership.MastershipService; @@ -145,6 +147,9 @@ public class DeviceManager @Reference(cardinality = ReferenceCardinality.MANDATORY) protected MastershipService mastershipService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) + protected MastershipAdminService mastershipAdminService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) protected MastershipTermService termService; @@ -157,7 +162,7 @@ public class DeviceManager @Reference(cardinality = ReferenceCardinality.MANDATORY) protected ClusterCommunicationService communicationService; - private ExecutorService portRequestExecutor; + private ExecutorService clusterRequestExecutor; /** * List of all registered PortConfigOperator. */ @@ -177,6 +182,11 @@ public class DeviceManager private static final MessageSubject PORT_UPDOWN_SUBJECT = new MessageSubject("port-updown-req"); + private static final MessageSubject PROBE_SUBJECT = + new MessageSubject("probe-req"); + private static final long PROBE_TIMEOUT_MILLIS = 5000; + private static final int PROBE_ATTEMPTS = 3; + private static final Serializer SERIALIZER = Serializer.using( KryoNamespace.newBuilder() .register(KryoNamespaces.API) @@ -229,13 +239,20 @@ public void activate() { } }, 1, 1, TimeUnit.MINUTES); - portRequestExecutor = newSingleThreadExecutor(); + clusterRequestExecutor = newSingleThreadExecutor(); - communicationService.addSubscriber( + communicationService.addSubscriber( PORT_UPDOWN_SUBJECT, SERIALIZER::decode, this::handlePortRequest, - portRequestExecutor); + clusterRequestExecutor); + + communicationService.addSubscriber( + PROBE_SUBJECT, + SERIALIZER::decode, + this::handleProbeRequest, + SERIALIZER::encode, + clusterRequestExecutor); backgroundRoleChecker = newSingleThreadScheduledExecutor( groupedThreads("onos/device", "manager-role", log)); @@ -258,7 +275,7 @@ public void deactivate() { mastershipService.removeListener(mastershipListener); eventDispatcher.removeSink(DeviceEvent.class); communicationService.removeSubscriber(PORT_UPDOWN_SUBJECT); - portRequestExecutor.shutdown(); + clusterRequestExecutor.shutdown(); backgroundRoleChecker.shutdown(); log.info("Stopped"); } @@ -389,7 +406,7 @@ private boolean isReachable(DeviceId deviceId) { } DeviceProvider provider = getProvider(deviceId); if (provider != null) { - boolean reachable = provider.isReachable(deviceId); + boolean reachable = probeReachability(deviceId); if (reachable && !isLocallyConnected(deviceId)) { deviceLocalStatus.put(deviceId, new LocalStatus(true, Instant.now())); } else if (!reachable && isLocallyConnected(deviceId)) { @@ -498,42 +515,35 @@ private void mastershipCheck() { log.trace("Checking device {}. Current role is {}", deviceId, myRole); if (!isReachable(deviceId)) { if (myRole != NONE) { - // can't be master if device is not reachable + // Verify if the device is fully disconnected from the cluster + if (updateMastershipFor(deviceId) == null + && myRole == MASTER && isAvailable(deviceId)) { + log.info("Local Role {}, Marking unreachable device {} offline", MASTER, deviceId); + post(store.markOffline(deviceId)); + } + } else { + /* Firstly get a role and then check if the device is available in the store. + if it is, if this node is the master and the device is fully disconnected + from the cluster mark the device offline. In principle, this condition should + never be hit unless in a device removed phase for NONE mastership roles. */ try { - if (myRole == MASTER) { - log.info("Local Role {}, Marking unreachable device {} offline", MASTER, deviceId); - post(store.markOffline(deviceId)); - } - //relinquish master role and ability to be backup. - roleToAcknowledge.remove(deviceId); - mastershipService.relinquishMastership(deviceId).get(); + mastershipService.requestRoleFor(deviceId).get(); } catch (InterruptedException e) { - log.warn("Interrupted while relinquishing role for {}", deviceId); Thread.currentThread().interrupt(); + log.error("Interrupted waiting for Mastership", e); } catch (ExecutionException e) { - log.error("Exception thrown while relinquishing role for {}", deviceId, e); + log.error("Encountered an error waiting for Mastership", e); } - } else { - // check if the device has master and is available to the store, if not, mark it offline - // only the nodes which has mastership role can mark any device offline. - // This condition should never be hit unless in a device removed phase for NONE mastership roles. - NodeId master = mastershipService.getMasterFor(deviceId); - if (master == null && isAvailable(deviceId)) { - CompletableFuture roleFuture = mastershipService.requestRoleFor(deviceId); - roleFuture.thenAccept(role -> { - MastershipTerm term = termService.getMastershipTerm(deviceId); - if (term != null && localNodeId.equals(term.master())) { - log.info("Marking unreachable device {} offline", deviceId); - post(store.markOffline(deviceId)); - } else { - log.info("Failed marking {} offline. {}", deviceId, role); - } - // Stop the timer - just to prevent any race - roleToAcknowledge.remove(deviceId); - mastershipService.relinquishMastership(deviceId); - }); + + MastershipTerm term = termService.getMastershipTerm(deviceId); + if (updateMastershipFor(deviceId) == null && + term != null && localNodeId.equals(term.master()) && + isAvailable(deviceId)) { + log.info("Marking unreachable device {} offline", deviceId); + post(store.markOffline(deviceId)); } } + roleToAcknowledge.remove(deviceId); continue; } @@ -542,15 +552,11 @@ private void mastershipCheck() { post(store.markOnline(deviceId)); } - if (myRole != NONE) { - continue; - } - - log.info("{} is reachable but did not have a valid role, reasserting", deviceId); + log.info("{} is reachable - reasserting the role", deviceId); - // isReachable but was not MASTER or STANDBY, get a role and apply - // Note: NONE triggers request to MastershipService - reassertRole(deviceId, NONE); + /* Device is still reachable. It is useful for some protocols + to reassert the role. Note: NONE triggers request to MastershipService */ + reassertRole(deviceId, myRole); } } @@ -592,14 +598,7 @@ private void roleCheck() { Yield mastership to other instance*/ log.warn("Failed to assert role onto device {}. requested={}, no response", deviceId, myRole); - mastershipService.relinquishMastership(deviceId).whenComplete((result, error) -> { - if (error != null) { - log.error("Exception while relinquishing mastership", error); - } else { - log.info("Successfully relinquished mastership for {}. Requesting new role", deviceId); - mastershipService.requestRoleFor(deviceId); - } - }); + updateMastershipFor(deviceId); } } @@ -700,55 +699,55 @@ private PortDescription ensurePortEnabledState(PortDescription desc, boolean ena public void deviceDisconnected(DeviceId deviceId) { checkNotNull(deviceId, DEVICE_ID_NULL); checkValidity(); + // Update the local status deviceLocalStatus.put(deviceId, new LocalStatus(false, Instant.now())); log.info("Device {} disconnected from this node: {}", deviceId, clusterService.getLocalNode().id()); - List descs = store.getPortDescriptions(provider().id(), deviceId) - .map(desc -> ensurePortEnabledState(desc, false)) - .collect(Collectors.toList()); + /* If none can reach the device, we will continue with the disconnection logic. + If there is one instance that reported device is still reachable, we hand over + the mastership to it if we are the current master, otherwise if we are a backup + we demote ourselves to the bottom of the backups list */ + if (updateMastershipFor(deviceId) == null) { + log.info("Device {} is fully disconnected from the cluster", deviceId); + List descs = store.getPortDescriptions(provider().id(), deviceId) + .map(desc -> ensurePortEnabledState(desc, false)) + .collect(Collectors.toList()); + store.updatePorts(this.provider().id(), deviceId, descs); - store.updatePorts(this.provider().id(), deviceId, descs); - try { - if (mastershipService.isLocalMaster(deviceId)) { - post(store.markOffline(deviceId)); - } - } catch (IllegalStateException e) { - log.warn("Failed to mark {} offline", deviceId); - // only the MASTER should be marking off-line in normal cases, - // but if I was the last STANDBY connection, etc. and no one else - // was there to mark the device offline, this instance may need to - // temporarily request for Master Role and mark offline. - - //there are times when this node will correctly have mastership, BUT - //that isn't reflected in the ClockManager before the device disconnects. - //we want to let go of the device anyways, so make sure this happens. - - // FIXME: Store semantics leaking out as IllegalStateException. - // Consider revising store API to handle this scenario. - CompletableFuture roleFuture = mastershipService.requestRoleFor(deviceId); - roleFuture.whenComplete((role, error) -> { - MastershipTerm term = termService.getMastershipTerm(deviceId); - // TODO: Move this type of check inside device clock manager, etc. - if (term != null && localNodeId.equals(term.master())) { - log.info("Retry marking {} offline", deviceId); + try { + if (mastershipService.isLocalMaster(deviceId)) { post(store.markOffline(deviceId)); - } else { - log.info("Failed again marking {} offline. {}", deviceId, role); } - }); - } finally { - try { - //relinquish master role and ability to be backup. + } catch (IllegalStateException e) { + log.warn("Failed to mark {} offline", deviceId); + // only the MASTER should be marking off-line in normal cases, + // but if I was the last STANDBY connection, etc. and no one else + // was there to mark the device offline, this instance may need to + // temporarily request for Master Role and mark offline. + + //there are times when this node will correctly have mastership, BUT + //that isn't reflected in the ClockManager before the device disconnects. + //we want to let go of the device anyways, so make sure this happens. + + // FIXME: Store semantics leaking out as IllegalStateException. + // Consider revising store API to handle this scenario. + CompletableFuture roleFuture = mastershipService.requestRoleFor(deviceId); + roleFuture.whenComplete((role, error) -> { + MastershipTerm term = termService.getMastershipTerm(deviceId); + // TODO: Move this type of check inside device clock manager, etc. + if (term != null && localNodeId.equals(term.master())) { + log.info("Retry marking {} offline", deviceId); + post(store.markOffline(deviceId)); + } else { + log.info("Failed again marking {} offline. {}", deviceId, role); + } + }); + } finally { roleToAcknowledge.remove(deviceId); - mastershipService.relinquishMastership(deviceId).get(); - } catch (InterruptedException e) { - log.warn("Interrupted while reliquishing role for {}", deviceId); - Thread.currentThread().interrupt(); - } catch (ExecutionException e) { - log.error("Exception thrown while relinquishing role for {}", deviceId, e); } } + } @Override @@ -875,7 +874,7 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, // something was off with DeviceProvider, maybe check channel too? log.warn("Failed to assert role onto Device {}", deviceId); roleToAcknowledge.remove(deviceId); - mastershipService.relinquishMastership(deviceId); + updateMastershipFor(deviceId); return; } @@ -901,7 +900,6 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, // roleManager got the device to comply, but doesn't agree with // the store; use the store's view, then try to reassert. backgroundService.execute(() -> reassertRole(deviceId, expected)); - return; } } else { // we didn't get back what we asked for. Reelect someone else. @@ -910,17 +908,13 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, if (requested == MastershipRole.MASTER) { // Stop the timer roleToAcknowledge.remove(deviceId); - mastershipService.relinquishMastership(deviceId); - // TODO: Shouldn't we be triggering event? - //final Device device = getDevice(deviceId); - //post(new DeviceEvent(DEVICE_MASTERSHIP_CHANGED, device)); + updateMastershipFor(deviceId); } else if (requested == MastershipRole.STANDBY) { // For P4RT devices, the response role will be NONE when this node is expected to be STANDBY // but the stream channel is not opened correctly. // Calling reassertRole will trigger the mechanism in GeneralDeviceProvider that // attempts to re-establish the stream channel backgroundService.execute(() -> reassertRole(deviceId, expected)); - return; } } } @@ -991,6 +985,16 @@ private boolean applyRoleAndProbe(DeviceId deviceId, MastershipRole newRole) { return true; } + private boolean probeReachability(DeviceId deviceId) { + DeviceProvider provider = getProvider(deviceId); + if (provider == null) { + log.warn("Provider for {} was not found. Cannot probe reachability", deviceId); + return false; + } + return provider.isReachable(deviceId) && Tools.futureGetOrElse(provider.probeReachability(deviceId), + PROBE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS, Boolean.FALSE); + } + /** * Reassert role for specified device connected to this node. * @@ -1030,7 +1034,7 @@ private void reassertRole(final DeviceId did, if (!applyRoleAndProbe(did, MASTER)) { log.warn("Unsuccessful applying role {} to {}", myNextRole, did); // immediately failed to apply role - mastershipService.relinquishMastership(did); + updateMastershipFor(did); // FIXME disconnect? } break; @@ -1039,7 +1043,7 @@ private void reassertRole(final DeviceId did, if (!applyRoleAndProbe(did, STANDBY)) { log.warn("Unsuccessful applying role {} to {}", myNextRole, did); // immediately failed to apply role - mastershipService.relinquishMastership(did); + updateMastershipFor(did); // FIXME disconnect? } break; @@ -1053,13 +1057,9 @@ private void reassertRole(final DeviceId did, } private void handleMastershipEvent(MastershipEvent event) { - if (event.type() == MastershipEvent.Type.BACKUPS_CHANGED) { - // Don't care if backup list changed. - return; - } final DeviceId did = event.subject(); - // myRole suggested by MastershipService + // myNextRole suggested by MastershipService event MastershipRole myNextRole; if (event.type() == MastershipEvent.Type.SUSPENDED) { myNextRole = NONE; // FIXME STANDBY OR NONE? @@ -1080,24 +1080,40 @@ private void handleMastershipEvent(MastershipEvent event) { final boolean isReachable = isReachable(did); if (!isReachable) { - // device is not connected to this node + // device is not connected to this node, nevertheless we should get a role if (mastershipService.getLocalRole(did) == NONE) { log.debug("Node was instructed to be {} role for {}, " + "but this node cannot reach the device " - + "and role is already None. Ignoring request.", + + "and role is already None. Asking a new role " + + "and then apply the disconnection protocol.", myNextRole, did); + try { + mastershipService.requestRoleFor(did).get(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("Interrupted waiting for Mastership", e); + } catch (ExecutionException e) { + log.error("Encountered an error waiting for Mastership", e); + } } else if (myNextRole != NONE) { log.warn("Node was instructed to be {} role for {}, " - + "but this node cannot reach the device. " - + "Relinquishing role. ", + + "but this node cannot reach the device. " + + "Apply the disconnection protocol.", myNextRole, did); - roleToAcknowledge.remove(did); - mastershipService.relinquishMastership(did); } + // Let's put some order in the candidates list + roleToAcknowledge.remove(did); + updateMastershipFor(did); return; } - // device is connected to this node: + /* Device is connected to this node - always reassert the role. + Ideally, protocols like OpenFlow would not need to reassert the + role because the instances are only identified by the role. However, + other protocols like P4RT require to provide also an election id + which maybe different over time, by reasserting the role will guarantee + that updated election ids are communicated to the devices. It should not + cost us a lot as it is equivalent to a probe.*/ if (store.getDevice(did) != null) { reassertRole(did, myNextRole); } else { @@ -1374,6 +1390,83 @@ private PortDescription applyAllPortOps(ConnectPoint cpt, PortDescription desc, return portAnnotationOp.combine(cpt, work, prevConfig); } + /** + * Handler for remote probe requests. + * + * @param deviceId the device to check + * @return whether or not the device is reachable + */ + private boolean handleProbeRequest(DeviceId deviceId) { + int attempt = 0; + // Let's do a number of attempts + while (attempt < PROBE_ATTEMPTS) { + if (!probeReachability(deviceId)) { + return false; + } + attempt++; + } + return true; + } + + /** + * Update the mastership for this device. If there is a node able + * to reach the device and this node is the master move the + * mastership to the next node still connected to this device. + * If the current node is a backup, it demotes itself to the bottom + * of the candidates list + * + * @param deviceId the device for which we have to update the mastership + * @return the NodeId of any node that can reach the device, or null if + * none of the ONOS instances can reach the device + */ + private NodeId updateMastershipFor(DeviceId deviceId) { + Map> probes = Maps.newHashMap(); + // Request a probe only if the node is ready + for (ControllerNode onosNode : clusterService.getNodes()) { + if (!clusterService.getState(onosNode.id()).isReady() || localNodeId.equals(onosNode.id())) { + continue; + } + probes.put(onosNode.id(), communicationService.sendAndReceive(deviceId, PROBE_SUBJECT, SERIALIZER::encode, + SERIALIZER::decode, onosNode.id())); + } + + // Returns the first node able to reach the device + // FIXME [SDFAB-935] optimize by looking at the MastershipInfo + boolean isReachable; + NodeId nextMaster = null; + // FIXME Should we expose timeout? Understand if there is need to signal to the caller + for (Map.Entry> probe : probes.entrySet()) { + isReachable = Tools.futureGetOrElse(probe.getValue(), PROBE_TIMEOUT_MILLIS, + TimeUnit.MILLISECONDS, Boolean.FALSE); + if (isReachable) { + nextMaster = probe.getKey(); + } + } + + // FIXME [SDFAB-935] optimize demote by looking at the MastershipInfo; + if (nextMaster != null) { + log.info("Device {} is still connected to {}", deviceId, nextMaster); + MastershipRole myRole = mastershipService.getLocalRole(deviceId); + if (myRole == MASTER) { + log.info("Handing over the mastership of {} to next master {}", deviceId, nextMaster); + mastershipAdminService.setRole(nextMaster, deviceId, MASTER); + /* Do not demote here because setRole can return before the mastership has been passed. + Current implementation promotes first the nextMaster as top of candidate list and then + transfer the leadership. We can use the BACKUP events to do demote or leverage periodic + checks.*/ + } else if (myRole == STANDBY) { + log.info("Demote current instance to the bottom of the candidates list for {}", deviceId); + mastershipAdminService.demote(localNodeId, deviceId); + } else { + log.debug("No valid role for {}", deviceId); + } + } + + return nextMaster; + } + + + /** * Port Enable/Disable message sent to the device's MASTER node. */ diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java index 3e1e4d1e8fa..c2339f3cc4d 100644 --- a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java @@ -361,6 +361,11 @@ public ControllerNode getLocalNode() { return local; } + @Override + public ControllerNode.State getState(NodeId nodeId) { + return ControllerNode.State.READY; + } + } private class TestNetworkConfigService extends NetworkConfigServiceAdapter { From d510b7db8aeafbb52b00982dacb1f1079b0cc4b2 Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 3 Feb 2022 21:56:37 +0100 Subject: [PATCH 195/235] [SDFAB-935] Optimize and improve the p. mastership This patch is the part 1 and contains the following: - Make the GDP greedy by reasserting immediately the role Change-Id: I7259d4ace4a3e58ae2d97b6e53a393c41d5c0df9 --- .../net/device/impl/DeviceManager.java | 2 ++ .../device/impl/GeneralDeviceProvider.java | 24 +++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index cd8ab967203..a85ee8f5b85 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -513,6 +513,7 @@ private void mastershipCheck() { final DeviceId deviceId = device.id(); MastershipRole myRole = mastershipService.getLocalRole(deviceId); log.trace("Checking device {}. Current role is {}", deviceId, myRole); + log.info("Device local status is {}", localStatus(deviceId)); if (!isReachable(deviceId)) { if (myRole != NONE) { // Verify if the device is fully disconnected from the cluster @@ -1079,6 +1080,7 @@ private void handleMastershipEvent(MastershipEvent event) { } final boolean isReachable = isReachable(did); + log.info("Device local status is {}", localStatus(did)); if (!isReachable) { // device is not connected to this node, nevertheless we should get a role if (mastershipService.getLocalRole(did) == NONE) { diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index 6ce32697840..4c3018a1b73 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -797,14 +797,24 @@ private void doCheckupAndRepair(DeviceId deviceId) { } final MastershipRole deviceRole = handshaker.getRole(); + // FIXME: we should be checking the mastership term as well. if (expectedRole != deviceRole) { - // FIXME: we should be checking the mastership term as well. - log.debug("Detected role mismatch for {}, core expects {}, " + - "but device reports {}, waiting for mastership " + - "service to fix this...", - deviceId, expectedRole, deviceRole); - // Gentle nudge to fix things... - providerService.receivedRoleReply(deviceId, deviceRole); + // Let's be greedy, if the role is NONE likely is due to the lazy channel + if (deviceRole == MastershipRole.NONE) { + log.warn("Detected role mismatch for {}, core expects {}, " + + "but device reports {}, reassert the role... ", + deviceId, expectedRole, deviceRole); + /* If we are experience a severe issue, eventually + the DeviceManager will move the mastership */ + roleChanged(deviceId, expectedRole); + } else { + log.debug("Detected role mismatch for {}, core expects {}, " + + "but device reports {}, waiting for mastership " + + "service to fix this...", + deviceId, expectedRole, deviceRole); + // Gentle nudge to fix things... + providerService.receivedRoleReply(deviceId, deviceRole); + } return; } From 782e154be0edcb018cdb64e1a55219d5081a095b Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Tue, 15 Feb 2022 12:23:20 +0100 Subject: [PATCH 196/235] curl in onos-cfg wants uppercase post as parameter Change-Id: Ief206ef3029baff98d1c91255044baf2d3543644 --- tools/package/runtime/bin/onos-cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/package/runtime/bin/onos-cfg b/tools/package/runtime/bin/onos-cfg index abb3be60170..ad86718b57e 100755 --- a/tools/package/runtime/bin/onos-cfg +++ b/tools/package/runtime/bin/onos-cfg @@ -48,7 +48,7 @@ case $cmd in ${curl} -X GET ${URL} && echo;; post|delete) checkJson "$file" - $curl -X $cmd -H 'Content-Type:application/json' ${URL} -d@$file && echo;; + $curl -X $(echo ${cmd} | tr '[:lower:]' '[:upper:]') -H 'Content-Type:application/json' ${URL} -d@$file && echo;; *) usage && exit 1;; esac From f497d134c87b4eb24e4efb2f964e97bf29abf92d Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 15 Feb 2022 12:25:27 +0100 Subject: [PATCH 197/235] [SDFAB-1048] Fix wiring issue caused by readPortId Leverage the dep already in place between gnmi driver and gnmi protocol and expose readPortId as cfg property of GnmiControllerImpl Change-Id: I34defd8928589129dc84cae45033f7f7c3c673bb --- drivers/gnmi/BUILD | 1 + ...nConfigGnmiDeviceDescriptionDiscovery.java | 24 +++++-- .../gnmi/ctl/GnmiControllerImpl.java | 62 ++++++++++++++++++- .../gnmi/ctl/OsgiPropertyConstants.java | 29 +++++++++ providers/general/device/BUILD | 1 - .../device/impl/GeneralDeviceProvider.java | 22 +------ .../device/impl/OsgiPropertyConstants.java | 3 - 7 files changed, 112 insertions(+), 30 deletions(-) create mode 100644 protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/OsgiPropertyConstants.java diff --git a/drivers/gnmi/BUILD b/drivers/gnmi/BUILD index 772ae885b85..e3535cc05af 100644 --- a/drivers/gnmi/BUILD +++ b/drivers/gnmi/BUILD @@ -6,6 +6,7 @@ COMPILE_DEPS = CORE_DEPS + KRYO + [ "//core/store/serializers:onos-core-serializers", "//protocols/gnmi/stub:onos-protocols-gnmi-stub", "//protocols/gnmi/api:onos-protocols-gnmi-api", + "//protocols/gnmi/ctl:onos-protocols-gnmi-ctl", "//protocols/grpc/api:onos-protocols-grpc-api", "//protocols/grpc/utils:onos-protocols-grpc-utils", ] diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java index 6ae4c331e84..81c59b4e0fd 100644 --- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java +++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java @@ -25,6 +25,7 @@ import org.onlab.packet.ChassisId; import org.onosproject.gnmi.api.GnmiClient; import org.onosproject.gnmi.api.GnmiController; +import org.onosproject.gnmi.ctl.GnmiControllerImpl; import org.onosproject.grpc.utils.AbstractGrpcHandlerBehaviour; import org.onosproject.net.AnnotationKeys; import org.onosproject.net.DefaultAnnotations; @@ -62,14 +63,22 @@ public class OpenConfigGnmiDeviceDescriptionDiscovery private static final String UNKNOWN = "unknown"; - // FIXME temporary solution will be removed when the - // transition to p4rt translation is completed - public static boolean readPortId = false; + private GnmiController gnmiController; public OpenConfigGnmiDeviceDescriptionDiscovery() { super(GnmiController.class); } + @Override + protected boolean setupBehaviour(String opName) { + if (!super.setupBehaviour(opName)) { + return false; + } + + gnmiController = handler().get(GnmiController.class); + return true; + } + @Override public DeviceDescription discoverDeviceDetails() { return new DefaultDeviceDescription( @@ -125,7 +134,7 @@ public List discoverPortDetails() { } /* Override port number if read port-id is enabled and /interfaces/interface/state/id is available */ - if (readPortId && portIds.containsKey(key)) { + if (readPortId() && portIds.containsKey(key)) { value.withPortNumber(portIds.get(key)); } DefaultAnnotations annotation = annotations.get(key).build(); @@ -135,6 +144,13 @@ public List discoverPortDetails() { return portDescriptionList; } + private boolean readPortId() { + // FIXME temporary solution will be substituted by + // an XML driver property when the transition to + // p4rt translation is completed + return ((GnmiControllerImpl) gnmiController).readPortId(); + } + private GetRequest buildPortStateRequest() { Path path = Path.newBuilder() .addElem(PathElem.newBuilder().setName("interfaces").build()) diff --git a/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/GnmiControllerImpl.java b/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/GnmiControllerImpl.java index 42d31db9e15..448ea810939 100644 --- a/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/GnmiControllerImpl.java +++ b/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/GnmiControllerImpl.java @@ -17,30 +17,90 @@ package org.onosproject.gnmi.ctl; import io.grpc.ManagedChannel; +import org.onlab.util.Tools; +import org.onosproject.cfg.ComponentConfigService; import org.onosproject.gnmi.api.GnmiClient; import org.onosproject.gnmi.api.GnmiController; import org.onosproject.gnmi.api.GnmiEvent; import org.onosproject.gnmi.api.GnmiEventListener; import org.onosproject.grpc.ctl.AbstractGrpcClientController; import org.onosproject.net.DeviceId; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Modified; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferenceCardinality; +import org.slf4j.Logger; + +import java.util.Dictionary; + +import static org.onosproject.gnmi.ctl.OsgiPropertyConstants.READ_PORT_ID; +import static org.onosproject.gnmi.ctl.OsgiPropertyConstants.READ_PORT_ID_DEFAULT; +import static org.slf4j.LoggerFactory.getLogger; /** * Implementation of gNMI controller. */ -@Component(immediate = true, service = GnmiController.class) +@Component(immediate = true, + service = GnmiController.class, + property = { + READ_PORT_ID + ":Boolean=" + READ_PORT_ID_DEFAULT, + }) public class GnmiControllerImpl extends AbstractGrpcClientController implements GnmiController { + private final Logger log = getLogger(getClass()); + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private ComponentConfigService componentConfigService; + + /** + * Configure read port-id for gnmi drivers; default is false. + */ + private boolean readPortId = READ_PORT_ID_DEFAULT; + public GnmiControllerImpl() { super(GnmiEvent.class, "gNMI"); } + @Activate + public void activate(ComponentContext context) { + super.activate(); + componentConfigService.registerProperties(getClass()); + modified(context); + } + + @Modified + public void modified(ComponentContext context) { + if (context == null) { + return; + } + + Dictionary properties = context.getProperties(); + String strReadPortId = Tools.get(properties, READ_PORT_ID); + // FIXME temporary solution will be substituted by + // an XML driver property when the transition to + // p4rt translation is completed + readPortId = Boolean.parseBoolean(strReadPortId); + log.info("Configured. {} is configured to {}", + READ_PORT_ID, readPortId); + } + @Override protected GnmiClient createClientInstance( DeviceId deviceId, ManagedChannel channel) { return new GnmiClientImpl(deviceId, channel, this); } + + /** + * Returns whether or not readPortId is enabled. + * + * @return true if readPortId is enabled, false otherwise. + */ + public boolean readPortId() { + return readPortId; + } } diff --git a/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/OsgiPropertyConstants.java b/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/OsgiPropertyConstants.java new file mode 100644 index 00000000000..8751ad5b6c9 --- /dev/null +++ b/protocols/gnmi/ctl/src/main/java/org/onosproject/gnmi/ctl/OsgiPropertyConstants.java @@ -0,0 +1,29 @@ +/* + * Copyright 2022-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.gnmi.ctl; + +/** + * Constants for default values of configurable properties. + */ +public final class OsgiPropertyConstants { + + private OsgiPropertyConstants() {} + + public static final String READ_PORT_ID = "readPortId"; + public static final boolean READ_PORT_ID_DEFAULT = false; + +} diff --git a/providers/general/device/BUILD b/providers/general/device/BUILD index 6e1d53ea08f..511201a838e 100644 --- a/providers/general/device/BUILD +++ b/providers/general/device/BUILD @@ -3,7 +3,6 @@ COMPILE_DEPS = CORE_DEPS + JACKSON + [ "//protocols/gnmi/api:onos-protocols-gnmi-api", "//deps:com_google_protobuf_protobuf_java", "//protocols/grpc/api:onos-protocols-grpc-api", - "//drivers/gnmi:onos-drivers-gnmi", ] osgi_jar_with_tests( diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index 4c3018a1b73..ac0fda7c8af 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -27,7 +27,6 @@ import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; import org.onosproject.core.CoreService; -import org.onosproject.drivers.gnmi.OpenConfigGnmiDeviceDescriptionDiscovery; import org.onosproject.gnmi.api.GnmiController; import org.onosproject.mastership.MastershipInfo; import org.onosproject.mastership.MastershipService; @@ -98,8 +97,6 @@ import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.CHECKUP_INTERVAL; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.CHECKUP_INTERVAL_DEFAULT; -import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.READ_PORT_ID; -import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.READ_PORT_ID_DEFAULT; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.STATS_POLL_INTERVAL; import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.STATS_POLL_INTERVAL_DEFAULT; import static org.slf4j.LoggerFactory.getLogger; @@ -113,8 +110,7 @@ @Component(immediate = true, property = { CHECKUP_INTERVAL + ":Integer=" + CHECKUP_INTERVAL_DEFAULT, - STATS_POLL_INTERVAL + ":Integer=" + STATS_POLL_INTERVAL_DEFAULT, - READ_PORT_ID + ":Boolean=" + READ_PORT_ID_DEFAULT, + STATS_POLL_INTERVAL + ":Integer=" + STATS_POLL_INTERVAL_DEFAULT }) public class GeneralDeviceProvider extends AbstractProvider implements DeviceProvider { @@ -178,11 +174,6 @@ public class GeneralDeviceProvider extends AbstractProvider */ private int statsPollInterval = STATS_POLL_INTERVAL_DEFAULT; - /** - * Configure read port-id for gnmi drivers; default is false. - */ - private boolean readPortId = READ_PORT_ID_DEFAULT; - private final Map handshakersWithListeners = Maps.newConcurrentMap(); private final Map lastCheckups = Maps.newConcurrentMap(); private final InternalPipeconfWatchdogListener pipeconfWatchdogListener = new InternalPipeconfWatchdogListener(); @@ -242,11 +233,6 @@ public void modified(ComponentContext context) { properties, STATS_POLL_INTERVAL, STATS_POLL_INTERVAL_DEFAULT); log.info("Configured. {} is configured to {} seconds", STATS_POLL_INTERVAL, statsPollInterval); - final boolean oldReaPortId = readPortId; - String strReadPortId = Tools.get(properties, READ_PORT_ID); - readPortId = Boolean.parseBoolean(strReadPortId); - log.info("Configured. {} is configured to {}", - READ_PORT_ID, readPortId); if (oldCheckupInterval != checkupInterval) { startOrReschedulePeriodicCheckupTasks(); @@ -255,12 +241,6 @@ public void modified(ComponentContext context) { if (oldStatsPollFrequency != statsPollInterval) { statsPoller.reschedule(statsPollInterval); } - - if (oldReaPortId != readPortId) { - // FIXME temporary solution will be removed when the - // transition to p4rt translation is completed - OpenConfigGnmiDeviceDescriptionDiscovery.readPortId = readPortId; - } } @Deactivate diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java index ce18b0f3751..f2f2d08fc82 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java @@ -29,7 +29,4 @@ private OsgiPropertyConstants() {} public static final String CHECKUP_INTERVAL = "checkupInterval"; public static final int CHECKUP_INTERVAL_DEFAULT = 10; - public static final String READ_PORT_ID = "readPortId"; - public static final boolean READ_PORT_ID_DEFAULT = false; - } From 25c627864175b2eaa432682d92f53914fcf53d5e Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 24 Feb 2022 12:16:33 -0800 Subject: [PATCH 198/235] Relax meters translation checks Change-Id: I1dd3d2c9642ebff28d68425a7bcbc01c4d6a15f5 --- .../net/pi/impl/PiMeterTranslatorImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java index 48cd4baecea..3a243959279 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiMeterTranslatorImpl.java @@ -68,12 +68,13 @@ static PiMeterCellConfig translate(Meter meter, PiPipeconf pipeconf, Device devi throw new PiTranslationException("PI TCM meter must have a MARK_YELLOW band and a MARK_RED band!"); } - // Validate proper config of the trTCM settings - if (bands[0].burst() <= 0 || bands[1].burst() <= 0) { - throw new PiTranslationException("PI trTCM meter can not have band with burst <= 0!"); + // Validate proper config. NOTE that we have relaxed some checks + // and the ONOS meters are not spec compliants with trTCM RFC + if (bands[0].burst() < 0 || bands[1].burst() < 0) { + throw new PiTranslationException("PI trTCM meter can not have band with burst < 0!"); } - if (bands[0].rate() <= 0 || bands[1].rate() <= 0) { - throw new PiTranslationException("PI trTCM meter can not have band with rate <= 0!"); + if (bands[0].rate() < 0 || bands[1].rate() < 0) { + throw new PiTranslationException("PI trTCM meter can not have band with rate < 0!"); } long cir, cburst, pir, pburst; From 9c4c58f1103d50b4a5182ce3fb1db54301a03492 Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 25 Jan 2022 12:46:39 +0100 Subject: [PATCH 199/235] [SDFAB-954] Non-leader instance can mark UNKNOWN the pipeline. The probe task is not performed in atomic way and between the initial mastership check and the actual probe the execution can be blocked many times and the mastership can change. Recheck the mastership after pipeline probe returns. We are seeing an issue when a network partition occurs: watchdog is stuck for 60s before returning and will mark the device offline. However, in the meanwhile the mastership has been passed to another instance which is already connected and has already marked the device online. An harmless side effect of this change is that when we return from the pipeline config we might be no longer the master and this will delay in the worst case the markonline of the device for 15s (next reconcile interval) Additionally, this patch simplifies the Manager by removing the executor lock and by using only one worker per device. This change prevents also the exhaustion of all workers than can easily happen if there is a network partition that prevents the probe to return immediately. Change-Id: I3429cd0598c95589e50f35139f6087f83ceb60f2 --- .../pi/impl/PiPipeconfWatchdogManager.java | 112 +++++++++--------- 1 file changed, 55 insertions(+), 57 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java index be4b3296a89..3c85802be92 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java @@ -18,8 +18,8 @@ import com.google.common.collect.Maps; import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.Striped; import org.onlab.util.KryoNamespace; +import org.onlab.util.PredictableExecutor; import org.onlab.util.Tools; import org.onosproject.cfg.ComponentConfigService; import org.onosproject.event.AbstractListenerManager; @@ -64,12 +64,9 @@ import java.util.Dictionary; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; import static java.util.Collections.singleton; import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; @@ -119,8 +116,10 @@ public class PiPipeconfWatchdogManager */ private int probeInterval = PWM_PROBE_INTERVAL_DEFAULT; - protected ExecutorService executor = Executors.newFixedThreadPool( - 30, groupedThreads("onos/pipeconf-watchdog", "%d", log)); + // Setting to 0 will leverage available processors + private static final int DEFAULT_THREADS = 0; + protected PredictableExecutor watchdogWorkers = new PredictableExecutor(DEFAULT_THREADS, + groupedThreads("onos/pipeconf-watchdog", "%d", log)); private final DeviceListener deviceListener = new InternalDeviceListener(); private final PiPipeconfListener pipeconfListener = new InternalPipeconfListener(); @@ -129,8 +128,6 @@ public class PiPipeconfWatchdogManager groupedThreads("onos/pipeconf-event", "%d", log)); private ScheduledFuture poller = null; - private final Striped locks = Striped.lock(30); - private EventuallyConsistentMap statusMap; private Map localStatusMap; @@ -197,7 +194,7 @@ public void deactivate() { deviceService.removeListener(deviceListener); stopProbeTask(); eventExecutor.shutdown(); - executor.shutdown(); + watchdogWorkers.shutdown(); statusMap = null; localStatusMap = null; log.info("Stopped"); @@ -222,40 +219,55 @@ private void triggerCheckAllDevices() { } private void filterAndTriggerTasks(Iterable devices) { - devices.forEach(device -> { - if (!isLocalMaster(device)) { - return; - } + devices.forEach(device -> watchdogWorkers.execute(() -> probeTask(device), device.id().hashCode())); + } - final PiPipeconfId pipeconfId = pipeconfMappingStore.getPipeconfId(device.id()); - if (pipeconfId == null || !device.is(PiPipelineProgrammable.class)) { - return; - } + private void probeTask(Device device) { + if (!isLocalMaster(device)) { + return; + } - if (!pipeconfService.getPipeconf(pipeconfId).isPresent()) { - log.warn("Pipeconf {} is not registered, skipping probe for {}", - pipeconfId, device.id()); - return; - } + final PiPipeconfId pipeconfId = pipeconfMappingStore.getPipeconfId(device.id()); + if (pipeconfId == null || !device.is(PiPipelineProgrammable.class)) { + return; + } - final PiPipeconf pipeconf = pipeconfService.getPipeconf(pipeconfId).get(); + if (pipeconfService.getPipeconf(pipeconfId).isEmpty()) { + log.warn("Pipeconf {} is not registered, skipping probe for {}", + pipeconfId, device.id()); + return; + } - if (!device.is(DeviceHandshaker.class)) { - log.error("Missing DeviceHandshaker behavior for {}", device.id()); - return; - } + final PiPipeconf pipeconf = pipeconfService.getPipeconf(pipeconfId).get(); - // Trigger task with per-device lock. - executor.execute(withLock(() -> { - final boolean success = doSetPipeconfIfRequired(device, pipeconf); - if (success) { - signalStatusReady(device.id()); - signalStatusConfigured(device.id()); - } else { - signalStatusUnknown(device.id()); - } - }, device.id())); - }); + if (!device.is(DeviceHandshaker.class)) { + log.error("Missing DeviceHandshaker behavior for {}", device.id()); + return; + } + + final boolean success = doSetPipeconfIfRequired(device, pipeconf); + // The probe task is not performed in atomic way and between the + // initial mastership check and the actual probe the execution + // can be blocked many times and the mastership can change. Recheck + // the mastership after pipeline probe returns. + if (isLocalMaster(device)) { + // An harmless side effect of the check above is that when we return + // from the set pipeline config we might be no longer the master and this + // will delay in the worst case the mark online of the device for 15s + // (next reconcile interval) + if (success) { + signalStatusReady(device.id()); + signalStatusConfigured(device.id()); + } else { + // When a network partition occurs watchdog is stuck for LONG_TIMEOUT + // before returning and will mark the device offline. However, in the + // meanwhile the mastership has been passed to another instance which is + // already connected and has already marked the device online. + signalStatusUnknown(device.id()); + } + } else { + log.warn("No longer the master for {} aborting probe task", device.id()); + } } /** @@ -284,18 +296,6 @@ private boolean doSetPipeconfIfRequired(Device device, PiPipeconf pipeconf) { return Futures.getUnchecked(pipelineProg.setPipeconf(pipeconf)); } - private Runnable withLock(Runnable task, Object object) { - return () -> { - final Lock lock = locks.get(object); - lock.lock(); - try { - task.run(); - } finally { - lock.unlock(); - } - }; - } - private void signalStatusUnknown(DeviceId deviceId) { statusMap.remove(deviceId); } @@ -363,13 +363,11 @@ public void event(DeviceEvent event) { case DEVICE_ADDED: case DEVICE_UPDATED: case DEVICE_AVAILABILITY_CHANGED: - /* - * The GeneralDeviceProvider marks online/offline devices that - * have/have not ANY pipeline config set. Here we make sure the - * one configured in the pipeconf service is the expected one. - * Clearly, it would be better to let the GDP do this check and - * avoid sending twice the same message to the switch. - */ + // The GeneralDeviceProvider marks online/offline devices that + // have/have not ANY pipeline config set. Here we make sure the + // one configured in the pipeconf service is the expected one. + // Clearly, it would be better to let the GDP do this check and + // avoid sending twice the same message to the switch. if (!deviceService.isAvailable(device.id())) { signalStatusUnknown(device.id()); } else { From e3e577f38bfa3db3f38c02f6822ca6094a02c713 Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 10 Feb 2022 19:18:13 +0100 Subject: [PATCH 200/235] [SDFAB-1014] Pending flows and missing groups in the GroupStore A race condition in the audit logic causes groups being stuck forever on pending audit. These groups are basically lost forever and due to this the flows pointing to these groups cannot be installed. Additionally, improve logging in the DistributedGroupStore Change-Id: Id241079d1a33ff3f7482ac72d075eeded6d920df --- .../group/impl/DistributedGroupStore.java | 124 ++++++++++-------- .../store/group/impl/GroupStoreMessage.java | 15 +++ 2 files changed, 84 insertions(+), 55 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java index 8337e845176..d358a77627d 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java @@ -444,11 +444,13 @@ private int getFreeGroupIdValue(DeviceId deviceId) { */ @Override public void storeGroupDescription(GroupDescription groupDesc) { - log.debug("In storeGroupDescription"); + log.debug("In storeGroupDescription id {} for dev {}", + groupDesc.givenGroupId() != null ? "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A", + groupDesc.deviceId()); // Check if a group is existing with the same key Group existingGroup = getGroup(groupDesc.deviceId(), groupDesc.appCookie()); if (existingGroup != null) { - log.debug("Group already exists with the same key {} in dev:{} with id:0x{}", + log.debug("Group already exists with the same key {} in dev:{} with id:{}", groupDesc.appCookie(), groupDesc.deviceId(), Integer.toHexString(existingGroup.id().id())); return; @@ -460,8 +462,9 @@ public void storeGroupDescription(GroupDescription groupDesc) { groupDesc.deviceId()); if (mastershipService.getMasterFor(groupDesc.deviceId()) == null) { log.debug("No Master for device {}..." - + "Queuing Group ADD request", - groupDesc.deviceId()); + + "Queuing Group id {} ADD request", + groupDesc.deviceId(), + groupDesc.givenGroupId() != null ? "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A"); addToPendingAudit(groupDesc); return; } @@ -475,22 +478,25 @@ public void storeGroupDescription(GroupDescription groupDesc) { mastershipService.getMasterFor(groupDesc.deviceId())) .whenComplete((result, error) -> { if (error != null) { - log.warn("Failed to send request to master: {} to {}", - groupOp, + log.warn("Failed to send request to master: id {} to {}", + groupDesc.givenGroupId() != null ? + "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A", mastershipService.getMasterFor(groupDesc.deviceId())); //TODO: Send Group operation failure event } else { - log.debug("Sent Group operation request for device {} " + log.debug("Sent Group operation id {} request for device {} " + "to remote MASTER {}", - groupDesc.deviceId(), - mastershipService.getMasterFor(groupDesc.deviceId())); + groupDesc.givenGroupId() != null ? + "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A", + groupDesc.deviceId(), mastershipService.getMasterFor(groupDesc.deviceId())); } }); return; } - log.debug("Store group for device {} is getting handled locally", - groupDesc.deviceId()); + log.debug("Store group id {} for device {} is getting handled locally", + groupDesc.givenGroupId() != null ? "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A", + groupDesc.deviceId()); storeGroupDescriptionInternal(groupDesc); } @@ -540,20 +546,24 @@ private void storeGroupDescriptionInternal(GroupDescription groupDesc) { return; } - if (deviceAuditStatus.get(groupDesc.deviceId()) == null) { - // Device group audit has not completed yet - // Add this group description to pending group key table - // Create a group entry object with Dummy Group ID - log.debug("storeGroupDescriptionInternal: Device {} AUDIT pending...Queuing Group ADD request", - groupDesc.deviceId()); - StoredGroupEntry group = new DefaultGroup(dummyGroupId, groupDesc); - group.setState(GroupState.WAITING_AUDIT_COMPLETE); - Map pendingKeyTable = - getPendingGroupKeyTable(); - pendingKeyTable.put(new GroupStoreKeyMapKey(groupDesc.deviceId(), - groupDesc.appCookie()), - group); - return; + synchronized (deviceAuditStatus) { + if (deviceAuditStatus.get(groupDesc.deviceId()) == null) { + // Device group audit has not completed yet + // Add this group description to pending group key table + // Create a group entry object with Dummy Group ID + log.debug("storeGroupDescriptionInternal: Device {} AUDIT pending...Queuing Group id {} ADD request", + groupDesc.deviceId(), + groupDesc.givenGroupId() != null ? + "0x" + Integer.toHexString(groupDesc.givenGroupId()) : "N/A"); + StoredGroupEntry group = new DefaultGroup(dummyGroupId, groupDesc); + group.setState(GroupState.WAITING_AUDIT_COMPLETE); + Map pendingKeyTable = + getPendingGroupKeyTable(); + pendingKeyTable.put(new GroupStoreKeyMapKey(groupDesc.deviceId(), + groupDesc.appCookie()), + group); + return; + } } Group matchingExtraneousGroup = null; @@ -703,8 +713,8 @@ public void updateGroupDescription(DeviceId deviceId, deviceId); if (mastershipService.getMasterFor(deviceId) == null) { log.error("No Master for device {}..." - + "Can not perform update group operation", - deviceId); + + "Can not perform update group (appCookie {}) operation", + deviceId, newAppCookie); //TODO: Send Group operation failure event return; } @@ -721,15 +731,14 @@ public void updateGroupDescription(DeviceId deviceId, mastershipService.getMasterFor(deviceId)).whenComplete((result, error) -> { if (error != null) { log.warn("Failed to send request to master: {} to {}", - groupOp, - mastershipService.getMasterFor(deviceId), error); + groupOp, mastershipService.getMasterFor(deviceId), error); } //TODO: Send Group operation failure event }); return; } - log.debug("updateGroupDescription for device {} is getting handled locally", - deviceId); + log.debug("updateGroupDescription for device {} is getting handled locally (appCookie {})", + deviceId, newAppCookie); updateGroupDescriptionInternal(deviceId, oldAppCookie, type, @@ -746,7 +755,8 @@ private void updateGroupDescriptionInternal(DeviceId deviceId, Group oldGroup = getGroup(deviceId, oldAppCookie); if (oldGroup == null) { log.warn("updateGroupDescriptionInternal: Group not found...strange. " - + "GroupKey:{} DeviceId:{}", oldAppCookie, deviceId); + + "GroupKey:{} DeviceId:{} newGroupKey:{}", + oldAppCookie, deviceId, newAppCookie); return; } @@ -777,15 +787,15 @@ private void updateGroupDescriptionInternal(DeviceId deviceId, //Update the group entry in groupkey based map. //Update to groupid based map will happen in the //groupkey based map update listener - log.debug("updateGroupDescriptionInternal with type {}: Group updated with buckets", - type); + log.debug("updateGroupDescriptionInternal with type {}: Group {} updated with buckets", + type, newGroup.id()); getGroupStoreKeyMap(). put(new GroupStoreKeyMapKey(newGroup.deviceId(), newGroup.appCookie()), newGroup); notifyDelegate(new GroupEvent(Type.GROUP_UPDATE_REQUESTED, newGroup)); } else { - log.warn("updateGroupDescriptionInternal with type {}: No " - + "change in the buckets in update", type); + log.warn("updateGroupDescriptionInternal with type {}: Group {} No " + + "change in the buckets in update", type, oldGroup.id()); } } @@ -861,8 +871,8 @@ public void deleteGroupDescription(DeviceId deviceId, deviceId); if (mastershipService.getMasterFor(deviceId) == null) { log.error("No Master for device {}..." - + "Can not perform delete group operation", - deviceId); + + "Can not perform delete group (appCookie {}) operation", + deviceId, appCookie); //TODO: Send Group operation failure event return; } @@ -876,15 +886,14 @@ public void deleteGroupDescription(DeviceId deviceId, mastershipService.getMasterFor(deviceId)).whenComplete((result, error) -> { if (error != null) { log.warn("Failed to send request to master: {} to {}", - groupOp, - mastershipService.getMasterFor(deviceId), error); + groupOp, mastershipService.getMasterFor(deviceId), error); } //TODO: Send Group operation failure event }); return; } - log.debug("deleteGroupDescription in device {} is getting handled locally", - deviceId); + log.debug("deleteGroupDescription in device {} is getting handled locally (appCookie {})", + deviceId, appCookie); deleteGroupDescriptionInternal(deviceId, appCookie); } @@ -907,8 +916,8 @@ private void deleteGroupDescriptionInternal(DeviceId deviceId, put(new GroupStoreKeyMapKey(existing.deviceId(), existing.appCookie()), existing); } - log.debug("deleteGroupDescriptionInternal: in device {} issuing GROUP_REMOVE_REQUESTED", - deviceId); + log.debug("deleteGroupDescriptionInternal: in device {} issuing GROUP_REMOVE_REQUESTED for {}", + deviceId, existing.id()); notifyDelegate(new GroupEvent(Type.GROUP_REMOVE_REQUESTED, existing)); } @@ -932,7 +941,7 @@ private void updateGroupEntryStatsInternal(Group group, StoredGroupEntry existin get()).setBytes(bucket.bytes()); } else { log.warn("updateGroupEntryStatsInternal: No matching bucket {}" + - " to update stats", bucket); + " to update stats for group {}", bucket, group.id()); } } existing.setLife(group.life()); @@ -1119,14 +1128,18 @@ public void deviceInitialAuditCompleted(DeviceId deviceId, deviceId); deviceAuditStatus.put(deviceId, true); // Execute all pending group requests - List pendingGroupRequests = - getPendingGroupKeyTable().values() - .stream() - .filter(g -> g.deviceId().equals(deviceId)) - .collect(Collectors.toList()); - log.debug("processing pending group add requests for device {} and number of pending requests {}", - deviceId, - pendingGroupRequests.size()); + List pendingGroupRequests = getPendingGroupKeyTable().values() + .stream() + .filter(g -> g.deviceId().equals(deviceId)) + .collect(Collectors.toList()); + if (log.isDebugEnabled()) { + List pendingIds = pendingGroupRequests.stream() + .map(GroupDescription::givenGroupId) + .map(id -> id != null ? "0x" + Integer.toHexString(id) : "N/A") + .collect(Collectors.toList()); + log.debug("processing pending group add requests for device {}: {}", + deviceId, pendingIds); + } for (Group group : pendingGroupRequests) { GroupDescription tmp = new DefaultGroupDescription( group.deviceId(), @@ -1215,7 +1228,7 @@ public void groupOperationFailed(DeviceId deviceId, GroupOperation operation) { if (existing.state() == GroupState.PENDING_ADD || existing.state() == GroupState.PENDING_ADD_RETRY) { notifyDelegate(new GroupEvent(Type.GROUP_ADD_FAILED, existing)); - log.warn("groupOperationFailed: cleaningup " + log.warn("groupOperationFailed: cleaning up " + "group {} from store in device {}....", existing.id(), existing.deviceId()); @@ -1339,7 +1352,8 @@ private void process(GroupStoreMessage groupOp) { groupOp.type(), groupOp.deviceId()); if (!mastershipService.isLocalMaster(groupOp.deviceId())) { - log.warn("This node is not MASTER for device {}", groupOp.deviceId()); + log.warn("This node is not MASTER for device {} discard {}", + groupOp.deviceId(), groupOp); return; } if (groupOp.type() == GroupStoreMessage.Type.ADD) { diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java index cb009b27bfc..4b1eec26e08 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java +++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java @@ -194,4 +194,19 @@ public GroupKey newAppCookie() { public Type type() { return type; } + + @Override + public String toString() { + if (type == Type.ADD) { + return "groupId=0x" + Integer.toHexString(groupDesc.givenGroupId()); + } else if (type == Type.DELETE) { + return "appCookie= " + appCookie; + } else if (type == Type.UPDATE) { + return "appCookie= " + newAppCookie; + } else if (type == Type.FAILOVER) { + return "groupId=0x" + Integer.toHexString(groupDesc.givenGroupId()); + } else { + return super.toString(); + } + } } From eed482bbf661f8dfee71167ad1b787db7407c11c Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 18 Feb 2022 05:16:48 -0800 Subject: [PATCH 201/235] [SDFAB-1015] Introduce gracePeriod and defer mastership check For some devices like p4rt devices which are first registered and then updated does not make sense to check the reachability asap: connection is established concurently to the mastership checks and the channel might not be ready. Change-Id: I5a31e09cf382df388a473af338eb72fb9a187fa8 --- .../net/device/DeviceProvider.java | 11 ++ .../net/device/impl/DeviceManager.java | 119 +++++++++++------- .../device/impl/GeneralDeviceProvider.java | 47 ++++--- 3 files changed, 111 insertions(+), 66 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java b/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java index 8dfa730dc81..d625da75372 100644 --- a/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java +++ b/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java @@ -125,4 +125,15 @@ default CompletableFuture probeReachability(DeviceId deviceId) { return CompletableFuture.completedFuture(isReachable(deviceId)); } + /** + * Return the grace period of this provider in milliseconds. With some devices, it might be + * required more time to establish a working channel. This method returns a grace period + * that should be respected before checking the reachability with the device. + * + * @return the grace period of the device. 0 if the device is expected to be immediately functional + */ + default int gracePeriod() { + return 0; + } + } diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index a85ee8f5b85..e78e6d2c2f7 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -398,9 +398,22 @@ public long getLastUpdatedInstant(DeviceId deviceId) { return ls.dateTime.toEpochMilli(); } + // Returns true if the grace period is still on + private boolean inGracePeriod(DeviceId deviceId) { + LocalStatus ls = deviceLocalStatus.get(deviceId); + if (ls == null) { + // This should not be possible, unless the device is removed + log.warn("Not found a recent local status for {}", deviceId); + return true; + } + DeviceProvider provider = getProvider(deviceId); + return ls.connected && + (Instant.now().toEpochMilli() - ls.dateTime.toEpochMilli()) < provider.gracePeriod(); + } + // Check a device for control channel connectivity // and changes local-status appropriately. - private boolean isReachable(DeviceId deviceId) { + private boolean isReachable(DeviceId deviceId, boolean inGracePeriod) { if (deviceId == null) { return false; } @@ -409,7 +422,8 @@ private boolean isReachable(DeviceId deviceId) { boolean reachable = probeReachability(deviceId); if (reachable && !isLocallyConnected(deviceId)) { deviceLocalStatus.put(deviceId, new LocalStatus(true, Instant.now())); - } else if (!reachable && isLocallyConnected(deviceId)) { + } else if (!reachable && isLocallyConnected(deviceId) && !inGracePeriod) { + // Do not update if the grace period is still on deviceLocalStatus.put(deviceId, new LocalStatus(false, Instant.now())); } return reachable; @@ -513,8 +527,12 @@ private void mastershipCheck() { final DeviceId deviceId = device.id(); MastershipRole myRole = mastershipService.getLocalRole(deviceId); log.trace("Checking device {}. Current role is {}", deviceId, myRole); - log.info("Device local status is {}", localStatus(deviceId)); - if (!isReachable(deviceId)) { + + log.debug("Device {} local status is {}", deviceId, localStatus(deviceId)); + final boolean isGracePeriodOn = inGracePeriod(deviceId); + final boolean isReachable = isReachable(deviceId, isGracePeriodOn); + // Passed the grace period and it is still not reachable + if (!isGracePeriodOn && !isReachable) { if (myRole != NONE) { // Verify if the device is fully disconnected from the cluster if (updateMastershipFor(deviceId) == null @@ -523,10 +541,10 @@ private void mastershipCheck() { post(store.markOffline(deviceId)); } } else { - /* Firstly get a role and then check if the device is available in the store. - if it is, if this node is the master and the device is fully disconnected - from the cluster mark the device offline. In principle, this condition should - never be hit unless in a device removed phase for NONE mastership roles. */ + // Firstly get a role and then check if the device is available in the store. + // if it is, if this node is the master and the device is fully disconnected + // from the cluster mark the device offline. In principle, this condition should + // never be hit unless in a device removed phase for NONE mastership roles. try { mastershipService.requestRoleFor(deviceId).get(); } catch (InterruptedException e) { @@ -545,19 +563,22 @@ private void mastershipCheck() { } } roleToAcknowledge.remove(deviceId); - continue; - } - - // If this node is the master, ensure the device is marked online. - if (myRole == MASTER && canMarkOnline(device)) { - post(store.markOnline(deviceId)); - } + } else if (isReachable) { + // If this node is the master, ensure the device is marked online. + if (myRole == MASTER && canMarkOnline(device)) { + log.info("Can mark online {}", deviceId); + post(store.markOnline(deviceId)); + } - log.info("{} is reachable - reasserting the role", deviceId); + log.info("{} is reachable - reasserting the role", deviceId); - /* Device is still reachable. It is useful for some protocols - to reassert the role. Note: NONE triggers request to MastershipService */ - reassertRole(deviceId, myRole); + // Device is still reachable. It is useful for some protocols + // to reassert the role. Note: NONE triggers request to MastershipService + reassertRole(deviceId, myRole); + } else { + // Do not proceed furthermore if the grace period is still on + log.debug("Skipping mastership check for {}", deviceId); + } } } @@ -595,8 +616,8 @@ private void roleCheck() { log.debug("Timeout is expired but current role is not MASTER ({}), nothing to do", myRole); continue; } - /* Switch failed to acknowledge master role we asked for. - Yield mastership to other instance*/ + // Switch failed to acknowledge master role we asked for. + // Yield mastership to other instance log.warn("Failed to assert role onto device {}. requested={}, no response", deviceId, myRole); updateMastershipFor(deviceId); @@ -705,10 +726,10 @@ public void deviceDisconnected(DeviceId deviceId) { log.info("Device {} disconnected from this node: {}", deviceId, clusterService.getLocalNode().id()); - /* If none can reach the device, we will continue with the disconnection logic. - If there is one instance that reported device is still reachable, we hand over - the mastership to it if we are the current master, otherwise if we are a backup - we demote ourselves to the bottom of the backups list */ + // If none can reach the device, we will continue with the disconnection logic. + // If there is one instance that reported device is still reachable, we hand over + // the mastership to it if we are the current master, otherwise if we are a backup + // we demote ourselves to the bottom of the backups list if (updateMastershipFor(deviceId) == null) { log.info("Device {} is fully disconnected from the cluster", deviceId); List descs = store.getPortDescriptions(provider().id(), deviceId) @@ -1058,6 +1079,7 @@ private void reassertRole(final DeviceId did, } private void handleMastershipEvent(MastershipEvent event) { + log.debug("Handling mastership event"); final DeviceId did = event.subject(); // myNextRole suggested by MastershipService event @@ -1079,9 +1101,11 @@ private void handleMastershipEvent(MastershipEvent event) { myNextRole = NONE; } - final boolean isReachable = isReachable(did); - log.info("Device local status is {}", localStatus(did)); - if (!isReachable) { + log.debug("Device {} local status is {}", did, localStatus(did)); + final boolean isGracePeriodOn = inGracePeriod(did); + final boolean isReachable = isReachable(did, isGracePeriodOn); + // Passed the grace period and it is still not reachable + if (!isGracePeriodOn && !isReachable) { // device is not connected to this node, nevertheless we should get a role if (mastershipService.getLocalRole(did) == NONE) { log.debug("Node was instructed to be {} role for {}, " @@ -1106,20 +1130,23 @@ private void handleMastershipEvent(MastershipEvent event) { // Let's put some order in the candidates list roleToAcknowledge.remove(did); updateMastershipFor(did); - return; - } - - /* Device is connected to this node - always reassert the role. - Ideally, protocols like OpenFlow would not need to reassert the - role because the instances are only identified by the role. However, - other protocols like P4RT require to provide also an election id - which maybe different over time, by reasserting the role will guarantee - that updated election ids are communicated to the devices. It should not - cost us a lot as it is equivalent to a probe.*/ - if (store.getDevice(did) != null) { - reassertRole(did, myNextRole); + } else if (isReachable) { + // Device is connected to this node - always reassert the role. + // Ideally, protocols like OpenFlow would not need to reassert the + // role because the instances are only identified by the role. However, + // other protocols like P4RT require to provide also an election id + // which maybe different over time, by reasserting the role will guarantee + // that updated election ids are communicated to the devices. It should not + // cost us a lot as it is equivalent to a probe. + if (store.getDevice(did) != null) { + log.info("{} is reachable - reasserting the role", did); + reassertRole(did, myNextRole); + } else { + log.debug("Device is not yet/no longer in the store: {}", did); + } } else { - log.debug("Device is not yet/no longer in the store: {}", did); + // Do not proceed furthermore if the grace period is still on + log.debug("Skipping mastership event {}", event); } } @@ -1452,10 +1479,10 @@ private NodeId updateMastershipFor(DeviceId deviceId) { if (myRole == MASTER) { log.info("Handing over the mastership of {} to next master {}", deviceId, nextMaster); mastershipAdminService.setRole(nextMaster, deviceId, MASTER); - /* Do not demote here because setRole can return before the mastership has been passed. - Current implementation promotes first the nextMaster as top of candidate list and then - transfer the leadership. We can use the BACKUP events to do demote or leverage periodic - checks.*/ + // Do not demote here because setRole can return before the mastership has been passed. + // Current implementation promotes first the nextMaster as top of candidate list and then + // transfer the leadership. We can use the BACKUP events to do demote or leverage periodic + // checks. } else if (myRole == STANDBY) { log.info("Demote current instance to the bottom of the candidates list for {}", deviceId); mastershipAdminService.demote(localNodeId, deviceId); @@ -1467,8 +1494,6 @@ private NodeId updateMastershipFor(DeviceId deviceId) { return nextMaster; } - - /** * Port Enable/Disable message sent to the device's MASTER node. */ diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index ac0fda7c8af..78ab98a4f1d 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -124,6 +124,11 @@ public class GeneralDeviceProvider extends AbstractProvider private static final int CORE_POOL_SIZE = 10; private static final String UNKNOWN = "unknown"; + // We have measured a grace period of 5s with the + // current devices - giving some time more to absorb + // any fluctuation. + private static final int GRACE_PERIOD = 8000; + @Reference(cardinality = ReferenceCardinality.MANDATORY) private DeviceProviderRegistry providerRegistry; @@ -411,8 +416,14 @@ public CompletableFuture probeReachability(DeviceId deviceId) { return handshaker.probeReachability(); } + @Override + public int gracePeriod() { + return GRACE_PERIOD; + } + private boolean probeReachabilitySync(DeviceId deviceId) { - // Wait 3/4 of the checkup interval + // Wait 3/4 of the checkup interval and make sure the thread + // is not blocked more than the checkUpInterval return Tools.futureGetOrElse(probeReachability(deviceId), (checkupInterval * 3000 / 4), TimeUnit.MILLISECONDS, Boolean.FALSE); } @@ -664,22 +675,20 @@ private void createOrUpdateDevice(DeviceId deviceId, boolean available) { if (deviceService.getDevice(deviceId) != null && deviceService.isAvailable(deviceId) == available && storeDescription != null) { - /* - * FIXME SDFAB-650 rethink the APIs and abstractions around the DeviceStore. - * Device registration is a two-step process for the GDP. Initially, the device is - * registered with default avail. to false. Later, the checkup task will update the - * description with the default avail to true in order to mark it available. Today, - * there is only one API to mark online a device from the device provider which is - * deviceConnected which assumes an update on the device description. The device provider - * is the only one able to update the device description and we have to make sure that - * the default avail. is flipped to true as it is used to mark as online the device when - * it is created or updated. Otherwise, if an ONOS instance fails and restarts, when re-joining - * the cluster, it will get the device marked as offline and will not be able to update - * its status until it become the master. This process concurs with the markOnline done - * by the background thread in the DeviceManager and its the reason why we cannot just check - * the device availability but we need to compare also the desc. Checking here the equality, - * as in general we may want to upgrade the device description at run time. - */ + // FIXME SDFAB-650 rethink the APIs and abstractions around the DeviceStore. + // Device registration is a two-step process for the GDP. Initially, the device is + // registered with default avail. to false. Later, the checkup task will update the + // description with the default avail to true in order to mark it available. Today, + // there is only one API to mark online a device from the device provider which is + // deviceConnected which assumes an update on the device description. The device provider + // is the only one able to update the device description and we have to make sure that + // the default avail. is flipped to true as it is used to mark as online the device when + // it is created or updated. Otherwise, if an ONOS instance fails and restarts, when re-joining + // the cluster, it will get the device marked as offline and will not be able to update + // its status until it become the master. This process concurs with the markOnline done + // by the background thread in the DeviceManager and its the reason why we cannot just check + // the device availability but we need to compare also the desc. Checking here the equality, + // as in general we may want to upgrade the device description at run time. DeviceDescription testDeviceDescription = DefaultDeviceDescription.copyReplacingAnnotation( deviceDescription, storeDescription.annotations()); if (testDeviceDescription.equals(storeDescription)) { @@ -784,8 +793,8 @@ private void doCheckupAndRepair(DeviceId deviceId) { log.warn("Detected role mismatch for {}, core expects {}, " + "but device reports {}, reassert the role... ", deviceId, expectedRole, deviceRole); - /* If we are experience a severe issue, eventually - the DeviceManager will move the mastership */ + // If we are experiencing a severe issue, eventually + // the DeviceManager will move the mastership roleChanged(deviceId, expectedRole); } else { log.debug("Detected role mismatch for {}, core expects {}, " + From 2ad220f5636014fb1fe17c6bed5720a3e5597cb0 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 18 Feb 2022 15:12:33 -0800 Subject: [PATCH 202/235] [SDFAB-1006] Purge groups and flows failed With the persistence mastership in place the stats are no longer discarded because of the lack of a master. This change introduces further checks based on the availability. Additionally, it purges the pending groups map which was leaking memory. Change-Id: I6b0d127bf9a247d7981871f02847f6e2f4074182 --- .../net/flow/impl/FlowRuleManager.java | 47 +++++++++------ .../net/flow/impl/FlowRuleManagerTest.java | 8 +++ .../group/impl/DistributedGroupStore.java | 60 +++++++++++++++---- 3 files changed, 84 insertions(+), 31 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index d593e458878..9bc5abc8ef4 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -530,9 +530,13 @@ private boolean handleExistingFlow(FlowEntry flowEntry) { // Flow rule is still valid, let's try to update the stats if (storedEntry.state() != FlowEntry.FlowEntryState.PENDING_REMOVE && checkRuleLiveness(flowEntry, storedEntry)) { + if (!shouldHandle(flowEntry.deviceId())) { + return false; + } FlowRuleEvent event = store.addOrUpdateFlowRule(flowEntry); - /* Something went wrong or there is no master - better check if it is the latter */ + // Something went wrong or there is no master or + // the device is not available better check if it + // is the latter cases if (event == null) { log.debug("No flow store event generated for addOrUpdate of {}", flowEntry); return false; @@ -545,8 +549,8 @@ private boolean handleExistingFlow(FlowEntry flowEntry) { removeFlowRules(flowEntry); } } else { - /* It was already removed or there is no master - better check if it is the latter */ + // It was already removed or there is no master + // better check if it is the latter return false; } return true; @@ -603,6 +607,11 @@ public void pushFlowMetricsWithoutFlowMissing(DeviceId deviceId, Iterable flowEntries, boolean useMissingFlow) { Map storedRules = Maps.newHashMap(); @@ -620,17 +629,17 @@ private void pushFlowMetricsInternal(DeviceId deviceId, Iterable flow done = handleExistingFlow(rule); if (!done) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to update the flow stats while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to update the flow stats while the node was not the master" + + " or the device {} was not available", deviceId); return; } } } else { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to update the flows while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to update the flows while the node was not the master" + + " or the device {} was not available", deviceId); return; } // the two rules are not an exact match - remove the @@ -642,9 +651,9 @@ private void pushFlowMetricsInternal(DeviceId deviceId, Iterable flow // the device has a rule the store does not have if (!allowExtraneousRules) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to remove flows while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to remove flows while the node was not the master" + + " or the device {} was not available", deviceId); return; } extraneousFlow(rule); @@ -652,9 +661,9 @@ private void pushFlowMetricsInternal(DeviceId deviceId, Iterable flow FlowRuleEvent flowRuleEvent = store.addOrUpdateFlowRule(rule); if (flowRuleEvent == null) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to import flows while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to import flows while the node was not the master" + + " or the device {} was not available", deviceId); return; } } @@ -670,9 +679,9 @@ private void pushFlowMetricsInternal(DeviceId deviceId, Iterable flow if (useMissingFlow) { for (FlowEntry rule : storedRules.keySet()) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to install missing rules while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to install missing rules while the node was not the master" + + " or the device {} was not available", deviceId); return; } try { diff --git a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java index 300b0233807..4be82206761 100644 --- a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java @@ -543,6 +543,14 @@ public Iterable getAvailableDevices() { public Device getDevice(DeviceId deviceId) { return deviceId.equals(FOO_DID) ? FOO_DEV : DEV; } + + @Override + public boolean isAvailable(DeviceId deviceId) { + if (deviceId.equals(DID) || deviceId.equals(FOO_DID)) { + return true; + } + return false; + } } private class TestProvider extends AbstractProvider implements FlowRuleProvider { diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java index d358a77627d..9032a23e6b0 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java +++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java @@ -1100,6 +1100,16 @@ public void purgeGroupEntry(DeviceId deviceId) { .forEach(entriesPendingRemove::add); purgeGroupEntries(entriesPendingRemove); + + // it is unlikely to happen but better clear also the + // pending groups: device disconnected before we got + // the first stats and the apps were able to push groups. + entriesPendingRemove.clear(); + getPendingGroupKeyTable().entrySet().stream() + .filter(entry -> entry.getKey().deviceId().equals(deviceId)) + .forEach(entriesPendingRemove::add); + + purgeGroupEntries(entriesPendingRemove); } @Override @@ -1112,11 +1122,25 @@ public void purgeGroupEntries(DeviceId deviceId, ApplicationId appId) { .forEach(entriesPendingRemove::add); purgeGroupEntries(entriesPendingRemove); + + // it is unlikely to happen but better clear also the + // pending groups: device disconnected before we got + // the first stats and the apps were able to push groups. + entriesPendingRemove.clear(); + getPendingGroupKeyTable().entrySet().stream() + .filter(entry -> entry.getKey().deviceId().equals(deviceId) && entry.getValue().appId().equals(appId)) + .forEach(entriesPendingRemove::add); + + purgeGroupEntries(entriesPendingRemove); } @Override public void purgeGroupEntries() { purgeGroupEntries(getGroupStoreKeyMap().entrySet()); + // it is unlikely to happen but better clear also the + // pending groups: device disconnected before we got + // the first stats and the apps were able to push groups. + purgeGroupEntries(getPendingGroupKeyTable().entrySet()); } @Override @@ -1140,7 +1164,14 @@ public void deviceInitialAuditCompleted(DeviceId deviceId, log.debug("processing pending group add requests for device {}: {}", deviceId, pendingIds); } + NodeId master; for (Group group : pendingGroupRequests) { + // Mastership change can occur during this iteration + if (!shouldHandle(deviceId)) { + log.warn("Tried to process pending groups while the node was not the master" + + " or the device {} was not available", deviceId); + return; + } GroupDescription tmp = new DefaultGroupDescription( group.deviceId(), group.type(), @@ -1470,6 +1501,11 @@ public int hashCode() { } } + private boolean shouldHandle(DeviceId deviceId) { + NodeId master = mastershipService.getMasterFor(deviceId); + return Objects.equals(local, master) && deviceService.isAvailable(deviceId); + } + @Override public void pushGroupMetrics(DeviceId deviceId, Collection groupEntries) { @@ -1504,9 +1540,9 @@ public void pushGroupMetrics(DeviceId deviceId, // update stats for (Iterator it2 = southboundGroupEntries.iterator(); it2.hasNext();) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to update the group stats while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to update the group stats while the node was not the master" + + " or the device {} was not available", deviceId); return; } Group group = it2.next(); @@ -1534,9 +1570,9 @@ public void pushGroupMetrics(DeviceId deviceId, } } else { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to process extraneous groups while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to process extraneous groups while the node was not the master" + + " or the device {} was not available", deviceId); return; } // there are groups in the switch that aren't in the store @@ -1554,9 +1590,9 @@ public void pushGroupMetrics(DeviceId deviceId, // missing groups in the dataplane for (StoredGroupEntry group : storedGroupEntries) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to process missing groups while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to process missing groups while the node was not the master" + + " or the device {} was not available", deviceId); return; } // there are groups in the store that aren't in the switch @@ -1568,9 +1604,9 @@ public void pushGroupMetrics(DeviceId deviceId, // extraneous groups in the store for (Group group : extraneousStoredEntries) { // Mastership change can occur during this iteration - master = mastershipService.getMasterFor(deviceId); - if (!Objects.equals(local, master)) { - log.warn("Tried to process node extraneous groups while the node was not the master"); + if (!shouldHandle(deviceId)) { + log.warn("Tried to process node extraneous groups while the node was not the master" + + " or the device {} was not available", deviceId); return; } // there are groups in the extraneous store that From 270cf6d18cbe5942afa43fd09f981c145b77e2d6 Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 22 Feb 2022 15:43:46 -0800 Subject: [PATCH 203/235] [SDFAB-1015] Use gNOI to probe reachability and increase short timeouts p4runtime probe reachability is based on GetPipelineConfig gRPC that can timeout if we are setting in parallel the pipeline: the two requests concur for the same lock. For our purposes it is enough to check if the device is still there; for this reason stratum handshaker now relies on gNOI reachability which is based on getTime RPC. Additionally increase short timeouts: we have consistenly measured a time of 14s to push the pipeline on the new QS devices. Change-Id: I8837540241d8a68f648e47ae165ea53a2d0a865c --- .../org/onosproject/drivers/stratum/StratumHandshaker.java | 7 ++++++- .../p4runtime/ctl/client/P4RuntimeClientImpl.java | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/stratum/src/main/java/org/onosproject/drivers/stratum/StratumHandshaker.java b/drivers/stratum/src/main/java/org/onosproject/drivers/stratum/StratumHandshaker.java index ac9a534599a..7b41f85fe2d 100644 --- a/drivers/stratum/src/main/java/org/onosproject/drivers/stratum/StratumHandshaker.java +++ b/drivers/stratum/src/main/java/org/onosproject/drivers/stratum/StratumHandshaker.java @@ -64,7 +64,12 @@ public boolean isReachable() { @Override public CompletableFuture probeReachability() { - return p4runtime.probeReachability(); + // p4runtime probe reachability is based on GetPipelineConfig gRPC that + // can timeout if we are setting in parallel the pipeline: the two requests + // can concur for the same lock. For our purposes it is enough to check if + // the device is still there; for this reason stratum handshaker now relies + // on gNOI reachability which is based on getTime RPC. + return gnoi.probeReachability(); } @Override diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/P4RuntimeClientImpl.java index fdf5a947556..5e29d62bcb0 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/P4RuntimeClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/P4RuntimeClientImpl.java @@ -55,10 +55,12 @@ public final class P4RuntimeClientImpl private static final long DEFAULT_P4_DEVICE_ID = 1; // TODO: consider making timeouts configurable per-device via netcfg + // We have measured that some devices can take up to 15s to push a pipeline + // which can block potentially other READ done against the target. /** * Timeout in seconds for short/fast RPCs. */ - static final int SHORT_TIMEOUT_SECONDS = 10; + static final int SHORT_TIMEOUT_SECONDS = 15; /** * Timeout in seconds for RPCs that involve transfer of potentially large * amount of data. This shoulld be long enough to allow for network delay From 64462f11a5db6d8be83d5a2e0cec620c88095e58 Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 24 Feb 2022 10:13:06 -0800 Subject: [PATCH 204/235] Fix availability checks in GDP Checks if the expected pipeline is set and if the pipeline is READY Change-Id: Ief210c91b44f500eca8d79ebeb4e79766c25fdfe --- .../drivers/p4runtime/P4RuntimeHandshaker.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeHandshaker.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeHandshaker.java index e689298d5f1..3219a6cf8c9 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeHandshaker.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeHandshaker.java @@ -21,12 +21,15 @@ import org.onosproject.net.MastershipRole; import org.onosproject.net.device.DeviceAgentListener; import org.onosproject.net.device.DeviceHandshaker; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.service.PiPipeconfService; import org.onosproject.net.pi.service.PiPipeconfWatchdogService; import org.onosproject.net.provider.ProviderId; import org.onosproject.p4runtime.api.P4RuntimeClient; import org.onosproject.p4runtime.api.P4RuntimeController; import java.math.BigInteger; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import static java.util.concurrent.CompletableFuture.completedFuture; @@ -94,7 +97,20 @@ public CompletableFuture probeAvailability() { !client.isSessionOpen(p4DeviceId)) { return completedFuture(false); } - return client.isAnyPipelineConfigSet(p4DeviceId); + + PiPipeconfService piPipeconfService = handler().get(PiPipeconfService.class); + final Optional optionalPiPipeconf = piPipeconfService.getPipeconf(deviceId); + if (optionalPiPipeconf.isEmpty()) { + return completedFuture(false); + } + + if (!PiPipeconfWatchdogService.PipelineStatus.READY.equals( + handler().get(PiPipeconfWatchdogService.class) + .getStatus(data().deviceId()))) { + return completedFuture(false); + } + + return client.isPipelineConfigSet(p4DeviceId, optionalPiPipeconf.get()); } @Override From ee60f76ae19abeb2162315dd141ce44233880076 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 28 Feb 2022 21:38:30 -0800 Subject: [PATCH 205/235] Allow building UpfApplication matching only on slice_id According to the UP4 logical pipeline, the only required match field is slice_id. All other fields are ternary, hence optional. Change-Id: I265b43621d6469087e57fda5eb6a4ba350853e9d --- .../java/org/onosproject/net/behaviour/upf/UpfApplication.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java index 017de89d650..fed1eb97810 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfApplication.java @@ -261,9 +261,6 @@ public Builder withPriority(int priority) { } public UpfApplication build() { - checkArgument(ipPrefix != null || l4PortRange != null || - ipProto != null, - "At least one match field is required"); checkNotNull(sliceId, "Slice ID must be provided"); checkNotNull(appId, "Application ID must be provided"); checkNotNull(priority, "Priority must be provided"); From 5a5c8aa1c0c06a36d6924723c50272054837f5b9 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 28 Feb 2022 13:37:08 -0800 Subject: [PATCH 206/235] Introduce allowlist for back to back duplicate events If there are two duplicate back to back role requests DeviceTaskExectur drops the duplicate response if they are spaced by an interval < 1s. This patch introduces an allowlist for event types that should not be dropped by the back to back policy. This patch fixes one scenario that led to SDFAB-1025 Change-Id: Ic62ba56228c9c0c2b368e8e68ff50d11e2dc4249 --- .../general/device/impl/DeviceTaskExecutor.java | 13 ++++++++++--- .../general/device/impl/GeneralDeviceProvider.java | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/DeviceTaskExecutor.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/DeviceTaskExecutor.java index 6f90256fd81..30e754abdd1 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/DeviceTaskExecutor.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/DeviceTaskExecutor.java @@ -75,15 +75,22 @@ public TaskQueue load(DeviceId deviceId) { return new TaskQueue(); } }); + /** + * Type of tasks allowed to be back to back. + */ + private final Set allowList; /** - * Creates a new executor with the given delegate executor service. + * Creates a new executor with the given delegate executor service + * and the allowed back to back task types. * * @param delegate executor service + * @param allowed tasks allowed to be back to back */ - DeviceTaskExecutor(ExecutorService delegate) { + DeviceTaskExecutor(ExecutorService delegate, Set allowed) { checkNotNull(delegate); this.delegate = delegate; + this.allowList = allowed; } /** @@ -108,7 +115,7 @@ void submit(DeviceId deviceId, T type, Runnable runnable) { final DeviceTask task = new DeviceTask(deviceId, type, runnable); deviceLocks.get(deviceId).lock(); try { - if (taskQueues.get(deviceId).isBackToBackDuplicate(type)) { + if (taskQueues.get(deviceId).isBackToBackDuplicate(type) && !allowList.contains(type)) { if (log.isDebugEnabled()) { log.debug("Dropping back-to-back duplicate task {} for {}", type, deviceId); diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index 78ab98a4f1d..f684d31e802 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -204,7 +204,7 @@ protected DeviceProviderService providerService() { public void activate(ComponentContext context) { mainExecutor = newFixedThreadPool(CORE_POOL_SIZE, groupedThreads( "onos/gdp", "%d", log)); - taskExecutor = new DeviceTaskExecutor<>(mainExecutor); + taskExecutor = new DeviceTaskExecutor<>(mainExecutor, GDP_ALLOWLIST); providerService = providerRegistry.register(this); componentConfigService.registerProperties(getClass()); coreService.registerApplication(APP_NAME); @@ -587,6 +587,9 @@ enum TaskType { NOT_MASTER, } + private static final Set GDP_ALLOWLIST = Sets.newHashSet(TaskType.ROLE_MASTER, TaskType.ROLE_NONE, + TaskType.ROLE_STANDBY, TaskType.NOT_MASTER); + private void submitTask(DeviceId deviceId, TaskType taskType) { taskExecutor.submit(deviceId, taskType, taskRunnable(deviceId, taskType)); } From f260c916c8a9739667453bf466422d33f62e24a4 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 28 Feb 2022 20:34:42 -0800 Subject: [PATCH 207/235] Improve Mastership logging Logs only meaningful mastership changes Change-Id: Ibbe4f85526df01b3c1b6eab317a2c15716098d80 --- .../net/device/impl/DeviceManager.java | 18 +++++++++++---- .../ctl/client/StreamClientImpl.java | 21 ++++++++++++----- .../device/impl/GeneralDeviceProvider.java | 23 ++++++++++++++++--- 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index e78e6d2c2f7..be114c41383 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -216,6 +216,10 @@ public LocalStatus(boolean b, Instant now) { private ScheduledExecutorService backgroundRoleChecker; private static final int ROLE_TIMEOUT_SECONDS = 10; + // FIXME join this map with roleToAcknowledge and fix the back to back event issue here + private final Map lastAcknowledgedRole = + Maps.newConcurrentMap(); + @Activate public void activate() { portAnnotationOp = new PortAnnotationOperator(networkConfigService); @@ -566,11 +570,11 @@ private void mastershipCheck() { } else if (isReachable) { // If this node is the master, ensure the device is marked online. if (myRole == MASTER && canMarkOnline(device)) { - log.info("Can mark online {}", deviceId); + log.debug("Can mark online {}", deviceId); post(store.markOnline(deviceId)); } - log.info("{} is reachable - reasserting the role", deviceId); + log.debug("{} is reachable - reasserting the role", deviceId); // Device is still reachable. It is useful for some protocols // to reassert the role. Note: NONE triggers request to MastershipService @@ -913,8 +917,13 @@ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, if (Objects.equals(requested, response)) { if (Objects.equals(requested, expected)) { - // Stop the timer - log.info("Role has been acknowledged for device {}", deviceId); + if (log.isDebugEnabled()) { + log.debug("Role has been acknowledged for device {}", deviceId); + } else if (!requested.equals(lastAcknowledgedRole.get(deviceId))) { + log.info("Role has been acknowledged for device {}", deviceId); + } + // Update the last known role and stop the timer + lastAcknowledgedRole.put(deviceId, requested); roleToAcknowledge.remove(deviceId); } else { log.warn("Role mismatch on {}. Set to {}, but store demands {}", @@ -1174,6 +1183,7 @@ public void notify(DeviceEvent event) { // When device is administratively removed, force disconnect. DeviceId deviceId = event.subject().id(); deviceLocalStatus.remove(deviceId); + lastAcknowledgedRole.remove(deviceId); DeviceProvider provider = getProvider(deviceId); if (provider != null) { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java index 5d227e4dc4f..5c64a0c9920 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/client/StreamClientImpl.java @@ -181,12 +181,21 @@ private void handlePendingElectionId(BigInteger masterElectionId) { ARBITRATION_RETRY_SECONDS, TimeUnit.SECONDS); } else { // Send now. - log.info("Setting mastership on {}... " + - "master={}, newElectionId={}, " + - "masterElectionId={}, sessionOpen={}", - deviceId, requestedToBeMaster.get(), - pendingElectionId, masterElectionId, - streamChannelManager.isOpen()); + if (log.isDebugEnabled()) { + log.debug("Setting mastership on {}... " + + "master={}, newElectionId={}, " + + "masterElectionId={}, sessionOpen={}", + deviceId, requestedToBeMaster.get(), + pendingElectionId, masterElectionId, + streamChannelManager.isOpen()); + } else if (!pendingElectionId.equals(lastUsedElectionId)) { + log.info("Setting mastership on {}... " + + "master={}, newElectionId={}, " + + "masterElectionId={}, sessionOpen={}", + deviceId, requestedToBeMaster.get(), + pendingElectionId, masterElectionId, + streamChannelManager.isOpen()); + } // Optimistically set the reported master status, if wrong, it // will be updated by the arbitration response. This alleviates // race conditions when calling isMaster() right after setting diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java index f684d31e802..5b32187d69e 100644 --- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java +++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java @@ -19,6 +19,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; +import org.apache.commons.lang3.tuple.Pair; import org.onlab.packet.ChassisId; import org.onlab.util.ItemNotFoundException; import org.onlab.util.SharedScheduledExecutors; @@ -192,6 +193,9 @@ public class GeneralDeviceProvider extends AbstractProvider private StatsPoller statsPoller; private DeviceProviderService providerService; + private final Map> lastRoleRequest = + Maps.newConcurrentMap(); + public GeneralDeviceProvider() { super(new ProviderId(URI_SCHEME, DEVICE_PROVIDER_PACKAGE)); } @@ -329,7 +333,13 @@ public void roleChanged(DeviceId deviceId, MastershipRole newRole) { break; case NONE: // No preference for NONE, apply as is. - log.info("Notifying role {} to {}", newRole, deviceId); + Pair pairRolePref = Pair.of(newRole, -1); + if (log.isDebugEnabled()) { + log.debug("Notifying role {} to {}", newRole, deviceId); + } else if (!pairRolePref.equals(lastRoleRequest.get(deviceId))) { + log.info("Notifying role {} to {}", newRole, deviceId); + } + lastRoleRequest.put(deviceId, pairRolePref); handshaker.roleChanged(newRole); return; default: @@ -337,8 +347,15 @@ public void roleChanged(DeviceId deviceId, MastershipRole newRole) { return; } - log.info("Notifying role {} (preference {}) for term {} to {}", - newRole, preference, mastershipInfo.term(), deviceId); + Pair pairRolePref = Pair.of(newRole, preference); + if (log.isDebugEnabled()) { + log.debug("Notifying role {} (preference {}) for term {} to {}", + newRole, preference, mastershipInfo.term(), deviceId); + } else if (!pairRolePref.equals(lastRoleRequest.get(deviceId))) { + log.info("Notifying role {} (preference {}) for term {} to {}", + newRole, preference, mastershipInfo.term(), deviceId); + } + lastRoleRequest.put(deviceId, pairRolePref); try { handshaker.roleChanged(preference, mastershipInfo.term()); From 6d5f0aea987e8c656518cfd8d08fef33dc4902cc Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 3 Mar 2022 02:53:39 +0000 Subject: [PATCH 208/235] Tagging 2.5.7-rc1 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 934ff946dcb..27ee924ae79 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-SNAPSHOT"); + private static Version version = Version.version("2.5.7-rc1"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 58b2963e84f..a10eab68458 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-SNAPSHOT" +ONOS_VERSION = "2.5.7-rc1" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index c1ea9f26306..ca964c0372e 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-rc1" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index e126e653bf6..3330a620c0c 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 5b7ddfaadae..010260660b5 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 753860fa868..3fc84350307 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 7e972427237..01f5b446ac6 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index e1af1a5772b..26c8650fe6b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 36a1a19dbed..5dd2a06de30 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 72ef5dba606..c64dccaaf26 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 1e843e290bb..cbd666b0de3 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 076dc5f133b..7f38486ae37 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index f37199f78cf..7f7a3c28347 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 12194a2db7c..fb429e8b92c 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 886039bcef2..703ae07a26b 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index cec5d33bf40..2139bbaafda 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 6e5cf3c14fc..03e0b7d40f1 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index f5493f9b7f5..a6db7b1f0e8 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index a60599a2cfc..20919e6f312 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc1 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index e95985c41de..a406ca3975d 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc1 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 78e84f2ad98..72dea4927db 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc1" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From f092d04aef87acd051a8e73375621aff1e6d233d Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 3 Mar 2022 02:53:46 +0000 Subject: [PATCH 209/235] Starting snapshot 2.5.7-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 27ee924ae79..934ff946dcb 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-rc1"); + private static Version version = Version.version("2.5.7-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index a10eab68458..58b2963e84f 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-rc1" +ONOS_VERSION = "2.5.7-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index ca964c0372e..c1ea9f26306 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-rc1" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc1.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 3330a620c0c..e126e653bf6 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 010260660b5..5b7ddfaadae 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 3fc84350307..753860fa868 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 01f5b446ac6..7e972427237 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 26c8650fe6b..e1af1a5772b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 5dd2a06de30..36a1a19dbed 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index c64dccaaf26..72ef5dba606 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index cbd666b0de3..1e843e290bb 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 7f38486ae37..076dc5f133b 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 7f7a3c28347..f37199f78cf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index fb429e8b92c..12194a2db7c 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 703ae07a26b..886039bcef2 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 2139bbaafda..cec5d33bf40 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 03e0b7d40f1..6e5cf3c14fc 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a6db7b1f0e8..f5493f9b7f5 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 20919e6f312..a60599a2cfc 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc1 + 2.5.7-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index a406ca3975d..e95985c41de 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc1 + 2.5.7-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 72dea4927db..78e84f2ad98 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc1" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From ee45c10e65eb4803f0b6bb86c63d0fe2b9627b8a Mon Sep 17 00:00:00 2001 From: pierventre Date: Thu, 3 Mar 2022 21:07:54 -0800 Subject: [PATCH 210/235] [SDFAB-726] Improve logging in the ECFlowRuleStore Currently, we are not able to understand what's exactly went wrong on the new master and is preventing to activate the new term. This build improves logging and move to WARN some useful error prints Change-Id: Ia00d65dd4fb9ff70d60ccdac3f39882f3c916814 --- .../onosproject/store/flow/impl/DeviceFlowTable.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java index a257cbd60a3..7f0c04171ed 100644 --- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java +++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DeviceFlowTable.java @@ -668,10 +668,11 @@ private void syncFlows(DeviceReplicaInfo prevReplicaInfo, DeviceReplicaInfo newR * @param newReplicaInfo the new replica info */ private void syncFlowsOnMaster(DeviceReplicaInfo prevReplicaInfo, DeviceReplicaInfo newReplicaInfo) { + log.info("syncFlowsOnMaster {}", prevReplicaInfo.master()); syncFlowsOn(prevReplicaInfo.master()) .whenCompleteAsync((result, error) -> { if (error != null) { - log.debug("Failed to synchronize flows on previous master {}", prevReplicaInfo.master(), error); + log.warn("Failed to synchronize flows on previous master {}", prevReplicaInfo.master(), error); syncFlowsOnBackups(prevReplicaInfo, newReplicaInfo); } else { activateMaster(newReplicaInfo); @@ -690,10 +691,11 @@ private void syncFlowsOnBackups(DeviceReplicaInfo prevReplicaInfo, DeviceReplica .stream() .filter(nodeId -> !nodeId.equals(localNodeId)) .collect(Collectors.toList()); + log.info("syncFlowsOnBackups {}", backups); syncFlowsOn(backups) .whenCompleteAsync((result, error) -> { if (error != null) { - log.debug("Failed to synchronize flows on previous backup nodes {}", backups, error); + log.warn("Failed to synchronize flows on previous backup nodes {}", backups, error); } activateMaster(newReplicaInfo); }, executor); @@ -721,6 +723,7 @@ private CompletableFuture syncFlowsOn(Collection nodes) { * @return a future to be completed once the flows have been synchronizes */ private CompletableFuture syncFlowsOn(NodeId nodeId) { + log.info("syncFlowsOn {}", nodeId); return requestDigests(nodeId) .thenCompose(digests -> Tools.allOf(digests.stream() .filter(digest -> digest.isNewerThan(getDigest(digest.bucket()))) @@ -737,6 +740,7 @@ private CompletableFuture syncFlowsOn(NodeId nodeId) { * @return a future to be completed once the bucket has been synchronizes */ private CompletableFuture syncBucketOn(NodeId nodeId, int bucketNumber) { + log.info("syncBucket {} on {}", bucketNumber, nodeId); return requestBucket(nodeId, bucketNumber) .thenAcceptAsync(flowBucket -> { flowBuckets.compute(flowBucket.bucketId().bucket(), @@ -752,7 +756,7 @@ private CompletableFuture syncBucketOn(NodeId nodeId, int bucketNumber) { * @return a future to be completed with the bucket */ private CompletableFuture requestBucket(NodeId nodeId, int bucket) { - log.debug("Requesting flow bucket {} from {}", bucket, nodeId); + log.info("Requesting flow bucket {} from {}", bucket, nodeId); return sendWithTimestamp(bucket, getBucketSubject, nodeId); } @@ -773,7 +777,7 @@ private FlowBucket onGetBucket(int bucketId) { */ private void activateMaster(DeviceReplicaInfo replicaInfo) { if (replicaInfo.isMaster(localNodeId)) { - log.debug("Activating term {} for device {}", replicaInfo.term(), deviceId); + log.info("Activating term {} for device {}", replicaInfo.term(), deviceId); for (int i = 0; i < NUM_BUCKETS; i++) { activateBucket(i); } From bbfbfe148d0280dc5989c45ecb82e56907c8e724 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 4 Mar 2022 15:21:09 -0800 Subject: [PATCH 211/235] Filter out meters default config There is no need to further process meters default config in ONOS, there will not be any trace in the ONOS stores. Filtering out in advance allows to save memory and time. Change-Id: I57f598aba3f2ba32923e8170f6c47f9efe27edd4 --- .../drivers/p4runtime/P4RuntimeMeterProgrammable.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index 223089319d2..8bb4fc7ad4c 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -50,6 +50,7 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; import static org.onosproject.p4runtime.api.P4RuntimeWriteClient.UpdateType; @@ -148,7 +149,10 @@ public CompletableFuture> getMeters() { } piMeterCellConfigs = client.read(p4DeviceId, pipeconf) - .meterCells(meterIds).submitSync().all(PiMeterCellConfig.class); + .meterCells(meterIds).submitSync().all(PiMeterCellConfig.class) + .stream() + .filter(piMeterCellConfig -> !piMeterCellConfig.isDefaultConfig()) + .collect(Collectors.toList()); meterMirror.sync(deviceId, piMeterCellConfigs); From 40bbf72f0d0edcfdfea9cc048e1d6123ea1f7323 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 10 Mar 2022 21:05:01 +0000 Subject: [PATCH 212/235] Tagging 2.5.7-rc2 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 934ff946dcb..1341be51f6d 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-SNAPSHOT"); + private static Version version = Version.version("2.5.7-rc2"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 58b2963e84f..d009b398c1a 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-SNAPSHOT" +ONOS_VERSION = "2.5.7-rc2" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index c1ea9f26306..1f3abac7858 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-rc2" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc2.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index e126e653bf6..cbdcfac4c22 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 5b7ddfaadae..32f21d5ecdf 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 753860fa868..461d207fe7a 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 7e972427237..e2469ac0069 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index e1af1a5772b..a3b93f21b60 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 36a1a19dbed..f25d0cddf12 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 72ef5dba606..f40bef98bc6 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 1e843e290bb..7ca5a10f7cd 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 076dc5f133b..1b9fb073a1a 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index f37199f78cf..d1680881290 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 12194a2db7c..08c720941ff 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 886039bcef2..2167569cb5c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index cec5d33bf40..17c99ff2a61 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 6e5cf3c14fc..e8605740936 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index f5493f9b7f5..a7bba613966 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index a60599a2cfc..519c2726193 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc2 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index e95985c41de..c8dfd5afa08 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc2 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 78e84f2ad98..5172730638c 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc2" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 984e434078d52aca20c870794532dd23ba99605a Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 10 Mar 2022 21:05:07 +0000 Subject: [PATCH 213/235] Starting snapshot 2.5.7-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 1341be51f6d..934ff946dcb 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-rc2"); + private static Version version = Version.version("2.5.7-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index d009b398c1a..58b2963e84f 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-rc2" +ONOS_VERSION = "2.5.7-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 1f3abac7858..c1ea9f26306 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-rc2" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc2.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index cbdcfac4c22..e126e653bf6 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 32f21d5ecdf..5b7ddfaadae 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 461d207fe7a..753860fa868 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index e2469ac0069..7e972427237 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index a3b93f21b60..e1af1a5772b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index f25d0cddf12..36a1a19dbed 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index f40bef98bc6..72ef5dba606 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 7ca5a10f7cd..1e843e290bb 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 1b9fb073a1a..076dc5f133b 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index d1680881290..f37199f78cf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 08c720941ff..12194a2db7c 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 2167569cb5c..886039bcef2 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 17c99ff2a61..cec5d33bf40 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index e8605740936..6e5cf3c14fc 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a7bba613966..f5493f9b7f5 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 519c2726193..a60599a2cfc 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc2 + 2.5.7-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index c8dfd5afa08..e95985c41de 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc2 + 2.5.7-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 5172730638c..78e84f2ad98 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc2" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 7c92e07b4288d1319eb8fa917bbfd92f8f1d987a Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Tue, 8 Mar 2022 11:09:01 +0100 Subject: [PATCH 214/235] Run maven in batch and quite mode during maven artifacts upload This will give us a much cleaner output in CI. Change-Id: If3182f1baead52673fb137663c95d7ee3d6a8cf5 --- tools/build/onos-maven-upload.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/build/onos-maven-upload.py b/tools/build/onos-maven-upload.py index 9a5494144aa..fb80094330b 100755 --- a/tools/build/onos-maven-upload.py +++ b/tools/build/onos-maven-upload.py @@ -91,7 +91,10 @@ # Upload the artifacts to the remote Nexus repository for artifact_id, info in artifacts_to_upload.items(): artifacts = info["artifacts"] - call_funct = ["mvn", "deploy:deploy-file", + call_funct = ["mvn", + "-B", # Run in batch mode + "-q", # Run in quiet mode, will report only warning or errors + "deploy:deploy-file", "-Durl=" + destination_repo_url, "-DrepositoryId=" + repo_id, "-DgroupId=" + group_id, From b471bd19a7d116e201798509f9bc819664f1ac8d Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Wed, 9 Mar 2022 10:52:32 +0100 Subject: [PATCH 215/235] Add slice meter to upf programmable driver behaviour Also, TC in terminations entities is now required when not dropping. Change-Id: Ia7e371376ca4f61564ba52a1e8c85a0ff76bb202 --- .../net/behaviour/upf/UpfEntityType.java | 5 ++- .../net/behaviour/upf/UpfMeter.java | 39 +++++++++++++++---- .../behaviour/upf/UpfTerminationDownlink.java | 3 ++ .../behaviour/upf/UpfTerminationUplink.java | 3 ++ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java index c5d5590d003..07890f7f33b 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -32,7 +32,10 @@ public enum UpfEntityType { COUNTER("counter"), APPLICATION("application"), SESSION_METER("session_meter"), - APPLICATION_METER("application_meter"); + APPLICATION_METER("application_meter"), + // TODO: slice meter shouldn't be exposed via UpfProgrammable driver behaviour + // we should have dedicated driver behaviour for the slicing functionality. + SLICE_METER("slice_meter"); private final String humanReadableName; diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java index 1a3e79938a2..39302ebe379 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfMeter.java @@ -16,6 +16,7 @@ package org.onosproject.net.behaviour.upf; +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import org.onosproject.net.meter.Band; @@ -29,16 +30,18 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.onosproject.net.behaviour.upf.UpfEntityType.APPLICATION_METER; import static org.onosproject.net.behaviour.upf.UpfEntityType.SESSION_METER; +import static org.onosproject.net.behaviour.upf.UpfEntityType.SLICE_METER; import static org.onosproject.net.meter.Band.Type.MARK_RED; import static org.onosproject.net.meter.Band.Type.MARK_YELLOW; /** - * A structure representing a UPF meter, either for metering session (UE) or - * application traffic. - * UPF meters represent PFCP QER MBR and GBR information. - * UPF meters of type session support only the peak band. + * A structure representing a UPF meter, either for metering session (UE), + * application traffic, or slice traffic. + * UPF meters represent PFCP QER MBR and GBR information and slice maximum rate. + * UPF meters of type session and slice support only the peak band. * UPF meters of type application support both peak and committed bands. */ +@Beta public final class UpfMeter implements UpfEntity { private final int cellId; private final ImmutableMap meterBands; @@ -161,13 +164,24 @@ public static UpfMeter resetApplication(int cellId) { return new UpfMeter(cellId, Maps.newHashMap(), APPLICATION_METER); } + /** + * Return a slice meter with no bands. Used to reset the meter. + * + * @param cellId the meter cell index of this meter + * @return a UpfMeter of type slice with no bands + */ + public static UpfMeter resetSlice(int cellId) { + return new UpfMeter(cellId, Maps.newHashMap(), SLICE_METER); + } + public static Builder builder() { return new Builder(); } /** - * Builder of UpfMeter object. Use {@link #resetApplication(int)} and - * {@link #resetSession(int)} to reset the meter config. + * Builder of UpfMeter object. Use {@link #resetApplication(int)}, + * {@link #resetSession(int)}, or {@link #resetSlice(int)} to reset the + * meter config. */ public static class Builder { private Integer cellId = null; @@ -246,12 +260,23 @@ public Builder setApplication() { return this; } + /** + * Make this meter a slice meter. + * + * @return this builder object + */ + public Builder setSlice() { + this.type = SLICE_METER; + return this; + } + public UpfMeter build() { checkNotNull(type, "A meter type must be assigned"); switch (type) { case SESSION_METER: + case SLICE_METER: checkArgument(!bands.containsKey(MARK_YELLOW), - "Committed band can not be provided for session meter!"); + "Committed band can not be provided for " + type + " meter!"); break; case APPLICATION_METER: checkArgument((bands.containsKey(MARK_YELLOW) && bands.containsKey(MARK_RED)) || bands.isEmpty(), diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java index dd667248ed3..22c25c0749d 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationDownlink.java @@ -297,6 +297,9 @@ public UpfTerminationDownlink build() { applicationId = DEFAULT_APP_ID; } checkNotNull(ctrId, "Counter ID must be provided"); + if (!drop) { + checkNotNull(trafficClass, "Traffic class must be provided"); + } // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationDownlink( this.ueSessionId, this.applicationId, this.ctrId, this.trafficClass, diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java index ddec2e4946f..45848580f86 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfTerminationUplink.java @@ -248,6 +248,9 @@ public UpfTerminationUplink build() { applicationId = DEFAULT_APP_ID; } checkNotNull(ctrId, "Counter ID must be provided"); + if (!dropping) { + checkNotNull(trafficClass, "Traffic class must be provided"); + } // TODO: should we verify that when dropping no other fields are provided return new UpfTerminationUplink( this.ueSessionId, this.applicationId, this.ctrId, From 965aa843d58b076f206d384fc041b72002c2b89b Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 21 Mar 2022 19:15:40 +0100 Subject: [PATCH 216/235] [SDFAB-1100] Fix flow removal logic If the store is already in sync re-issueing a batch request is dangerous (race with conflictual writes) and wrong. In this case, if the device is still reporting the flow, it is enough to send a flow removal directly. Instead, if the flow is expired it is important to update the store accordingly and then issue a flow removal as consequence of the batch request. Change-Id: I11a595e0a91f0efdc1cac3bf1d589a5108f1ae06 --- .../onosproject/net/flow/impl/FlowRuleManager.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index 9bc5abc8ef4..670103b2dfd 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -534,9 +534,8 @@ private boolean handleExistingFlow(FlowEntry flowEntry) { return false; } FlowRuleEvent event = store.addOrUpdateFlowRule(flowEntry); - // Something went wrong or there is no master or - // the device is not available better check if it - // is the latter cases + // Something went wrong or there is no master or the device + // is not available better check if it is the latter cases if (event == null) { log.debug("No flow store event generated for addOrUpdate of {}", flowEntry); return false; @@ -544,7 +543,14 @@ private boolean handleExistingFlow(FlowEntry flowEntry) { log.trace("Flow {} {}", flowEntry, event.type()); post(event); } - } else { + } else if (storedEntry.state() == FlowEntry.FlowEntryState.PENDING_REMOVE) { + // Store is already in sync, let's re-issue flow removal only + log.debug("Removing {} from the device", flowEntry); + FlowRuleProvider frp = getProvider(flowEntry.deviceId()); + frp.removeFlowRule(flowEntry); + } else if (!checkRuleLiveness(flowEntry, storedEntry)) { + // Update store first as the flow entry is expired. Then, + // as consequence of this a flow removal will be sent. log.debug("Removing {}", flowEntry); removeFlowRules(flowEntry); } From 2f427df27d3728531981b94fe8a2f21c72acc557 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 24 Mar 2022 21:33:56 +0000 Subject: [PATCH 217/235] Tagging 2.5.7-rc3 --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 934ff946dcb..9a88e81e83f 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-SNAPSHOT"); + private static Version version = Version.version("2.5.7-rc3"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 58b2963e84f..fa3757cce83 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-SNAPSHOT" +ONOS_VERSION = "2.5.7-rc3" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index c1ea9f26306..ac7fb907b32 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-rc3" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc3.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index e126e653bf6..7ee684ee476 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 5b7ddfaadae..a5d67b7431e 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 753860fa868..cf9f61cb1a9 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 7e972427237..95b093ef5b7 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index e1af1a5772b..59cdcd927fb 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 36a1a19dbed..72a5e04d419 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 72ef5dba606..fcd02380c0d 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 1e843e290bb..7137f4d3a81 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 076dc5f133b..332c11cabba 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index f37199f78cf..a8fc6f4f430 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 12194a2db7c..69fc19dba57 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 886039bcef2..32e35990c9f 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index cec5d33bf40..5afe9c8a513 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 6e5cf3c14fc..9cf78b508d2 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index f5493f9b7f5..b6b5211990d 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index a60599a2cfc..65e152d001c 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7-rc3 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index e95985c41de..c758ba94ed9 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7-rc3 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 78e84f2ad98..8bc3c9f676e 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc3" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 558422bf6c2eca7cf7be7167ab56d217d061560d Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 24 Mar 2022 21:34:03 +0000 Subject: [PATCH 218/235] Starting snapshot 2.5.7-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 9a88e81e83f..934ff946dcb 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-rc3"); + private static Version version = Version.version("2.5.7-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index fa3757cce83..58b2963e84f 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-rc3" +ONOS_VERSION = "2.5.7-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index ac7fb907b32..c1ea9f26306 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-rc3" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc3.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.7-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 7ee684ee476..e126e653bf6 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index a5d67b7431e..5b7ddfaadae 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index cf9f61cb1a9..753860fa868 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 95b093ef5b7..7e972427237 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 59cdcd927fb..e1af1a5772b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 72a5e04d419..36a1a19dbed 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index fcd02380c0d..72ef5dba606 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 7137f4d3a81..1e843e290bb 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 332c11cabba..076dc5f133b 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index a8fc6f4f430..f37199f78cf 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 69fc19dba57..12194a2db7c 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 32e35990c9f..886039bcef2 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index 5afe9c8a513..cec5d33bf40 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 9cf78b508d2..6e5cf3c14fc 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index b6b5211990d..f5493f9b7f5 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 65e152d001c..a60599a2cfc 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-rc3 + 2.5.7-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index c758ba94ed9..e95985c41de 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-rc3 + 2.5.7-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 8bc3c9f676e..78e84f2ad98 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-rc3" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 2adf4457039b9241f499617e9e713e54803d7242 Mon Sep 17 00:00:00 2001 From: pierventre Date: Mon, 21 Mar 2022 22:51:26 +0100 Subject: [PATCH 219/235] [SDFAB-1136] Remove meter mirror There is no valid reason to have it in the p4rtmeterprogrammable: - some devices cannot guarantee r/w symmetry - meters can be only modified - removal is a modify with default values Change-Id: I6d859f2d65195f3e7068390fee5e3a943972cac5 --- .../p4runtime/P4RuntimeMeterProgrammable.java | 46 ++----------------- .../DistributedP4RuntimeMeterMirror.java | 41 ----------------- 2 files changed, 4 insertions(+), 83 deletions(-) delete mode 100644 drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java index 8bb4fc7ad4c..2ebf7b21208 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMeterProgrammable.java @@ -19,8 +19,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Striped; -import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMeterMirror; -import org.onosproject.drivers.p4runtime.mirror.TimedEntry; import org.onosproject.net.DeviceId; import org.onosproject.net.meter.Band; import org.onosproject.net.meter.DefaultMeter; @@ -63,7 +61,6 @@ public class P4RuntimeMeterProgrammable extends AbstractP4RuntimeHandlerBehaviou private static final Striped WRITE_LOCKS = Striped.lock(30); private PiMeterTranslator translator; - private P4RuntimeMeterMirror meterMirror; private PiPipelineModel pipelineModel; @Override @@ -73,7 +70,6 @@ protected boolean setupBehaviour(String opName) { } translator = translationService.meterTranslator(); - meterMirror = handler().get(P4RuntimeMeterMirror.class); pipelineModel = pipeconf.pipelineModel(); return true; } @@ -120,13 +116,10 @@ private boolean processMeterOp(MeterOperation meterOp) { return false; } - WriteRequest request = client.write(p4DeviceId, pipeconf); - appendEntryToWriteRequestOrSkip(request, handle, piMeterCellConfig); + WriteRequest request = client.write(p4DeviceId, pipeconf) + .entity(piMeterCellConfig, UpdateType.MODIFY); if (!request.pendingUpdates().isEmpty()) { result = request.submitSync().isSuccess(); - if (result) { - meterMirror.applyWriteRequest(request); - } } } finally { WRITE_LOCKS.get(deviceId).unlock(); @@ -154,8 +147,6 @@ public CompletableFuture> getMeters() { .filter(piMeterCellConfig -> !piMeterCellConfig.isDefaultConfig()) .collect(Collectors.toList()); - meterMirror.sync(deviceId, piMeterCellConfigs); - if (piMeterCellConfigs.isEmpty()) { return CompletableFuture.completedFuture(Collections.emptyList()); } @@ -179,11 +170,8 @@ public CompletableFuture> getMeters() { // Reset all inconsistent meter cells to the default config if (!inconsistentOrDefaultCells.isEmpty()) { WriteRequest request = client.write(p4DeviceId, pipeconf); - for (PiMeterCellId cellId : inconsistentOrDefaultCells) { - PiMeterCellHandle handle = PiMeterCellHandle.of(deviceId, cellId); - appendEntryToWriteRequestOrSkip(request, handle, PiMeterCellConfig.reset(cellId)); - } - + inconsistentOrDefaultCells.forEach(cellId -> + request.entity(PiMeterCellConfig.reset(cellId), UpdateType.MODIFY)); request.submit().whenComplete((response, ex) -> { if (ex != null) { log.error("Exception resetting inconsistent meter entries", ex); @@ -191,7 +179,6 @@ public CompletableFuture> getMeters() { log.debug("Successfully removed {} out of {} inconsistent meter entries", response.success().size(), response.all().size()); } - response.success().forEach(entity -> meterMirror.remove((PiMeterCellHandle) entity.handle())); }); } @@ -215,7 +202,6 @@ public CompletableFuture> getMeterFeatures() { private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { final Optional> translatedEntity = translator.lookup(handle); - final TimedEntry timedEntry = meterMirror.get(handle); // A meter cell config might not be present in the translation store if it // is default configuration. @@ -239,13 +225,6 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { return null; } - // Big problems in the mirror ? This could happen in case of issues with - // the eventual consistent maps used in the AbstractDistributedP4RuntimeMirror - if (timedEntry == null) { - log.warn("Meter entry handle not found in device mirror: {}", handle); - return null; - } - Meter original = translatedEntity.get().original(); // Forge a meter with MeterCellId, Bands and DeviceId using the original value. DefaultMeter meter = (DefaultMeter) DefaultMeter.builder() @@ -257,23 +236,6 @@ private Meter forgeMeter(PiMeterCellConfig config, PiMeterCellHandle handle) { return meter; } - private boolean appendEntryToWriteRequestOrSkip( - final WriteRequest writeRequest, - final PiMeterCellHandle handle, - PiMeterCellConfig configToModify) { - - final TimedEntry configOnDevice = meterMirror.get(handle); - - if (configOnDevice != null && configOnDevice.entry().equals(configToModify)) { - log.debug("Ignoring re-apply of existing entry: {}", configToModify); - return true; - } - - writeRequest.entity(configToModify, UpdateType.MODIFY); - - return false; - } - /** * Returns true if the given PiMeterCellConfigs are similar enough to be deemed equal * for reconciliation purposes. This is required to handle read/write asymmetry in devices diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java deleted file mode 100644 index 48546fc74bb..00000000000 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeMeterMirror.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.drivers.p4runtime.mirror; - -import org.onosproject.net.pi.runtime.PiEntityType; -import org.onosproject.net.pi.runtime.PiMeterCellConfig; -import org.onosproject.net.pi.runtime.PiMeterCellHandle; -import org.osgi.service.component.annotations.Component; - -/** - * Distributed implementation of a P4Runtime meter mirror. - */ -@Component(immediate = true, service = P4RuntimeMeterMirror.class) -public final class DistributedP4RuntimeMeterMirror - extends AbstractDistributedP4RuntimeMirror - - implements P4RuntimeMeterMirror { - - public DistributedP4RuntimeMeterMirror() { - super(PiEntityType.METER_CELL_CONFIG); - } - - @Override - protected String mapSimpleName() { - return PiEntityType.METER_CELL_CONFIG.name().toLowerCase(); - } -} From 9ac2e32fc1766e98a212007719032f25ee6746d1 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 28 Mar 2022 05:01:21 +0000 Subject: [PATCH 220/235] Tagging 2.5.7 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 934ff946dcb..3899b9bbe85 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7-SNAPSHOT"); + private static Version version = Version.version("2.5.7"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 58b2963e84f..3f07475869e 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7-SNAPSHOT" +ONOS_VERSION = "2.5.7" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index c1ea9f26306..7e8ebd6fc20 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7-SNAPSHOT" +export ONOS_POM_VERSION="2.5.7" export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index e126e653bf6..97aefd90399 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 5b7ddfaadae..9fbae1cf7d2 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 753860fa868..16947d4cae2 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 7e972427237..2ec9c356d12 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index e1af1a5772b..9e23ff564cf 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 36a1a19dbed..e942254ccf9 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 72ef5dba606..1757d4a5858 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 1e843e290bb..078b50be4b7 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 076dc5f133b..28a889a354e 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index f37199f78cf..834ee5d20f3 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 12194a2db7c..e953ff886ea 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 886039bcef2..4b8ce415ffc 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index cec5d33bf40..b669285331a 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 6e5cf3c14fc..fe7c3c7cba4 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index f5493f9b7f5..a2177863f42 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index a60599a2cfc..cc14e1f9f65 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7-SNAPSHOT + 2.5.7 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index e95985c41de..476cdee61fb 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7-SNAPSHOT + 2.5.7 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 78e84f2ad98..c21f27b9377 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 9cb90869220d2047dfa46adf2e3dc37e0ee1384d Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Mon, 28 Mar 2022 05:01:27 +0000 Subject: [PATCH 221/235] Starting snapshot 2.5.8-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 3899b9bbe85..1a90a26e467 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.7"); + private static Version version = Version.version("2.5.8-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 3f07475869e..4b672b43c70 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.7" +ONOS_VERSION = "2.5.8-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 7e8ebd6fc20..4eaf1969faa 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.7" -export ONOS_VERSION=${ONOS_VERSION:-2.5.7.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.8-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.8.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 97aefd90399..58d52160ea7 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 9fbae1cf7d2..aafb8875765 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 16947d4cae2..ddab8f4d059 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 2ec9c356d12..69d71d1e5d5 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 9e23ff564cf..1ce6215d89b 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index e942254ccf9..ad549aeac7d 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 1757d4a5858..fcc93f99649 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index 078b50be4b7..f232c0f6e63 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 28a889a354e..1c68b5876cb 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 834ee5d20f3..3e3969ea9dd 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index e953ff886ea..1d05c9c5d55 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 4b8ce415ffc..a612960505c 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index b669285331a..e228937e7be 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index fe7c3c7cba4..a0ed3fe0d71 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index a2177863f42..ffe7b9ee18d 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index cc14e1f9f65..19dbff09bd8 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.7 + 2.5.8-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 476cdee61fb..c43726db57e 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.7 + 2.5.8-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index c21f27b9377..669cc78ab3c 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.7" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.8-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 3821399aee849c2a6a334fdb16bfa6b5f8f6dcc5 Mon Sep 17 00:00:00 2001 From: Yi Tseng Date: Thu, 17 Mar 2022 16:04:06 -0700 Subject: [PATCH 222/235] [SDFAB-1147] Encode P4Runtime messages with canonical byte string In ONOS, we still use non-canonical byte strings when sending P4Runtime write requests. Ref: https://p4.org/p4-spec/p4runtime/v1.3.0/P4Runtime-Spec.html#sec-bytestrings Change-Id: I27d7977660bea462de82ebe2a4cb5d14500d3b69 --- .../p4runtime/ctl/P4RuntimeGroupTest.java | 5 +- .../ctl/codec/TableEntryEncoderTest.java | 4 +- .../p4runtime/ctl/codec/ActionCodec.java | 9 ++-- .../p4runtime/ctl/codec/FieldMatchCodec.java | 24 ++++++---- .../ctl/codec/PacketMetadataCodec.java | 16 +++++-- .../p4runtime/ctl/codec/Utils.java | 4 +- .../org/onlab/util/ImmutableByteSequence.java | 18 ++++++- .../onlab/util/ImmutableByteSequenceTest.java | 48 +++++++++++++++++++ 8 files changed, 105 insertions(+), 23 deletions(-) diff --git a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java index b7e806b68eb..1ee881b47da 100644 --- a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java +++ b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java @@ -185,7 +185,8 @@ public void testInvalidPiActionProfileMember() { assertEquals(false, response.isSuccess()); assertEquals(1, response.all().size()); - assertEquals("Wrong size for param 'port' of action 'set_egress_port', expected 2 bytes, but found 13", + assertEquals("Wrong size for param 'port' of action 'set_egress_port', " + + "expected no more than 2 bytes, but found 13", response.all().iterator().next().explanation()); } @@ -244,7 +245,7 @@ public void testInsertPiActionMembers() throws Exception { Action.Param param = action.getParamsList().get(0); assertEquals(1, param.getParamId()); byte outPort = (byte) (member.getMemberId() - BASE_MEM_ID); - ByteString bs = ByteString.copyFrom(new byte[]{0, outPort}); + ByteString bs = ByteString.copyFrom(new byte[]{outPort}); assertEquals(bs, param.getValue()); } } diff --git a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/codec/TableEntryEncoderTest.java b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/codec/TableEntryEncoderTest.java index 29f2936ccb2..a5ccecfde0d 100644 --- a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/codec/TableEntryEncoderTest.java +++ b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/codec/TableEntryEncoderTest.java @@ -256,7 +256,7 @@ public void testTableEntryEncoder() throws Exception { // Ternary match. byte[] encodedTernaryMatchValue = tableEntryMsg.getMatch(0).getTernary().getValue().toByteArray(); - assertThat(encodedTernaryMatchValue, is(ethAddr.asArray())); + assertThat(encodedTernaryMatchValue, is(ethAddr.canonical().asArray())); Action actionMsg = tableEntryMsg.getAction().getAction(); @@ -386,7 +386,7 @@ public void testEncodeWithNoAction() throws Exception { // Ternary match. byte[] encodedTernaryMatchValue = tableEntryMsg.getMatch(0).getTernary().getValue().toByteArray(); - assertThat(encodedTernaryMatchValue, is(ethAddr.asArray())); + assertThat(encodedTernaryMatchValue, is(ethAddr.canonical().asArray())); // no action assertThat(tableEntryMsg.hasAction(), is(false)); diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java index daf91f5bf27..cbf112cf865 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java @@ -49,11 +49,14 @@ protected P4RuntimeOuterClass.Action encode( for (PiActionParam p : piAction.parameters()) { final P4InfoOuterClass.Action.Param paramInfo = browser.actionParams(actionId) .getByName(p.id().toString()); - final ByteString paramValue = ByteString.copyFrom(p.value().asReadOnlyBuffer()); - if (!browser.isTypeString(paramInfo.getTypeName())) { + final ByteString paramValue; + if (browser.isTypeString(paramInfo.getTypeName())) { + paramValue = ByteString.copyFrom(p.value().asReadOnlyBuffer()); + } else { + paramValue = ByteString.copyFrom(p.value().canonical().asReadOnlyBuffer()); // Check size only if the param type is not a sdn_string assertSize(format("param '%s' of action '%s'", p.id(), piAction.id()), - paramValue, paramInfo.getBitwidth()); + paramValue, paramInfo.getBitwidth()); } actionMsgBuilder.addParams(P4RuntimeOuterClass.Action.Param.newBuilder() .setParamId(paramInfo.getId()) diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java index 48baa175187..4b8fe500b98 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/FieldMatchCodec.java @@ -74,8 +74,11 @@ public P4RuntimeOuterClass.FieldMatch encode( switch (piFieldMatch.type()) { case EXACT: PiExactFieldMatch fieldMatch = (PiExactFieldMatch) piFieldMatch; - ByteString exactValue = ByteString.copyFrom(fieldMatch.value().asReadOnlyBuffer()); - if (!isSdnString) { + ByteString exactValue; + if (isSdnString) { + exactValue = ByteString.copyFrom(fieldMatch.value().asReadOnlyBuffer()); + } else { + exactValue = ByteString.copyFrom(fieldMatch.value().canonical().asReadOnlyBuffer()); assertSize(VALUE_OF_PREFIX + entityName, exactValue, fieldBitwidth); } return messageBuilder.setExact( @@ -86,8 +89,8 @@ public P4RuntimeOuterClass.FieldMatch encode( .build(); case TERNARY: PiTernaryFieldMatch ternaryMatch = (PiTernaryFieldMatch) piFieldMatch; - ByteString ternaryValue = ByteString.copyFrom(ternaryMatch.value().asReadOnlyBuffer()); - ByteString ternaryMask = ByteString.copyFrom(ternaryMatch.mask().asReadOnlyBuffer()); + ByteString ternaryValue = ByteString.copyFrom(ternaryMatch.value().canonical().asReadOnlyBuffer()); + ByteString ternaryMask = ByteString.copyFrom(ternaryMatch.mask().canonical().asReadOnlyBuffer()); if (isSdnString) { sdnStringUnsupported(entityName, piFieldMatch.type()); } @@ -102,7 +105,7 @@ public P4RuntimeOuterClass.FieldMatch encode( .build(); case LPM: PiLpmFieldMatch lpmMatch = (PiLpmFieldMatch) piFieldMatch; - ByteString lpmValue = ByteString.copyFrom(lpmMatch.value().asReadOnlyBuffer()); + ByteString lpmValue = ByteString.copyFrom(lpmMatch.value().canonical().asReadOnlyBuffer()); int lpmPrefixLen = lpmMatch.prefixLength(); if (isSdnString) { sdnStringUnsupported(entityName, piFieldMatch.type()); @@ -117,8 +120,8 @@ public P4RuntimeOuterClass.FieldMatch encode( .build(); case RANGE: PiRangeFieldMatch rangeMatch = (PiRangeFieldMatch) piFieldMatch; - ByteString rangeHighValue = ByteString.copyFrom(rangeMatch.highValue().asReadOnlyBuffer()); - ByteString rangeLowValue = ByteString.copyFrom(rangeMatch.lowValue().asReadOnlyBuffer()); + ByteString rangeHighValue = ByteString.copyFrom(rangeMatch.highValue().canonical().asReadOnlyBuffer()); + ByteString rangeLowValue = ByteString.copyFrom(rangeMatch.lowValue().canonical().asReadOnlyBuffer()); if (isSdnString) { sdnStringUnsupported(entityName, piFieldMatch.type()); } @@ -132,8 +135,11 @@ public P4RuntimeOuterClass.FieldMatch encode( .build(); case OPTIONAL: PiOptionalFieldMatch optionalMatch = (PiOptionalFieldMatch) piFieldMatch; - ByteString optionalValue = ByteString.copyFrom(optionalMatch.value().asReadOnlyBuffer()); - if (!isSdnString) { + ByteString optionalValue; + if (isSdnString) { + optionalValue = ByteString.copyFrom(optionalMatch.value().asReadOnlyBuffer()); + } else { + optionalValue = ByteString.copyFrom(optionalMatch.value().canonical().asReadOnlyBuffer()); assertSize(VALUE_OF_PREFIX + entityName, optionalValue, fieldBitwidth); } return messageBuilder.setOptional( diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java index ab29e626968..24aa00e522d 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/PacketMetadataCodec.java @@ -25,6 +25,8 @@ import p4.config.v1.P4InfoOuterClass; import p4.v1.P4RuntimeOuterClass; +import java.nio.ByteBuffer; + import static org.onlab.util.ImmutableByteSequence.copyAndFit; import static org.onlab.util.ImmutableByteSequence.copyFrom; @@ -41,12 +43,18 @@ protected P4RuntimeOuterClass.PacketMetadata encode( PiPacketMetadata piEntity, P4InfoOuterClass.Preamble ctrlPktMetaPreamble, PiPipeconf pipeconf, P4InfoBrowser browser) throws P4InfoBrowser.NotFoundException { - final int metadataId = browser + P4InfoOuterClass.ControllerPacketMetadata.Metadata packetMetadata = browser .packetMetadatas(ctrlPktMetaPreamble.getId()) - .getByName(piEntity.id().id()).getId(); + .getByName(piEntity.id().id()); + final ByteBuffer value; + if (browser.isTypeString(packetMetadata.getTypeName())) { + value = piEntity.value().asReadOnlyBuffer(); + } else { + value = piEntity.value().canonical().asReadOnlyBuffer(); + } return P4RuntimeOuterClass.PacketMetadata.newBuilder() - .setMetadataId(metadataId) - .setValue(ByteString.copyFrom(piEntity.value().asReadOnlyBuffer())) + .setMetadataId(packetMetadata.getId()) + .setValue(ByteString.copyFrom(value)) .build(); } diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java index 2895b83565a..af1c1596c79 100644 --- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java +++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/Utils.java @@ -34,9 +34,9 @@ static void assertSize(String entityDescr, ByteString value, int bitWidth) throws CodecException { int byteWidth = (int) Math.ceil((float) bitWidth / 8); - if (value.size() != byteWidth) { + if (value.size() > byteWidth) { throw new CodecException(format( - "Wrong size for %s, expected %d bytes, but found %d", + "Wrong size for %s, expected no more than %d bytes, but found %d", entityDescr, byteWidth, value.size())); } } diff --git a/utils/misc/src/main/java/org/onlab/util/ImmutableByteSequence.java b/utils/misc/src/main/java/org/onlab/util/ImmutableByteSequence.java index 32e9d0b406a..41c6ba5da8d 100644 --- a/utils/misc/src/main/java/org/onlab/util/ImmutableByteSequence.java +++ b/utils/misc/src/main/java/org/onlab/util/ImmutableByteSequence.java @@ -326,7 +326,7 @@ public ByteBuffer asReadOnlyBuffer() { * @return an integer value */ public int size() { - return this.value.capacity(); + return this.value.limit() - this.value.position(); } /** @@ -546,6 +546,22 @@ private static ImmutableByteSequence doFit(ImmutableByteSequence original, return new ImmutableByteSequence(newBuffer); } + /** + * Returns a new ImmutableByteSequence with same content as this one, but with leading zero bytes stripped. + * + * @return new ImmutableByteSequence + */ + public ImmutableByteSequence canonical() { + ByteBuffer newByteBuffer = this.value.duplicate(); + ImmutableByteSequence canonicalBs = new ImmutableByteSequence(newByteBuffer); + canonicalBs.value.rewind(); + while (canonicalBs.value.hasRemaining() && canonicalBs.value.get() == 0) { + // Make style check happy + } + canonicalBs.value.position(canonicalBs.value.position() - 1); + return canonicalBs; + } + /** * Signals a trim exception during byte sequence creation. */ diff --git a/utils/misc/src/test/java/org/onlab/util/ImmutableByteSequenceTest.java b/utils/misc/src/test/java/org/onlab/util/ImmutableByteSequenceTest.java index c83c6b2d355..f9c2a0ba538 100644 --- a/utils/misc/src/test/java/org/onlab/util/ImmutableByteSequenceTest.java +++ b/utils/misc/src/test/java/org/onlab/util/ImmutableByteSequenceTest.java @@ -376,4 +376,52 @@ public void testBitwiseOperations() { assertThat("Invalid bitwise XOR result", xorBs.asReadOnlyBuffer().getLong(), is(long1 ^ long2)); } + + @Test + public void testCanonical() { + ImmutableByteSequence bs = ImmutableByteSequence.copyFrom(0x000000ff); + ImmutableByteSequence canonicalBs = bs.canonical(); + assertThat("Incorrect size", canonicalBs.size(), is(1)); + ByteBuffer bb = canonicalBs.asReadOnlyBuffer(); + assertThat("Incorrect byte buffer position", bb.position(), is(3)); + + bs = ImmutableByteSequence.copyFrom(0x100000ff); + canonicalBs = bs.canonical(); + assertThat("Incorrect size", canonicalBs.size(), is(4)); + bb = canonicalBs.asReadOnlyBuffer(); + assertThat("Incorrect byte buffer position", bb.position(), is(0)); + + bs = ImmutableByteSequence.copyFrom(0x00000000ff0000ffL); + canonicalBs = bs.canonical(); + assertThat("Incorrect size", canonicalBs.size(), is(4)); + bb = canonicalBs.asReadOnlyBuffer(); + assertThat("Incorrect byte buffer position", bb.position(), is(4)); + + bs = ImmutableByteSequence.copyFrom(0); + canonicalBs = bs.canonical(); + assertThat("Incorrect size", canonicalBs.size(), is(1)); + bb = canonicalBs.asReadOnlyBuffer(); + assertThat("Incorrect byte buffer position", bb.position(), is(3)); + + bs = ImmutableByteSequence.copyFrom(0L); + canonicalBs = bs.canonical(); + assertThat("Incorrect size", canonicalBs.size(), is(1)); + bb = canonicalBs.asReadOnlyBuffer(); + assertThat("Incorrect byte buffer position", bb.position(), is(7)); + + new EqualsTester() + .addEqualityGroup( + ImmutableByteSequence.copyFrom(0x000000ff).canonical(), + ImmutableByteSequence.copyFrom((short) 0x00ff).canonical()) + .addEqualityGroup( + ImmutableByteSequence.copyFrom(0x000001ff).canonical(), + ImmutableByteSequence.copyFrom(0x00000000000001ffL).canonical()) + .addEqualityGroup( + ImmutableByteSequence.copyFrom(0xc00001ff).canonical(), + ImmutableByteSequence.copyFrom(0x00000000c00001ffL).canonical()) + .addEqualityGroup( + ImmutableByteSequence.copyFrom(0).canonical(), + ImmutableByteSequence.copyFrom(0L).canonical()) + .testEquals(); + } } From 07af21d9e116414b74152dc812cc980ca2c4c0a5 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 18 Mar 2022 10:31:04 +0100 Subject: [PATCH 223/235] [SDFAB-1100] In-order flowrule processing Extends the FlowRuleService and its api by adding in-order processing capabilities. This is achieved by introducing stripe key as way to indicate how to process the flowrules. Key is an object which is used to select a specific executor. Operations having the same key is guaranteed that will be processed by the same executor. Change-Id: I5ab4d42e8a2b8cb869f3dc2305dbc5084d31f08b --- .../net/flow/FlowRuleOperations.java | 44 ++++- .../onosproject/net/flow/FlowRuleService.java | 29 +++ .../net/flow/impl/FlowRuleManager.java | 171 +++++++++++++++--- 3 files changed, 219 insertions(+), 25 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java index 9c0f522ea8a..14af90d543b 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java @@ -24,7 +24,9 @@ import java.util.Set; import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.net.flow.FlowRuleOperation.Type.*; +import static org.onosproject.net.flow.FlowRuleOperation.Type.ADD; +import static org.onosproject.net.flow.FlowRuleOperation.Type.REMOVE; +import static org.onosproject.net.flow.FlowRuleOperation.Type.MODIFY; /** * A batch of flow rule operations that are broken into stages. @@ -34,17 +36,21 @@ public class FlowRuleOperations { private final List> stages; private final FlowRuleOperationsContext callback; + private final Integer stripeKey; private FlowRuleOperations(List> stages, - FlowRuleOperationsContext cb) { + FlowRuleOperationsContext cb, + Integer stripeKey) { this.stages = stages; this.callback = cb; + this.stripeKey = stripeKey; } // kryo-constructor protected FlowRuleOperations() { this.stages = Lists.newArrayList(); this.callback = null; + this.stripeKey = null; } /** @@ -66,6 +72,18 @@ public FlowRuleOperationsContext callback() { return callback; } + /** + * Returns the stripe key. Expectation is that FlowRuleOperations with the + * same key will be executed sequentially in the same order as they are + * submitted to the FlowRuleService. Operations without a key or with + * different keys might be executed in parallel. + * + * @return the stripe key associated to this or null if not present + */ + public Integer stripeKey() { + return stripeKey; + } + /** * Returns a new builder. * @@ -89,6 +107,7 @@ public static final class Builder { private final ImmutableList.Builder> listBuilder = ImmutableList.builder(); private ImmutableSet.Builder currentStage = ImmutableSet.builder(); + private Integer stripeKey = null; // prevent use of the default constructor outside of this file; use the above method private Builder() {} @@ -159,6 +178,25 @@ public Builder newStage() { return this; } + /** + * Provides semantics similar to lock striping. FlowRuleOperations + * with the same key will be executed sequentially. Operations without + * a key or with different keys might be executed in parallel. + *

+ * This parameter is useful to correlate different operations with + * potentially conflicting writes, to guarantee that operations are + * executed in-order. For example, to handle the case where one operation + * that removes a flow rule is followed by one that adds the same flow rule. + *

+ * + * @param stripeKey an integer key + * @return this + */ + public Builder striped(int stripeKey) { + this.stripeKey = stripeKey; + return this; + } + /** * Builds the immutable flow rule operations. * @@ -178,7 +216,7 @@ public FlowRuleOperations build(FlowRuleOperationsContext cb) { checkNotNull(cb); closeStage(); - return new FlowRuleOperations(listBuilder.build(), cb); + return new FlowRuleOperations(listBuilder.build(), cb, stripeKey); } } } diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java index 9cada037540..807d09eef1d 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java @@ -196,4 +196,33 @@ default void purgeFlowRules(DeviceId deviceId, ApplicationId appId) { default long getActiveFlowRuleCount(DeviceId deviceId) { return 0; } + + /** + * Applies the specified flow rules onto their respective devices. Similar + * to {@link FlowRuleService#applyFlowRules(FlowRule...)} but expectation is + * that flow rules applied by subsequent calls using the same key will be + * executed sequentially. Flow rules applied through {@link FlowRuleService#applyFlowRules(FlowRule...)} + * might be executed in parallel. + * + * @param stripeKey an integer key + * @param flowRules one or more flow rules + */ + default void applyFlowRules(int stripeKey, FlowRule... flowRules) { + + } + + /** + * Removes the specified flow rules from their respective devices. Similar + * to {@link FlowRuleService#removeFlowRules(FlowRule...)} but expectation is + * that flow rules removed by subsequent calls using the same key will be + * executed sequentially. Flow rules applied through {@link FlowRuleService#removeFlowRules(FlowRule...)} + * might be executed in parallel. + * + * @param stripeKey an integer key + * @param flowRules one or more flow rules + */ + default void removeFlowRules(int stripeKey, FlowRule... flowRules) { + + } + } diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index 670103b2dfd..e7cd691d97e 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -21,6 +21,8 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import org.onlab.util.PredictableExecutor; +import org.onlab.util.PredictableExecutor.PickyRunnable; import org.onlab.util.Tools; import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; @@ -143,11 +145,11 @@ public class FlowRuleManager private final FlowRuleDriverProvider driverProvider = new FlowRuleDriverProvider(); - protected ExecutorService deviceInstallers = - Executors.newFixedThreadPool(32, groupedThreads("onos/flowservice", "device-installer-%d", log)); + protected ExecutorService deviceInstallers = Executors.newFixedThreadPool(32, + groupedThreads("onos/flowservice", "device-installer-%d", log)); - protected ExecutorService operationsService = - Executors.newFixedThreadPool(32, groupedThreads("onos/flowservice", "operations-%d", log)); + protected ExecutorService operationsService = new PredictableExecutor(32, + groupedThreads("onos/flowservice", "operations-%d", log)); private IdGenerator idGenerator; @@ -267,7 +269,7 @@ private void readComponentConfiguration(ComponentContext context) { log.info("Configured. FallbackFlowPollFrequency is {} seconds", fallbackFlowPollFrequency); } catch (NumberFormatException e) { - log.warn("Configured fallbackFlowPollFrequency value '{}' " + + log.warn("Configured fallbackFlowPollFrequency value " + "is not a number, using current value of {} seconds", fallbackFlowPollFrequency); } @@ -312,11 +314,7 @@ public Iterable getFlowEntries(DeviceId deviceId) { public void applyFlowRules(FlowRule... flowRules) { checkPermission(FLOWRULE_WRITE); - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - for (FlowRule flowRule : flowRules) { - builder.add(flowRule); - } - apply(builder.build()); + apply(buildFlowRuleOperations(true, null, flowRules)); } @Override @@ -339,11 +337,7 @@ public void purgeFlowRules(DeviceId deviceId, ApplicationId appId) { public void removeFlowRules(FlowRule... flowRules) { checkPermission(FLOWRULE_WRITE); - FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); - for (FlowRule flowRule : flowRules) { - builder.remove(flowRule); - } - apply(builder.build()); + apply(buildFlowRuleOperations(false, null, flowRules)); } @Override @@ -395,7 +389,26 @@ public Iterable getFlowRulesByGroupId(ApplicationId appId, short group @Override public void apply(FlowRuleOperations ops) { checkPermission(FLOWRULE_WRITE); - operationsService.execute(new FlowOperationsProcessor(ops)); + if (ops.stripeKey() == null) { + // Null means that we don't care about the in-order processing + // this approach maximizes the throughput but it can introduce + // consistency issues as the original order between conflictual + // writes is not maintained. If conflictual writes can be easily + // handled using different stages, this is the approach to use. + operationsService.execute(new FlowOperationsProcessor(ops)); + } else { + // Following approach is suggested when it is hard to handle + // conflictual writes in the same FlowRuleOperations object. Apps + // may know there are conflictual writes but it could be hard to + // encapsulate them in the same object using different stages (above + // all if they are stimulated by different events). In this case, + // the probabilistic accumulation may help but it is brittle and based + // on the probability that a given event happens in a specific time. + // For this reason we have introduced PredictableFlowOperationsProcessor + // which uses the striped key (provided by the apps) to serialize the ops + // on the same executor. + operationsService.execute(new PredictableFlowOperationsProcessor(ops)); + } } @Override @@ -793,12 +806,12 @@ private static FlowRuleBatchEntry.FlowRuleOperation mapOperationType(FlowRuleOpe private class FlowOperationsProcessor implements Runnable { // Immutable - private final FlowRuleOperations fops; + protected final FlowRuleOperations fops; // Mutable - private final List> stages; - private final Set pendingDevices = new HashSet<>(); - private boolean hasFailed = false; + protected final List> stages; + protected final Set pendingDevices = new HashSet<>(); + protected boolean hasFailed = false; FlowOperationsProcessor(FlowRuleOperations ops) { this.stages = Lists.newArrayList(ops.stages()); @@ -814,7 +827,7 @@ public synchronized void run() { } } - private void process(Set ops) { + protected void process(Set ops) { Multimap perDeviceBatches = ArrayListMultimap.create(); for (FlowRuleOperation op : ops) { @@ -853,6 +866,91 @@ synchronized void fail(DeviceId devId, Set failures) { } } + // Provides in-order processing in the local instance. The main difference with its + // ancestor is that the runnable ends when all the stages have been processed. Instead, + // its ancestor ends as soon as one stage has been processed and cannot guarantee in-order + // processing between subsequent stages and a new FlowRuleOperation (having the same key). + private class PredictableFlowOperationsProcessor extends FlowOperationsProcessor implements PickyRunnable { + + private static final int WAIT_TIMEOUT = 5000; + private static final int WAIT_ATTEMPTS = 3; + + PredictableFlowOperationsProcessor(FlowRuleOperations ops) { + super(ops); + } + + @Override + public void run() { + try { + while (!stages.isEmpty()) { + process(stages.remove(0)); + synchronized (this) { + // Batch in flights - let's wait + int attempts = 0; + while (!pendingDevices.isEmpty() && attempts < WAIT_ATTEMPTS) { + this.wait(WAIT_TIMEOUT); + attempts++; + } + // Something wrong, we cannot block all the pipeline + if (attempts == WAIT_ATTEMPTS) { + break; + } + } + } + } catch (InterruptedException e) { + // Interrupted case + if (log.isTraceEnabled()) { + log.trace("Interrupted while waiting for {} stages to be completed", + stages.size()); + } + } + + synchronized (this) { + if (stages.isEmpty() && !hasFailed && pendingDevices.isEmpty()) { + // No error and it is done, signal success to the apps + fops.callback().onSuccess(fops); + } else { + // It was interrupted or there is a failure - signal error. + // This may introduce a duplicate error in some cases but + // better than nothing and keeping the apps blocked forever. + FlowRuleOperations.Builder failedOpsBuilder = FlowRuleOperations.builder(); + if (!stages.isEmpty()) { + stages.remove(0).forEach(flowRuleOperation -> failedOpsBuilder.add( + flowRuleOperation.rule())); + } + fops.callback().onError(failedOpsBuilder.build()); + } + } + } + + @Override + synchronized void satisfy(DeviceId devId) { + pendingDevices.remove(devId); + if (pendingDevices.isEmpty()) { + this.notifyAll(); + } + } + + @Override + synchronized void fail(DeviceId devId, Set failures) { + hasFailed = true; + pendingDevices.remove(devId); + if (pendingDevices.isEmpty()) { + this.notifyAll(); + } + + FlowRuleOperations.Builder failedOpsBuilder = FlowRuleOperations.builder(); + failures.forEach(failedOpsBuilder::add); + + fops.callback().onError(failedOpsBuilder.build()); + } + + @Override + public int hint() { + return fops.stripeKey(); + } + } + @Override public Iterable getFlowTableStatistics(DeviceId deviceId) { checkPermission(FLOWRULE_READ); @@ -866,6 +964,35 @@ public long getActiveFlowRuleCount(DeviceId deviceId) { return store.getActiveFlowRuleCount(deviceId); } + @Override + public void applyFlowRules(int key, FlowRule... flowRules) { + checkPermission(FLOWRULE_WRITE); + + apply(buildFlowRuleOperations(true, key, flowRules)); + } + + @Override + public void removeFlowRules(int key, FlowRule... flowRules) { + checkPermission(FLOWRULE_WRITE); + + apply(buildFlowRuleOperations(false, key, flowRules)); + } + + private FlowRuleOperations buildFlowRuleOperations(boolean add, Integer key, FlowRule... flowRules) { + FlowRuleOperations.Builder builder = FlowRuleOperations.builder(); + for (FlowRule flowRule : flowRules) { + if (add) { + builder.add(flowRule); + } else { + builder.remove(flowRule); + } + } + if (key != null) { + builder.striped(key); + } + return builder.build(); + } + private class InternalDeviceListener implements DeviceListener { @Override public void event(DeviceEvent event) { @@ -875,7 +1002,7 @@ public void event(DeviceEvent event) { DeviceId deviceId = event.subject().id(); if (!deviceService.isAvailable(deviceId)) { BasicDeviceConfig cfg = netCfgService.getConfig(deviceId, BasicDeviceConfig.class); - //if purgeOnDisconnection is set for the device or it's a global configuration + // if purgeOnDisconnection is set for the device or it's a global configuration // lets remove the flows. Priority is given to the per device flag boolean purge = cfg != null && cfg.isPurgeOnDisconnectionConfigured() ? cfg.purgeOnDisconnection() : purgeOnDisconnection; From 55c6f33f41e42758d2b4da7f926f18796b2e02dc Mon Sep 17 00:00:00 2001 From: pierventre Date: Tue, 29 Mar 2022 15:10:39 +0200 Subject: [PATCH 224/235] Update FlowRuleOperations API stripeKey now exposes an Optional instead of an Integer Change-Id: I9a13fcea85ba3e0b52c004ece5a47fc50e99c9d6 --- .../java/org/onosproject/net/flow/FlowRuleOperations.java | 5 +++-- .../org/onosproject/net/flow/impl/FlowRuleManager.java | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java index 14af90d543b..ef41ca7358b 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java +++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java @@ -21,6 +21,7 @@ import com.google.common.collect.Lists; import java.util.List; +import java.util.Optional; import java.util.Set; import static com.google.common.base.Preconditions.checkNotNull; @@ -80,8 +81,8 @@ public FlowRuleOperationsContext callback() { * * @return the stripe key associated to this or null if not present */ - public Integer stripeKey() { - return stripeKey; + public Optional stripeKey() { + return Optional.ofNullable(stripeKey); } /** diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java index e7cd691d97e..d25ceaba337 100644 --- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java +++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java @@ -78,6 +78,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Random; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -157,6 +158,8 @@ public class FlowRuleManager private NodeId local; + private Random randomGenerator = new Random(); + @Reference(cardinality = ReferenceCardinality.MANDATORY) protected FlowRuleStore store; @@ -389,7 +392,7 @@ public Iterable getFlowRulesByGroupId(ApplicationId appId, short group @Override public void apply(FlowRuleOperations ops) { checkPermission(FLOWRULE_WRITE); - if (ops.stripeKey() == null) { + if (ops.stripeKey().isEmpty()) { // Null means that we don't care about the in-order processing // this approach maximizes the throughput but it can introduce // consistency issues as the original order between conflictual @@ -947,7 +950,7 @@ synchronized void fail(DeviceId devId, Set failures) { @Override public int hint() { - return fops.stripeKey(); + return fops.stripeKey().orElse(randomGenerator.nextInt()); } } From 9f820659064984ca898ffd40083a1a4944097897 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Wed, 27 Apr 2022 13:24:34 +0200 Subject: [PATCH 225/235] [ONOS-8157] Adding port disable during periodic checkeker for device disconnections. Change-Id: Ie44f2c485446e29ef4c39198e8bfe8461bd13c93 --- .../net/device/impl/DeviceManager.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index be114c41383..fbbb15db9ce 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -542,6 +542,12 @@ private void mastershipCheck() { if (updateMastershipFor(deviceId) == null && myRole == MASTER && isAvailable(deviceId)) { log.info("Local Role {}, Marking unreachable device {} offline", MASTER, deviceId); + // Following the deviceDisconnected method logic (line 734) we are marking also all the + // ports as disabled. + List descs = store.getPortDescriptions(getProvider(deviceId).id(), deviceId) + .map(desc -> ensurePortEnabledState(desc, false)) + .collect(Collectors.toList()); + store.updatePorts(getProvider(deviceId).id(), deviceId, descs); post(store.markOffline(deviceId)); } } else { @@ -563,6 +569,12 @@ private void mastershipCheck() { term != null && localNodeId.equals(term.master()) && isAvailable(deviceId)) { log.info("Marking unreachable device {} offline", deviceId); + // Following the deviceDisconnected method logic (line 734) we are marking also all the + // ports as disabled. + List descs = store.getPortDescriptions(getProvider(deviceId).id(), deviceId) + .map(desc -> ensurePortEnabledState(desc, false)) + .collect(Collectors.toList()); + store.updatePorts(getProvider(deviceId).id(), deviceId, descs); post(store.markOffline(deviceId)); } } @@ -628,6 +640,15 @@ private void roleCheck() { } } + PortDescription ensurePortEnabledState(PortDescription desc, boolean enabled) { + if (desc.isEnabled() != enabled) { + return DefaultPortDescription.builder(desc) + .isEnabled(enabled) + .build(); + } + return desc; + } + // Personalized device provider service issued to the supplied provider. private class InternalDeviceProviderService extends AbstractProviderService @@ -712,15 +733,6 @@ public void deviceConnected(DeviceId deviceId, } } - private PortDescription ensurePortEnabledState(PortDescription desc, boolean enabled) { - if (desc.isEnabled() != enabled) { - return DefaultPortDescription.builder(desc) - .isEnabled(enabled) - .build(); - } - return desc; - } - @Override public void deviceDisconnected(DeviceId deviceId) { checkNotNull(deviceId, DEVICE_ID_NULL); From db0e125ac2515dbb711efdeebc3948b28e9e392b Mon Sep 17 00:00:00 2001 From: Daniele Moro Date: Thu, 28 Apr 2022 19:37:32 +0200 Subject: [PATCH 226/235] [SDFAB-1177] Separate ingress and egress UpfCounter Change-Id: I957754bc3f12d2e8f6d9d5748bb0b8c2b01a924c --- .../net/behaviour/upf/UpfCounter.java | 176 +++++++++++++----- .../net/behaviour/upf/UpfDevice.java | 23 ++- .../net/behaviour/upf/UpfEntityType.java | 2 + 3 files changed, 150 insertions(+), 51 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java index eb41a04cdd2..c3950097050 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfCounter.java @@ -16,34 +16,40 @@ package org.onosproject.net.behaviour.upf; - import com.google.common.annotations.Beta; import java.util.Objects; +import java.util.Optional; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.net.behaviour.upf.UpfEntityType.COUNTER; +import static org.onosproject.net.behaviour.upf.UpfEntityType.EGRESS_COUNTER; +import static org.onosproject.net.behaviour.upf.UpfEntityType.INGRESS_COUNTER; /** - * A structure for compactly passing UPF counter values for a given counter ID. - * Contains four counts: Ingress Packets, Ingress Bytes, Egress Packets, Egress Bytes. - * UpfCounter can be used ONLY on {@code apply} and {@code readAll} calls in the - * {@link UpfDevice} interface. + * A structure for compactly passing UPF counter (ingress, egress or both) values + * for a given counter ID. Contains four counts: Ingress Packets, Ingress Bytes, + * Egress Packets, Egress Bytes. UpfCounter can be used ONLY on {@code apply} + * and {@code readAll} calls in the {@link UpfDevice} interface. */ @Beta public final class UpfCounter implements UpfEntity { private final int cellId; - private final long ingressPkts; - private final long ingressBytes; - private final long egressPkts; - private final long egressBytes; + private final Long ingressPkts; + private final Long ingressBytes; + private final Long egressPkts; + private final Long egressBytes; + private final UpfEntityType type; - private UpfCounter(int cellId, long ingressPkts, long ingressBytes, - long egressPkts, long egressBytes) { + private UpfCounter(int cellId, Long ingressPkts, Long ingressBytes, + Long egressPkts, Long egressBytes, UpfEntityType type) { this.cellId = cellId; this.ingressPkts = ingressPkts; this.ingressBytes = ingressBytes; this.egressPkts = egressPkts; this.egressBytes = egressBytes; + this.type = type; } public static Builder builder() { @@ -52,8 +58,19 @@ public static Builder builder() { @Override public String toString() { - return String.format("UpfStats(cell_id=%d, ingress=(%dpkts,%dbytes), egress=(%dpkts,%dbytes))", - cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); + switch (this.type) { + case COUNTER: + return String.format("UpfStats(cell_id=%d, ingress=(%dpkts,%dbytes), egress=(%dpkts,%dbytes))", + cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); + case INGRESS_COUNTER: + return String.format("UpfIngressCounter(cell_id=%d, packets=%d, bytes=%d))", + cellId, ingressPkts, ingressBytes); + case EGRESS_COUNTER: + return String.format("UpfEgressCounter(cell_id=%d, packets=%d, bytes=%d))", + cellId, egressPkts, egressBytes); + default: + throw new IllegalStateException("I should never reach this point!"); + } } @Override @@ -68,7 +85,7 @@ public boolean equals(Object object) { return false; } UpfCounter that = (UpfCounter) object; - return this.cellId == that.cellId; + return this.cellId == that.cellId && this.type == that.type; } /** @@ -80,16 +97,15 @@ public boolean equals(Object object) { */ public boolean exactlyEquals(UpfCounter that) { return this.equals(that) && - this.ingressPkts == that.ingressPkts && - this.ingressBytes == that.ingressBytes && - this.egressPkts == that.egressPkts && - this.egressBytes == that.egressBytes; + (this.ingressPkts == that.ingressPkts || this.ingressPkts.equals(that.ingressPkts)) && + (this.ingressBytes == that.ingressBytes || this.ingressBytes.equals(that.ingressBytes)) && + (this.egressPkts == that.egressPkts || this.egressPkts.equals(that.egressPkts)) && + (this.egressBytes == that.egressBytes || this.egressBytes.equals(that.egressBytes)); } - @Override public int hashCode() { - return Objects.hash(cellId); + return Objects.hash(cellId, type); } /** @@ -103,57 +119,91 @@ public int getCellId() { /** * Get the number of packets that hit this counter in the dataplane ingress pipeline. + * Return a value only if the counter is of type {@code UpfEntityType.COUNTER} + * or {@code UpfEntityType.INGRESS_COUNTER}, otherwise an empty Optional. * - * @return ingress packet count + * @return ingress packet count or empty if this is of type {@code UpfEntityType.EGRESS_COUNTER} */ - public long getIngressPkts() { - return ingressPkts; + public Optional getIngressPkts() { + return Optional.ofNullable(ingressPkts); } /** * Get the number of packets that hit this counter in the dataplane egress pipeline. + * Return a value only if the counter is of type {@code UpfEntityType.COUNTER} + * or {@code UpfEntityType.EGRESS_COUNTER}, otherwise an empty Optional. * - * @return egress packet count + * @return egress packet count or empty if this is of type {@code UpfEntityType.INGRESS_COUNTER} */ - public long getEgressPkts() { - return egressPkts; + public Optional getEgressPkts() { + return Optional.ofNullable(egressPkts); } /** * Get the number of packet bytes that hit this counter in the dataplane ingress pipeline. + * Return value only if the counter is of type {{@code UpfEntityType.COUNTER} + * or {@code UpfEntityType.INGRESS_COUNTER}, otherwise an empty Optional. * - * @return ingress byte count + * @return ingress byte count or empty if this is of type {@code UpfEntityType.EGRESS_COUNTER} */ - public long getIngressBytes() { - return ingressBytes; + public Optional getIngressBytes() { + return Optional.ofNullable(ingressBytes); } /** * Get the number of packet bytes that hit this counter in the dataplane egress pipeline. + * Return a value only if the counter is of type {@code UpfEntityType.COUNTER} + * or {@code UpfEntityType.EGRESS_COUNTER}, otherwise an empty Optional. * - * @return egress byte count + * @return egress byte count or empty if this is of type {@code UpfEntityType.INGRESS_COUNTER} */ - public long getEgressBytes() { - return egressBytes; + public Optional getEgressBytes() { + return Optional.ofNullable(egressBytes); } @Override public UpfEntityType type() { - return UpfEntityType.COUNTER; + return type; + } + + /** + * Sum the content of the given UpfCounter to the counter values contained + * in this instance. + * + * @param that The UpfCounter to sum to this instance + * @return a new UpfCounter instance with sum counters. + * @throws IllegalArgumentException if the given UpfCounter is not referring + * to the same type and id as this + */ + public UpfCounter sum(UpfCounter that) throws IllegalArgumentException { + if (!this.equals(that)) { + throw new IllegalArgumentException( + "The given UpfCounter is not of the same type or refers to a different index"); + } + UpfCounter.Builder builder = UpfCounter.builder().withCellId(this.getCellId()); + if (this.type.equals(UpfEntityType.COUNTER) || this.type.equals(UpfEntityType.INGRESS_COUNTER)) { + builder.setIngress(this.ingressPkts + that.ingressPkts, + this.ingressBytes + that.ingressBytes); + } + if (this.type.equals(UpfEntityType.COUNTER) || this.type.equals(UpfEntityType.EGRESS_COUNTER)) { + builder.setEgress(this.egressPkts + that.egressPkts, + this.egressBytes + that.egressBytes); + } + return builder.build(); } + /** + * Builder for UpfCounter. + */ public static class Builder { private Integer cellId; - private long ingressPkts; - private long ingressBytes; - private long egressPkts; - private long egressBytes; + private Long ingressPkts; + private Long ingressBytes; + private Long egressPkts; + private Long egressBytes; + private UpfEntityType type = COUNTER; public Builder() { - this.ingressPkts = 0; - this.ingressBytes = 0; - this.egressPkts = 0; - this.egressBytes = 0; } /** @@ -193,9 +243,51 @@ public Builder setEgress(long egressPkts, long egressBytes) { return this; } + /** + * Set the counter as ingress only counter. + * + * @return This builder + */ + public Builder isIngressCounter() { + this.type = INGRESS_COUNTER; + return this; + } + + /** + * Set the counter as egress only counter. + * + * @return This builder + */ + public Builder isEgressCounter() { + this.type = EGRESS_COUNTER; + return this; + } + public UpfCounter build() { checkNotNull(cellId, "CellID must be provided"); - return new UpfCounter(cellId, ingressPkts, ingressBytes, egressPkts, egressBytes); + switch (type) { + case INGRESS_COUNTER: + checkArgument(this.ingressBytes != null && this.ingressPkts != null, + "Ingress counter values must be provided"); + this.egressBytes = null; + this.egressPkts = null; + break; + case EGRESS_COUNTER: + checkArgument(this.egressBytes != null && this.egressPkts != null, + "Egress counter values must be provided"); + this.ingressBytes = null; + this.ingressPkts = null; + break; + case COUNTER: + checkArgument(this.ingressBytes != null && this.ingressPkts != null && + this.egressBytes != null && this.egressPkts != null, + "Ingress and egress counter values must be provided"); + break; + default: + // I should never reach this point + throw new IllegalArgumentException("I should never reach this point!"); + } + return new UpfCounter(cellId, ingressPkts, ingressBytes, egressPkts, egressBytes, type); } } } diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java index 2b17421cac4..738d6b6f4bd 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfDevice.java @@ -52,27 +52,31 @@ public interface UpfDevice { Collection readAll(UpfEntityType entityType) throws UpfProgrammableException; /** - * Reads the given UPF counter ID from the UPF-programmable device. + * Reads the given UPF counter type and index from the UPF-programmable device. * - * @param counterId The counter ID from which to read. + * @param counterIdx The counter index from which to read. + * @param type {@link UpfEntityType} of UPF counter to read + * ({@code COUNTER, INGRESS_COUNTER, EGRESS_COUNTER}) * @return The content of the UPF counter. * @throws UpfProgrammableException if the counter ID is out of bounds. */ - UpfCounter readCounter(int counterId) throws UpfProgrammableException; + UpfCounter readCounter(int counterIdx, UpfEntityType type) throws UpfProgrammableException; /** - * Reads the UPF counter contents for all indices that are valid on the - * UPF-programmable device. {@code maxCounterId} parameter is used to limit - * the number of counters retrieved from the UPF. If the limit given is + * Reads the given UPF counter type contents for all indices that are valid + * on the UPF-programmable device. {@code maxCounterId} parameter is used to + * limit the number of counters retrieved from the UPF. If the limit given is * larger than the physical limit, the physical limit will be used. * A limit of -1 removes limitations, and it is equivalent of calling - * {@link #readAll(UpfEntityType)} passing the {@code COUNTER} {@link UpfEntityType}. + * {@link #readAll(UpfEntityType)} passing the given {@link UpfEntityType}. * - * @param maxCounterId Maximum counter ID to retrieve from the UPF device. + * @param maxCounterIdx Maximum counter index to retrieve from the UPF device. + * @param type {@link UpfEntityType} of UPF counter to read + * ({@code COUNTER, INGRESS_COUNTER, EGRESS_COUNTER}) * @return A collection of UPF counters for all valid hardware counter cells. * @throws UpfProgrammableException if the counters are unable to be read. */ - Collection readCounters(long maxCounterId) throws UpfProgrammableException; + Collection readCounters(long maxCounterIdx, UpfEntityType type) throws UpfProgrammableException; /** * Deletes the given UPF entity from the UPF-programmable device. @@ -97,6 +101,7 @@ public interface UpfDevice { * the UPF-programmable device. For entities that have a direction,returns * the total amount of entities including both the downlink and the uplink * directions. + * * @param entityType The type of UPF programmable entities to retrieve the size from. * @return The total number of supported UPF entities. * @throws UpfProgrammableException if the operation is not supported on the given UPF entity. diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java index 07890f7f33b..e13a3c842b3 100644 --- a/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java +++ b/core/api/src/main/java/org/onosproject/net/behaviour/upf/UpfEntityType.java @@ -29,6 +29,8 @@ public enum UpfEntityType { SESSION_DOWNLINK("session_downlink"), SESSION_UPLINK("session_downlink"), TUNNEL_PEER("tunnel_peer"), + INGRESS_COUNTER("ingress_counter"), + EGRESS_COUNTER("egress_counter"), COUNTER("counter"), APPLICATION("application"), SESSION_METER("session_meter"), From 8042762aaaeab251fca324e756ec7692a9be8382 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Thu, 9 Jun 2022 08:11:25 -0700 Subject: [PATCH 227/235] Removing json package dependency due to licensing issues Change-Id: Iabd2f0343ca42a1956c1f7c6e471d8e141d29bc7 --- apps/artemis/BUILD | 4 +- .../artemis/ArtemisPacketProcessor.java | 4 +- .../artemis/impl/ArtemisConfig.java | 13 +-- .../artemis/impl/ArtemisDeaggregatorImpl.java | 4 +- .../artemis/impl/ArtemisDetectorImpl.java | 34 ++++---- .../artemis/impl/ArtemisMonitorImpl.java | 4 +- .../artemis/impl/monitors/ExaBgpMonitors.java | 22 ++--- .../artemis/impl/monitors/RipeMonitors.java | 82 +++++++++---------- apps/k8s-networking/BUILD | 2 +- apps/k8s-networking/app/BUILD | 2 +- .../impl/K8sOpenstackIntegrationHandler.java | 43 ++++------ deps/deps.json | 1 - tools/build/bazel/generate_workspace.bzl | 9 +- 13 files changed, 88 insertions(+), 136 deletions(-) diff --git a/apps/artemis/BUILD b/apps/artemis/BUILD index 763a5350c37..10692dd0c87 100755 --- a/apps/artemis/BUILD +++ b/apps/artemis/BUILD @@ -3,7 +3,7 @@ COMPILE_DEPS = CORE_DEPS + JACKSON + NETTY + CLI + [ "@okio//jar", "@commons_net//jar", "@io_socket_client//jar", - "@json//jar", + "@minimal_json//jar", "@engine_io_client//jar", "@io_netty_netty//jar", "@io_netty_netty_transport//jar", @@ -18,7 +18,7 @@ COMPILE_DEPS = CORE_DEPS + JACKSON + NETTY + CLI + [ BUNDLES = [ "@commons_net//jar", "@io_socket_client//jar", - "@json//jar", + "@minimal_json//jar", "@engine_io_client//jar", "//apps/artemis:onos-apps-artemis", "//apps/routing-api:onos-apps-routing-api", diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java b/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java index d4cae92449d..ce2be248544 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java @@ -16,7 +16,7 @@ package org.onosproject.artemis; import io.netty.channel.ChannelHandlerContext; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onosproject.artemis.impl.objects.ArtemisMessage; /** @@ -37,5 +37,5 @@ public interface ArtemisPacketProcessor { * * @param msg BGP Update message */ - void processMonitorPacket(JSONObject msg); + void processMonitorPacket(JsonObject msg); } diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java index 9d188ddd622..813ad16ad47 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java @@ -19,8 +19,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.collect.Streams; -import org.json.JSONArray; -import org.json.JSONException; +import com.eclipsesource.json.JsonArray; import org.onlab.packet.IpAddress; import org.onlab.packet.IpPrefix; import org.onosproject.core.ApplicationId; @@ -392,15 +391,11 @@ protected Map>> paths() { * 50 friendly anycaster announcing our prefix * 100+i BGP hijack type i (0 <= i <=2) */ - int checkPath(JSONArray path) { + int checkPath(JsonArray path) { // TODO add MOAS check ArrayList asnPath = new ArrayList<>(); - for (int i = 0; i < path.length(); i++) { - try { - asnPath.add(path.getInt(i)); - } catch (JSONException e) { - log.warn("checkPath", e); - } + for (int i = 0; i < path.size(); i++) { + asnPath.add(path.get(i).asInt()); } // reverse the list to get path starting from origin Collections.reverse(asnPath); diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java index a26ae309c81..8d61e9a5bc2 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java @@ -23,7 +23,7 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.util.CharsetUtil; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onlab.packet.IpAddress; import org.onlab.packet.IpPrefix; import org.onlab.packet.TpPort; @@ -415,7 +415,7 @@ public void processMoasPacket(ArtemisMessage msg, ChannelHandlerContext ctx) { } @Override - public void processMonitorPacket(JSONObject msg) { + public void processMonitorPacket(JsonObject msg) { } } diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java index 02f9cd291a7..205df9ee501 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java @@ -16,10 +16,8 @@ package org.onosproject.artemis.impl; -import org.apache.commons.lang.exception.ExceptionUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; +import com.eclipsesource.json.JsonArray; import org.onlab.packet.IpPrefix; import org.onosproject.artemis.ArtemisDetector; import org.onosproject.artemis.ArtemisEventListener; @@ -70,30 +68,26 @@ protected void deactivate() { void handleArtemisEvent(ArtemisEvent event) { // If an instance was deactivated, check whether we need to roll back the upgrade. if (event.type().equals(ArtemisEvent.Type.BGPUPDATE_ADDED)) { - JSONObject take = (JSONObject) event.subject(); + JsonObject take = (JsonObject) event.subject(); log.info("Received information about monitored prefix " + take.toString()); artemisService.getConfig().ifPresent(config -> config.monitoredPrefixes().forEach(artemisPrefix -> { - try { - IpPrefix prefix = artemisPrefix.prefix(), receivedPrefix; + IpPrefix prefix = artemisPrefix.prefix(), receivedPrefix; - receivedPrefix = IpPrefix.valueOf(take.getString("prefix")); + receivedPrefix = IpPrefix.valueOf(take.get("prefix").asString()); - if (prefix.contains(receivedPrefix)) { - JSONArray path = take.getJSONArray("path"); + if (prefix.contains(receivedPrefix)) { + JsonArray path = take.get("path").asArray(); - int state = artemisPrefix.checkPath(path); - if (state >= 100) { - log.info("BGP Hijack detected; pushing prefix for hijack Deaggregation"); - eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.HIJACK_ADDED, - receivedPrefix)); - } else { - log.info("BGP Update is legit"); - } + int state = artemisPrefix.checkPath(path); + if (state >= 100) { + log.info("BGP Hijack detected; pushing prefix for hijack Deaggregation"); + eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.HIJACK_ADDED, + receivedPrefix)); + } else { + log.info("BGP Update is legit"); } - } catch (JSONException e) { - log.error(ExceptionUtils.getFullStackTrace(e)); } }) ); diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java index b05044839a2..14eb3d4cb35 100755 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java @@ -17,7 +17,7 @@ import com.google.common.collect.Sets; import io.netty.channel.ChannelHandlerContext; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onlab.packet.IpPrefix; import org.onosproject.artemis.ArtemisMonitor; import org.onosproject.artemis.ArtemisPacketProcessor; @@ -79,7 +79,7 @@ public void processMoasPacket(ArtemisMessage msg, ChannelHandlerContext ctx) { } @Override - public void processMonitorPacket(JSONObject msg) { + public void processMonitorPacket(JsonObject msg) { // TODO: in future maybe store the BGP Update message and propagate it to the cluster instead of Events eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.BGPUPDATE_ADDED, msg)); } diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java index d6453603be2..fd0e9c17189 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java @@ -17,8 +17,7 @@ import io.socket.client.IO; import io.socket.client.Socket; -import org.json.JSONException; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onlab.packet.IpPrefix; import org.onosproject.artemis.ArtemisPacketProcessor; import org.onosproject.artemis.Monitors; @@ -48,14 +47,10 @@ public ExaBgpMonitors(IpPrefix prefix, String host, ArtemisPacketProcessor packe * socket.io onConnect event handler. */ private void onConnect() { - try { - JSONObject parameters = new JSONObject(); - parameters.put("prefix", this.prefix); + JsonObject parameters = new JsonObject(); + parameters.set("prefix", this.prefix.toString()); - socket.emit("exa_subscribe", parameters); - } catch (JSONException e) { - log.warn("onConenct()", e); - } + socket.emit("exa_subscribe", parameters); } /** @@ -64,10 +59,8 @@ private void onConnect() { * @param args exabgp message */ private void onExaMessage(Object[] args) { - JSONObject message = (JSONObject) args[0]; - - try { - if (message.getString("type").equals("A")) { + JsonObject message = (JsonObject) args[0]; + if (message.get("type").asString().equals("A")) { // Example of BGP Update message: // { // "path":[65001], @@ -87,9 +80,6 @@ private void onExaMessage(Object[] args) { // Append synchronized message to message list in memory. packetProcessor.processMonitorPacket(message); } - } catch (JSONException e) { - log.warn("onExaMessage()", e); - } } @Override diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java index 52025c9b947..b08308315e6 100644 --- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java +++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java @@ -17,8 +17,7 @@ import io.socket.client.IO; import io.socket.client.Socket; -import org.json.JSONException; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onlab.packet.IpPrefix; import org.onosproject.artemis.ArtemisPacketProcessor; import org.onosproject.artemis.Monitors; @@ -48,22 +47,18 @@ public RipeMonitors(IpPrefix prefix, String host, ArtemisPacketProcessor packetP * socket.io onConnect event handler. */ private void onConnect() { - try { - socket.emit("ping"); - - JSONObject parameters = new JSONObject(); - parameters.put("origin", (Object) null); - parameters.put("type", (Object) null); - parameters.put("moreSpecific", true); - parameters.put("lessSpecific", false); - parameters.put("peer", (Object) null); - parameters.put("host", this.host); - parameters.put("prefix", this.prefix); - - socket.emit("ris_subscribe", parameters); - } catch (JSONException e) { - log.warn("onConnect()", e); - } + socket.emit("ping"); + + JsonObject parameters = new JsonObject(); + parameters.set("origin", ""); + parameters.set("type", ""); + parameters.set("moreSpecific", true); + parameters.set("lessSpecific", false); + parameters.set("peer", ""); + parameters.set("host", this.host); + parameters.set("prefix", this.prefix.toString()); + + socket.emit("ris_subscribe", parameters); } @Override @@ -83,34 +78,31 @@ public void setPrefix(IpPrefix prefix) { * @param args RIS message */ private void onRisMessage(Object[] args) { - try { - JSONObject message = (JSONObject) args[0]; - if (message.getString("type").equals("A")) { - // Example of BGP Update message: - // { - // "timestamp":1488044022.97, - // "prefix":"101.1.46.0/24", - // "host":"rrc21", - // "next_hop":"37.49.236.246", - // "peer":"37.49.236.246", - // "path":[2613,25091,9318,9524], - // "type":"A" - // } - - // We want to keep only prefix and path in memory. - message.remove("community"); - message.remove("timestamp"); - message.remove("next_hop"); - message.remove("peer"); - message.remove("type"); - message.remove("host"); - - // Append synchronized message to message list in memory. - packetProcessor.processMonitorPacket(message); - } - } catch (JSONException e) { - log.error("onRisMessage()", e); + JsonObject message = (JsonObject) args[0]; + if (message.get("type").asString().equals("A")) { + // Example of BGP Update message: + // { + // "timestamp":1488044022.97, + // "prefix":"101.1.46.0/24", + // "host":"rrc21", + // "next_hop":"37.49.236.246", + // "peer":"37.49.236.246", + // "path":[2613,25091,9318,9524], + // "type":"A" + // } + + // We want to keep only prefix and path in memory. + message.remove("community"); + message.remove("timestamp"); + message.remove("next_hop"); + message.remove("peer"); + message.remove("type"); + message.remove("host"); + + // Append synchronized message to message list in memory. + packetProcessor.processMonitorPacket(message); } + socket.emit("ping"); } diff --git a/apps/k8s-networking/BUILD b/apps/k8s-networking/BUILD index 9729e56dfef..d56a43f2d65 100644 --- a/apps/k8s-networking/BUILD +++ b/apps/k8s-networking/BUILD @@ -3,7 +3,7 @@ BUNDLES = [ "//apps/k8s-networking/app:onos-apps-k8s-networking-app", "@commons_net//jar", "@jersey_client//jar", - "@json//jar", + "@minimal_json//jar", "@k8s_client//jar", "@k8s_model//jar", "@okhttp//jar", diff --git a/apps/k8s-networking/app/BUILD b/apps/k8s-networking/app/BUILD index 87c974e6715..df84aaf0960 100644 --- a/apps/k8s-networking/app/BUILD +++ b/apps/k8s-networking/app/BUILD @@ -6,7 +6,7 @@ COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [ "//apps/k8s-networking/api:onos-apps-k8s-networking-api", "@commons_net//jar", "@jersey_client//jar", - "@json//jar", + "@minimal_json//jar", "@k8s_client//jar", "@k8s_model//jar", "@okhttp//jar", diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java index a631c627176..0a1c5dea3cf 100644 --- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java +++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java @@ -16,8 +16,7 @@ package org.onosproject.k8snetworking.impl; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; -import org.json.JSONException; -import org.json.JSONObject; +import com.eclipsesource.json.JsonObject; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.LeadershipService; import org.onosproject.cluster.NodeId; @@ -129,20 +128,15 @@ private void setCniPtNodeRules(K8sNode k8sNode, boolean install) { String jsonString = ""; - try { - jsonString = new JSONObject() - .put(K8S_NODE_IP, k8sNodeIp) - .put(POD_GW_IP, gatewayIp) - .put(POD_CIDR, podCidr) - .put(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT) - .put(OS_K8S_INT_PORT_NAME, osK8sIntPortName) - .put(K8S_INT_OS_PORT_MAC, k8sIntOsPortMac) - .toString(); - log.info("push integration configuration {}", jsonString); - } catch (JSONException e) { - log.error("Failed to generate JSON string"); - return; - } + jsonString = new JsonObject() + .set(K8S_NODE_IP, k8sNodeIp) + .set(POD_GW_IP, gatewayIp) + .set(POD_CIDR, podCidr) + .set(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT) + .set(OS_K8S_INT_PORT_NAME, osK8sIntPortName) + .set(K8S_INT_OS_PORT_MAC, k8sIntOsPortMac) + .toString(); + log.info("push integration configuration {}", jsonString); HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(ONOS_USERNAME, ONOS_PASSWORD); @@ -169,17 +163,12 @@ private void setCniPtNodePortRules(K8sNode k8sNode, boolean install) { String jsonString = ""; - try { - jsonString = new JSONObject() - .put(K8S_NODE_IP, k8sNodeIp) - .put(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT) - .put(OS_K8S_EXT_PORT_NAME, osK8sExtPortName) - .toString(); - log.info("push integration configuration {}", jsonString); - } catch (JSONException e) { - log.error("Failed to generate JSON string"); - return; - } + jsonString = new JsonObject() + .set(K8S_NODE_IP, k8sNodeIp) + .set(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT) + .set(OS_K8S_EXT_PORT_NAME, osK8sExtPortName) + .toString(); + log.info("push integration configuration {}", jsonString); HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(ONOS_USERNAME, ONOS_PASSWORD); diff --git a/deps/deps.json b/deps/deps.json index d235951500a..e8a666eaedf 100644 --- a/deps/deps.json +++ b/deps/deps.json @@ -284,7 +284,6 @@ "mibs-net-snmp": "mvn:org.onosproject:mibbler-mibs-net-snmp:1.0-20151221.1", "mibs-rfc": "mvn:org.onosproject:mibbler-mibs-rfc:1.0-20151221.1", "io.socket-client": "mvn:io.socket:socket.io-client:jar:0.8.3", - "json": "mvn:org.json:json:jar:20090211", "engine.io-client": "mvn:io.socket:engine.io-client:jar:0.8.3", "org_codehaus_mojo_animal_sniffer_annotations": "mvn:org.codehaus.mojo:animal-sniffer-annotations:1.17", diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index 0944a76590a..7a3420176d8 100644 --- a/tools/build/bazel/generate_workspace.bzl +++ b/tools/build/bazel/generate_workspace.bzl @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Tue, 8 Feb 2022 21:28:04 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Thu, 9 Jun 2022 15:04:07 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -1060,12 +1060,6 @@ def generated_maven_jars(): jar_sha256 = "b5ccc73724f0d188ada06aff41c8bf60e0e5d4462e7980af203a20ea87bfa583", licenses = ["notice"], jar_urls = ["https://repo1.maven.org/maven2/io/socket/socket.io-client/0.8.3/socket.io-client-0.8.3.jar"], ) - if "json" not in native.existing_rules(): - java_import_external( - name = "json", - jar_sha256 = "055be110a570f9cda3eba8d70a006ff46c77a048bc67868524879211c48b330a", - licenses = ["notice"], - jar_urls = ["https://repo1.maven.org/maven2/org/json/json/20090211/json-20090211.jar"], ) if "engine_io_client" not in native.existing_rules(): java_import_external( name = "engine_io_client", @@ -1499,7 +1493,6 @@ artifact_map["@snmp_core//:snmp_core"] = "mvn:org.onosproject:snmp-core:jar:1.3- artifact_map["@mibs_net_snmp//:mibs_net_snmp"] = "mvn:org.onosproject:mibbler-mibs-net-snmp:jar:1.0-20151221.1" artifact_map["@mibs_rfc//:mibs_rfc"] = "mvn:org.onosproject:mibbler-mibs-rfc:jar:1.0-20151221.1" artifact_map["@io_socket_client//:io_socket_client"] = "mvn:io.socket:socket.io-client:jar:NON-OSGI:0.8.3" -artifact_map["@json//:json"] = "mvn:org.json:json:jar:NON-OSGI:20090211" artifact_map["@engine_io_client//:engine_io_client"] = "mvn:io.socket:engine.io-client:jar:NON-OSGI:0.8.3" artifact_map["@org_codehaus_mojo_animal_sniffer_annotations//:org_codehaus_mojo_animal_sniffer_annotations"] = "mvn:org.codehaus.mojo:animal-sniffer-annotations:jar:NON-OSGI:1.17" artifact_map["@com_google_api_grpc_proto_google_common_protos//:com_google_api_grpc_proto_google_common_protos"] = "mvn:com.google.api.grpc:proto-google-common-protos:jar:NON-OSGI:1.12.0" From 32762fa3a3fce3f0cc6d97e9fadca2959080ad08 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Wed, 29 Jun 2022 16:24:00 +0200 Subject: [PATCH 228/235] Enabling role timeout configuration on the Device Manager Change-Id: Ie8664189d236431a5f2ee42476d0f99fdfe5f1d7 --- .../net/device/impl/DeviceManager.java | 52 ++++++++++++++++--- .../device/impl/OsgiPropertyConstants.java | 28 ++++++++++ .../net/device/impl/DeviceManagerTest.java | 7 ++- .../controller/impl/OFChannelHandler.java | 3 ++ 4 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 core/net/src/main/java/org/onosproject/net/device/impl/OsgiPropertyConstants.java diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java index fbbb15db9ce..32d2584b4a2 100644 --- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java +++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java @@ -22,6 +22,7 @@ import com.google.common.util.concurrent.Futures; import org.onlab.util.KryoNamespace; import org.onlab.util.Tools; +import org.onosproject.cfg.ComponentConfigService; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.ControllerNode; import org.onosproject.cluster.NodeId; @@ -70,21 +71,25 @@ import org.onosproject.store.serializers.KryoNamespaces; import org.onosproject.store.service.Serializer; import org.onosproject.upgrade.UpgradeService; +import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.Modified; import org.osgi.service.component.annotations.ReferenceCardinality; import org.slf4j.Logger; import java.time.Instant; import java.util.Collection; +import java.util.Dictionary; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.Properties; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; @@ -97,15 +102,19 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.collect.Multimaps.newListMultimap; import static com.google.common.collect.Multimaps.synchronizedListMultimap; import static java.util.concurrent.Executors.newSingleThreadExecutor; import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; import static java.lang.System.currentTimeMillis; +import static org.onlab.util.Tools.get; import static org.onlab.util.Tools.groupedThreads; import static org.onosproject.net.MastershipRole.MASTER; import static org.onosproject.net.MastershipRole.NONE; import static org.onosproject.net.MastershipRole.STANDBY; +import static org.onosproject.net.device.impl.OsgiPropertyConstants.ROLE_TIMEOUT_SECONDS; +import static org.onosproject.net.device.impl.OsgiPropertyConstants.ROLE_TIMEOUT_SECONDS_DEFAULT; import static org.onosproject.security.AppGuard.checkPermission; import static org.onosproject.security.AppPermission.Type.DEVICE_READ; import static org.slf4j.LoggerFactory.getLogger; @@ -115,7 +124,10 @@ */ @Component(immediate = true, service = {DeviceService.class, DeviceAdminService.class, - DeviceProviderRegistry.class, PortConfigOperatorRegistry.class }) + DeviceProviderRegistry.class, PortConfigOperatorRegistry.class }, + property = { + ROLE_TIMEOUT_SECONDS + ":Integer=" + ROLE_TIMEOUT_SECONDS_DEFAULT + }) public class DeviceManager extends AbstractListenerProviderRegistry implements DeviceService, DeviceAdminService, DeviceProviderRegistry, PortConfigOperatorRegistry { @@ -162,6 +174,9 @@ public class DeviceManager @Reference(cardinality = ReferenceCardinality.MANDATORY) protected ClusterCommunicationService communicationService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) + protected ComponentConfigService cfgService; + private ExecutorService clusterRequestExecutor; /** * List of all registered PortConfigOperator. @@ -214,14 +229,22 @@ public LocalStatus(boolean b, Instant now) { private final Map roleToAcknowledge = Maps.newConcurrentMap(); private ScheduledExecutorService backgroundRoleChecker; - private static final int ROLE_TIMEOUT_SECONDS = 10; + + + /** + * Timeout for role acknowledgement check. + **/ + protected int roleTimeoutSeconds = ROLE_TIMEOUT_SECONDS_DEFAULT; // FIXME join this map with roleToAcknowledge and fix the back to back event issue here private final Map lastAcknowledgedRole = Maps.newConcurrentMap(); @Activate - public void activate() { + public void activate(ComponentContext context) { + cfgService.registerProperties(getClass()); + + modified(context); portAnnotationOp = new PortAnnotationOperator(networkConfigService); deviceAnnotationOp = new DeviceAnnotationOperator(networkConfigService); portOpsIndex.put(PortAnnotationConfig.class, portAnnotationOp); @@ -271,8 +294,25 @@ public void activate() { log.info("Started"); } + @Modified + public void modified(ComponentContext context) { + Dictionary properties = context != null ? context.getProperties() : new Properties(); + String roleTimeoutSec = get(properties, ROLE_TIMEOUT_SECONDS); + int oldRoleTimeoutSeconds = roleTimeoutSeconds; + try { + roleTimeoutSeconds = isNullOrEmpty(roleTimeoutSec) ? + oldRoleTimeoutSeconds : Integer.parseInt(roleTimeoutSec.trim()); + } catch (NumberFormatException e) { + log.warn("Can't parse {}, setting the old value {}", roleTimeoutSec, oldRoleTimeoutSeconds, e); + roleTimeoutSeconds = oldRoleTimeoutSeconds; + } + log.info("Modified. Values = {}: {}", + ROLE_TIMEOUT_SECONDS, roleTimeoutSeconds); + } + @Deactivate - public void deactivate() { + public void deactivate(ComponentContext context) { + cfgService.unregisterProperties(getClass(), true); backgroundService.shutdown(); networkConfigService.removeListener(networkConfigListener); store.unsetDelegate(delegate); @@ -613,7 +653,7 @@ private void roleCheck() { return null; } exists.set(true); - if (currentTimeMillis() - value < (ROLE_TIMEOUT_SECONDS * 1000)) { + if (currentTimeMillis() - value < (roleTimeoutSeconds * 1000)) { return value; } return null; @@ -625,7 +665,7 @@ private void roleCheck() { } // Timeout still on if (ts != null) { - log.debug("Timeout expires in {} ms", ((ROLE_TIMEOUT_SECONDS * 1000) - currentTimeMillis() + ts)); + log.debug("Timeout expires in {} ms", ((roleTimeoutSeconds * 1000) - currentTimeMillis() + ts)); continue; } if (myRole != MASTER) { diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/OsgiPropertyConstants.java b/core/net/src/main/java/org/onosproject/net/device/impl/OsgiPropertyConstants.java new file mode 100644 index 00000000000..1c700564ca7 --- /dev/null +++ b/core/net/src/main/java/org/onosproject/net/device/impl/OsgiPropertyConstants.java @@ -0,0 +1,28 @@ +/* + * Copyright 2022-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.net.device.impl; + +/** + * Constants for default values of configurable properties. + */ +public final class OsgiPropertyConstants { + + private OsgiPropertyConstants() { + } + + public static final String ROLE_TIMEOUT_SECONDS = "roleTimeoutSeconds"; + public static final int ROLE_TIMEOUT_SECONDS_DEFAULT = 10; +} \ No newline at end of file diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java index c2339f3cc4d..7406cf63f49 100644 --- a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java @@ -19,8 +19,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.onlab.osgi.ComponentContextAdapter; import org.onlab.packet.ChassisId; import org.onlab.packet.IpAddress; +import org.onosproject.cfg.ComponentConfigAdapter; import org.onosproject.cluster.ClusterServiceAdapter; import org.onosproject.cluster.ControllerNode; import org.onosproject.cluster.DefaultControllerNode; @@ -100,6 +102,7 @@ public void setUp() { service = mgr; admin = mgr; registry = mgr; + mgr.cfgService = new ComponentConfigAdapter(); mgr.store = new SimpleDeviceStore(); injectEventDispatcher(mgr, new TestEventDispatcher()); TestMastershipManager mastershipManager = new TestMastershipManager(); @@ -108,7 +111,7 @@ public void setUp() { mgr.clusterService = new TestClusterService(); mgr.networkConfigService = new TestNetworkConfigService(); mgr.communicationService = new TestClusterCommunicationService(); - mgr.activate(); + mgr.activate(new ComponentContextAdapter()); service.addListener(listener); @@ -125,7 +128,7 @@ public void tearDown() { assertFalse("provider should not be registered", registry.getProviders().contains(provider.id())); service.removeListener(listener); - mgr.deactivate(); + mgr.deactivate(new ComponentContextAdapter()); } private void connectDevice(DeviceId deviceId, String swVersion) { diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java index 1b0a449baf2..79645eb79e5 100644 --- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java +++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java @@ -244,6 +244,9 @@ class OFChannelHandler extends ChannelInboundHandlerAdapter * Executor is instantiated as a single thread executor guaranteeing processing * of device status messages in order. */ + // TODO With a huge number of ports per device congestion can be created at the runtimeExecutor, + // leading to mastership roles check going into timeout, with issues in multi-instance mastership handling. + // An option is to Experiment with priority tasks - to give priority (under certain conditions) to the ROLE_REPLY protected ExecutorService runtimeStatusExecutor; /** From 08a13e41ce287baddc42f14b3d3d8ae5dc440288 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 30 Jun 2022 17:26:55 +0000 Subject: [PATCH 229/235] Tagging 2.5.8 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 1a90a26e467..bec5321d9f5 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.8-SNAPSHOT"); + private static Version version = Version.version("2.5.8"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 4b672b43c70..58ddb179838 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.8-SNAPSHOT" +ONOS_VERSION = "2.5.8" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 4eaf1969faa..089797710b8 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.8-SNAPSHOT" +export ONOS_POM_VERSION="2.5.8" export ONOS_VERSION=${ONOS_VERSION:-2.5.8.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 58d52160ea7..b2c7a384366 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index aafb8875765..8b5d798eec1 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index ddab8f4d059..2ced2ad6f8d 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 69d71d1e5d5..b04f18a8275 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 1ce6215d89b..8d7b3c905fc 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index ad549aeac7d..404af7368ba 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index fcc93f99649..0df18cc24b7 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index f232c0f6e63..f42c2eef848 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 1c68b5876cb..9f6c20617c3 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 3e3969ea9dd..033f31e5e22 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 1d05c9c5d55..a504eda7e16 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index a612960505c..6b664c2d76a 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index e228937e7be..b82b9bd2da0 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index a0ed3fe0d71..e1db3f9942b 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index ffe7b9ee18d..95389943894 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 19dbff09bd8..fdf2e2e6a9d 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8-SNAPSHOT + 2.5.8 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index c43726db57e..aad8fad0f36 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.8-SNAPSHOT + 2.5.8 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 669cc78ab3c..1d3480d9904 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.8-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.8" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 675d2a9f26b4e740e5ecdaad7d0756dc1973aa91 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Thu, 30 Jun 2022 17:27:00 +0000 Subject: [PATCH 230/235] Starting snapshot 2.5.9-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index bec5321d9f5..eb1a4fe8ed6 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.8"); + private static Version version = Version.version("2.5.9-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 58ddb179838..30ec1948b62 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.8" +ONOS_VERSION = "2.5.9-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 089797710b8..bde8fc1ef58 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.8" -export ONOS_VERSION=${ONOS_VERSION:-2.5.8.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.9-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.9.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index b2c7a384366..feae3382ec7 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 8b5d798eec1..2ab14871708 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 2ced2ad6f8d..1a236659792 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index b04f18a8275..2630d4a09d1 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 8d7b3c905fc..03335aad09e 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 404af7368ba..03a9bc0630e 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 0df18cc24b7..fda0a86f51e 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index f42c2eef848..e2050809ea8 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index 9f6c20617c3..b738ff7c8da 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 033f31e5e22..d4883354056 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index a504eda7e16..afe66da42b1 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 6b664c2d76a..56d4a01131f 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index b82b9bd2da0..c07986a7748 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index e1db3f9942b..c8274de296c 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 95389943894..7fcf51cd784 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index fdf2e2e6a9d..25716aafa7b 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.8 + 2.5.9-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index aad8fad0f36..9ec86d111aa 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.8 + 2.5.9-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 1d3480d9904..c7255c74f48 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.8" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.9-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 846c8b167f3e3aa8086b3eab3df94154a75dc423 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 6 May 2022 19:01:27 +0200 Subject: [PATCH 231/235] [SDFAB-1196] Build ONOS with Bazel 6.0.0 pre-release This was a quite big jump (3.7.2 -> 6.x.x) and we had to face the deprecation of several components. - javabase/host_javabase -> java_language_version and java_runtime_version - java_toolchain/host_java_toolchain -> java_language_version and java_runtime_version - Turnedoff "ReturnValueIgnored" related to ErrorProne - Moved to bazelisk v1.11.0 - patched again the grpc code due to the deprecation of host_javabase as java_toolcahin contains already this information. - resource_jars are also handled as resources because java constructs do not accept them anymore. - Use the OSGIWrapper to fix the path of the resource_hars and untar them. Additionally clean up the code and enable/disable logging through a param. - Fix absolute_javabase in the Dockerfile by providing the absolute path of the local jvm through local_java_repository. The latter is appended to the WORKSPACE file on demand inside the Dockerfile. Change-Id: I96e06fe52b3b49a1a34f01443eec583a95347323 --- .bazelrc | 22 ++-- .bazelversion | 2 +- Dockerfile | 27 ++++- WORKSPACE-docker | 16 +++ tools/build/bazel/grpc_workspace.bzl | 6 +- tools/build/bazel/osgi_java_library.bzl | 9 +- tools/build/bazel/topo_BUILD | 2 +- tools/build/jdk/BUILD | 21 ---- tools/dev/Dockerfile-yourkit | 11 +- .../java/org/onlab/osgiwrap/OSGiWrapper.java | 106 ++++++++++++------ 10 files changed, 136 insertions(+), 86 deletions(-) create mode 100644 WORKSPACE-docker diff --git a/.bazelrc b/.bazelrc index 0d3b7999009..2b9ed65152a 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,20 +1,16 @@ # By default, we build and run ONOS using the Bazel-provided remote JDK. The # specific JDK version is defined in tools/build/jdk/BUILD. # -# If you prefer to use your locally installed JDK, replace the --javabase and -# --host_javabase arguments with the following lines. ABSOLUTE_JAVABASE should -# point to the "JAVA_HOME" of your JDK. +# If you prefer to use your locally installed JDK use local_java_repositoy +# in the WORKSPACE file. # -# build --javabase=@bazel_tools//tools/jdk:absolute_javabase -# build --host_javabase=@bazel_tools//tools/jdk:absolute_javabase -# build --define=ABSOLUTE_JAVABASE= -# build --define=RUN_WITH_ABSOLUTE_JAVABASE=true +# https://bazel.build/docs/bazel-and-java -build --javabase=@org_onosproject_onos//tools/build/jdk:default_jdk -build --host_javabase=@org_onosproject_onos//tools/build/jdk:default_jdk - -build --java_toolchain=@org_onosproject_onos//tools/build/jdk:default_toolchain -build --host_java_toolchain=@org_onosproject_onos//tools/build/jdk:default_toolchain +# Builds using remotejdk_11, executes using remotejdk_11 or local_jdk +build --java_language_version=11 +build --java_runtime_version=remotejdk_11 +build --tool_java_language_version=11 +build --tool_java_runtime_version=remotejdk_11 build --host_force_python=PY2 @@ -22,7 +18,7 @@ build --nouse_ijars build --experimental_strict_action_env # For external/io_grpc_grpc_java/core/src/main/java/io/grpc/internal/RetriableStream.java -build --javacopt="-Xep:GuardedBy:WARN -Xep:ComparableType:WARN" +build --javacopt="-Xep:GuardedBy:WARN -Xep:ComparableType:WARN -Xep:ReturnValueIgnored:OFF" # intellij-bazel plugin needs this build --incompatible_new_actions_api=false diff --git a/.bazelversion b/.bazelversion index 47b6be3fafe..91e1ea48a9a 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -3.7.2 \ No newline at end of file +6.0.0-pre.20220421.3 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f4fb78443e8..129e7cfa0b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,19 @@ +# Copyright 2015-present Open Networking Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# With this dockerfile you can build a ONOS Docker container + ARG JOBS=2 ARG PROFILE=default ARG TAG=11.0.8-11.41.23 @@ -21,7 +37,7 @@ RUN apt-get update && apt-get install -y ${BUILD_DEPS} # Install Bazelisk, which will download the version of bazel specified in # .bazelversion -RUN curl -L -o bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.5.0/bazelisk-linux-amd64 +RUN curl -L -o bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-linux-amd64 RUN chmod +x bazelisk && mv bazelisk /usr/bin # Build-stage environment variables @@ -36,16 +52,15 @@ WORKDIR ${ONOS_ROOT} # Build ONOS using the JDK pre-installed in the base image, instead of the # Bazel-provided remote one. By doing wo we make sure to build with the most # updated JDK, including bug and security fixes, independently of the Bazel -# version. +# version. NOTE that WORKSPACE-docker file defines dockerjdk ARG JOBS ARG JAVA_PATH ARG PROFILE -RUN bazelisk build onos \ +RUN cat WORKSPACE-docker >> WORKSPACE && bazelisk build onos \ --jobs ${JOBS} \ --verbose_failures \ - --javabase=@bazel_tools//tools/jdk:absolute_javabase \ - --host_javabase=@bazel_tools//tools/jdk:absolute_javabase \ - --define=ABSOLUTE_JAVABASE=${JAVA_PATH} \ + --java_runtime_version=dockerjdk_11 \ + --tool_java_runtime_version=dockerjdk_11 \ --define profile=${PROFILE} # We extract the tar in the build environment to avoid having to put the tar in diff --git a/WORKSPACE-docker b/WORKSPACE-docker new file mode 100644 index 00000000000..1b2b0d7047b --- /dev/null +++ b/WORKSPACE-docker @@ -0,0 +1,16 @@ + +# Appended by the Dockerfiles to help bazel finding the local path of +# the Azul jvm. When we build docker images we use the jvm available +# in the base image to compile ONOS. In order to do that we have to +# provide the absolute path by using the local_java_repository. + +# local_java_repository for docker based builds +load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_repository") + +ABSOLUTE_JAVABASE = "/usr/lib/jvm/zulu11-ca-amd64" + +local_java_repository( + name = "dockerjdk", + version = "11", + java_home = ABSOLUTE_JAVABASE, +) diff --git a/tools/build/bazel/grpc_workspace.bzl b/tools/build/bazel/grpc_workspace.bzl index f2f3dfc8be2..1a680da6ce5 100644 --- a/tools/build/bazel/grpc_workspace.bzl +++ b/tools/build/bazel/grpc_workspace.bzl @@ -1,7 +1,7 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") GRPC_JAVA_VERSION = "1.22.1" -GRPC_SHA = "e6915ea60ab8a6e17de86bd94a8db320b0115cc214db19bef8f2ba4af2dab430" +GRPC_SHA = "073395219d611c21a460d21dfe5cb77550030d6396b400f796e568b5175c2ec0" GAPIS_COMMIT = "37cc0e5acae50ee91f00827a7010c3b07dfa5311" GAPIS_SHA = "17d023f48ea290f25edaf25a967973b5a42ce6d71b1570862f302d95aa8b9f77" @@ -10,9 +10,9 @@ def generate_grpc(): # grpc-java fork that fixes the OSGi split brain problem. http_archive( name = "io_grpc_grpc_java", - urls = ["https://github.com/opennetworkinglab/grpc-java/archive/v%s-patched.zip" % GRPC_JAVA_VERSION], + urls = ["https://github.com/opennetworkinglab/grpc-java/archive/v%s-fix-host_javabase.zip" % GRPC_JAVA_VERSION], sha256 = GRPC_SHA, - strip_prefix = "grpc-java-%s-patched" % GRPC_JAVA_VERSION, + strip_prefix = "grpc-java-%s-fix-host_javabase" % GRPC_JAVA_VERSION, ) # Google APIs protos (status.proto, etc.) diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl index 491444f4413..0236db43487 100644 --- a/tools/build/bazel/osgi_java_library.bzl +++ b/tools/build/bazel/osgi_java_library.bzl @@ -124,6 +124,8 @@ def _bnd_impl(ctx): bundle_classpath, karaf_commands, fragment_host, + # enable/disable osgi-wrap logging + "false", ] ctx.actions.run( @@ -507,7 +509,7 @@ def osgi_jar_with_tests( native.java_library( name = name + "-native", srcs = native_srcs, - resource_jars = resource_jars + [name + "_cfgdef_jar"], + resources = resource_jars + [name + "_cfgdef_jar"], deps = deps, visibility = visibility, javacopts = javacopts, @@ -516,13 +518,14 @@ def osgi_jar_with_tests( native.java_library( name = name + "-native", srcs = native_srcs, - resource_jars = [name + "_cfgdef_jar"], - resources = native_resources, + resources = native_resources + [name + "_cfgdef_jar"], deps = deps, visibility = visibility, javacopts = javacopts, ) + # NOTE that the additional resource_jars are modified by + # osgi-wrap because java_library does not decompress them. karaf_command_packages_string = ",".join(karaf_command_packages) _bnd( name = name, diff --git a/tools/build/bazel/topo_BUILD b/tools/build/bazel/topo_BUILD index 9a42836a575..a3418b2c611 100644 --- a/tools/build/bazel/topo_BUILD +++ b/tools/build/bazel/topo_BUILD @@ -16,6 +16,6 @@ genrule( name = "topo_device_proto_sed", srcs = [":device/device.proto"], outs = ["new/device/device.proto"], - cmd = "sed -e 's:import \"gogoproto.*;::g;s: ..gogoproto\..*:;:g;s:import \"%s:import \":g;s:^syntax = \"proto3\";:&\\\n option java_package = \"org.onosproject.uonos\";:g' $(location :device/device.proto) >> \"$@\"" + cmd = "sed -e 's:import \"gogoproto.*;::g;s: ..gogoproto\\..*:;:g;s:import \"%s:import \":g;s:^syntax = \"proto3\";:&\\\n option java_package = \"org.onosproject.uonos\";:g' $(location :device/device.proto) >> \"$@\"" % IMPORT_PREFIX, ) diff --git a/tools/build/jdk/BUILD b/tools/build/jdk/BUILD index 00550315f4e..c99f398289e 100644 --- a/tools/build/jdk/BUILD +++ b/tools/build/jdk/BUILD @@ -1,24 +1,3 @@ -# This is where we define the JDK used to build ONOS, as well as the language -# source and target values passed to javac. The :default_toolchain and -# :default_jdk are expected to be passed as arguments when invoking bazel build -# (see onos/.bazelrc) - -load("//tools/build/bazel:variables.bzl", "DEFAULT_JAVA_VERSION") -load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain") - -default_java_toolchain( - name = "default_toolchain", - source_version = DEFAULT_JAVA_VERSION, - target_version = DEFAULT_JAVA_VERSION, - visibility = ["//visibility:public"], -) - -alias( - name = "default_jdk", - actual = "@bazel_tools//tools/jdk:remote_jdk11", - visibility = ["//visibility:public"], -) - # We use the following rule to package the same JDK used for building and make # it available for external scripts as their JAVA_HOME, such as for `bazel run # onos-local`. diff --git a/tools/dev/Dockerfile-yourkit b/tools/dev/Dockerfile-yourkit index d54460efee3..176c3b3d37e 100644 --- a/tools/dev/Dockerfile-yourkit +++ b/tools/dev/Dockerfile-yourkit @@ -41,7 +41,7 @@ RUN apt-get update && apt-get install -y ${BUILD_DEPS} # Install Bazelisk, which will download the version of bazel specified in # .bazelversion -RUN curl -L -o bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.5.0/bazelisk-linux-amd64 +RUN curl -L -o bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-linux-amd64 RUN chmod +x bazelisk && mv bazelisk /usr/bin # Build-stage environment variables @@ -56,16 +56,15 @@ WORKDIR ${ONOS_ROOT} # Build ONOS using the JDK pre-installed in the base image, instead of the # Bazel-provided remote one. By doing wo we make sure to build with the most # updated JDK, including bug and security fixes, independently of the Bazel -# version. +# version. NOTE that WORKSPACE-docker file defines dockerjdk ARG JOBS ARG JAVA_PATH ARG PROFILE -RUN bazelisk build onos \ +RUN cat WORKSPACE-docker >> WORKSPACE && bazelisk build onos \ --jobs ${JOBS} \ --verbose_failures \ - --javabase=@bazel_tools//tools/jdk:absolute_javabase \ - --host_javabase=@bazel_tools//tools/jdk:absolute_javabase \ - --define=ABSOLUTE_JAVABASE=${JAVA_PATH} \ + --java_runtime_version=dockerjdk_11 \ + --tool_java_runtime_version=dockerjdk_11 \ --define profile=${PROFILE} # We extract the tar in the build environment to avoid having to put the tar in diff --git a/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java b/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java index 2bdc2b360ff..aaba624c8fb 100644 --- a/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java +++ b/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java @@ -26,13 +26,12 @@ import com.google.common.base.Joiner; import com.google.common.base.MoreObjects; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.io.ByteStreams; -import org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; @@ -48,6 +47,7 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; import java.util.jar.Manifest; import static com.google.common.io.Files.createParentDirs; @@ -55,9 +55,14 @@ import static java.nio.file.Files.walkFileTree; /** - * BND-based wrapper to convert Buck JARs to OSGi-compatible JARs. + * BND-based wrapper to convert Buck/Bazel JARs to OSGi-compatible JARs. */ public class OSGiWrapper { + // Resources that need to be modified in the original jar + private static final String _CFGDEF_JAR = "_cfgdef.jar"; + private static final String MODEL_SRCJAR = "model.srcjar"; + private static final String SCHEMA_JAR = "schema.jar"; + private static final String NONE = "NONE"; private String inputJar; @@ -87,10 +92,11 @@ public class OSGiWrapper { private String karafCommands; private String fragmentHost; + private boolean debug; // FIXME should consider using Commons CLI, etc. public static void main(String[] args) { - if (args.length < 17) { + if (args.length < 18) { System.err.println("Not enough args"); System.exit(1); } @@ -112,7 +118,8 @@ public static void main(String[] args) { String bundleClasspath = args[14]; String karafCommands = args[15]; String fragmentHost = args[16]; - String desc = Joiner.on(' ').join(Arrays.copyOfRange(args, 17, args.length)); + String debug = args[17]; + String desc = Joiner.on(' ').join(Arrays.copyOfRange(args, 18, args.length)); OSGiWrapper wrapper = new OSGiWrapper(jar, output, cp, name, group, @@ -126,7 +133,8 @@ public static void main(String[] args) { destdir, bundleClasspath, karafCommands, - fragmentHost); + fragmentHost, + debug); wrapper.log(wrapper + "\n"); if (!wrapper.execute()) { System.err.printf("Error generating %s\n", name); @@ -152,7 +160,8 @@ public OSGiWrapper(String inputJar, String destdir, String bundleClasspath, String karafCommands, - String fragmentHost) { + String fragmentHost, + String debug) { this.inputJar = inputJar; this.classpath = Lists.newArrayList(classpath.split(":")); if (!this.classpath.contains(inputJar)) { @@ -186,6 +195,7 @@ public OSGiWrapper(String inputJar, this.karafCommands = karafCommands; this.fragmentHost = fragmentHost; + this.debug = Boolean.parseBoolean(debug); } private void setProperties(Analyzer analyzer) { @@ -228,8 +238,8 @@ private void setProperties(Analyzer analyzer) { public boolean execute() { Analyzer analyzer = new Builder(); try { - // Extract the input jar contents into the specified output directory - expandJar(inputJar, new File(destdir)); + // Sanitize the input jar content + inputJar = modifyJar(inputJar); Jar jar = new Jar(new File(inputJar)); // where our data is analyzer.setJar(jar); // give bnd the contents @@ -246,15 +256,6 @@ public boolean execute() { // Analyze the target JAR first analyzer.analyze(); - //// Scan the JAR for Felix SCR annotations and generate XML files - //Map properties = Maps.newHashMap(); - //// destdir hack - //properties.put("destdir", destdir); - //SCRDescriptorBndPlugin scrDescriptorBndPlugin = new SCRDescriptorBndPlugin(); - //scrDescriptorBndPlugin.setProperties(properties); - //scrDescriptorBndPlugin.setReporter(analyzer); - //scrDescriptorBndPlugin.analyzeJar(analyzer); - if (includeResources != null) { doIncludeResources(analyzer); } @@ -287,24 +288,64 @@ public boolean execute() { } } - // Expands the specified jar file into the given directory - private void expandJar(String inputJar, File intoDir) throws IOException { - try (JarInputStream jis = new JarInputStream(new FileInputStream(inputJar))) { + // Extract the jar and melds its content with the jar produced by Bazel + private void addJarToJar(JarEntry entryJar, JarInputStream jis, JarOutputStream jos) throws IOException { + File file = new File(new File(destdir), entryJar.getName()); + byte[] data = ByteStreams.toByteArray(jis); + createParentDirs(file); + write(data, file); + // Entry jar input stream which points to the inner jar resources (cfgdef, model,...) + try (JarInputStream innerJis = new JarInputStream(new FileInputStream(file))) { JarEntry entry; + byte[] byteBuff = new byte[1024]; + while ((entry = innerJis.getNextJarEntry()) != null) { + if (!entry.isDirectory()) { + if (!entry.getName().contains("..")) { + jos.putNextEntry(entry); + for (int bytesRead; (bytesRead = innerJis.read(byteBuff)) != -1; ) { + jos.write(byteBuff, 0, bytesRead); + } + } else { + throw new IOException("Jar " + entryJar + " is corrupted"); + } + } + innerJis.closeEntry(); + } + } + } + + // Modify the specified jar to fix the resource_jars loaded by Bazel. + // Starting from Bazel 5, resource_jars are no longer supported and + // we have to load them as resources. This means that we expand them + // and we set the right path in OSGi-compatible JAR. + private String modifyJar(String inputJar) throws IOException { + // libonos-xxx input and libonos-xxx-new which is the sanitized final jar + try (JarInputStream jis = new JarInputStream(new FileInputStream(inputJar)); + JarOutputStream jos = new JarOutputStream(new FileOutputStream(inputJar + "new"))) { + JarEntry entry; + byte[] byteBuff = new byte[1024]; while ((entry = jis.getNextJarEntry()) != null) { if (!entry.isDirectory()) { - byte[] data = ByteStreams.toByteArray(jis); - jis.closeEntry(); if (!entry.getName().contains("..")) { - File file = new File(intoDir, entry.getName()); - createParentDirs(file); - write(data, file); + // We add the content but we don't write them again in the new jar + if (entry.getName().contains(bundleName + OSGiWrapper._CFGDEF_JAR) || + entry.getName().contains(SCHEMA_JAR) || + entry.getName().contains(MODEL_SRCJAR)) { + addJarToJar(entry, jis, jos); + } else { + jos.putNextEntry(entry); + for (int bytesRead; (bytesRead = jis.read(byteBuff)) != -1; ) { + jos.write(byteBuff, 0, bytesRead); + } + } } else { - throw new IOException("Corrupt jar file"); + throw new IOException("Jar " + inputJar + " is corrupted"); } } + jis.closeEntry(); } } + return inputJar + "new"; } private boolean isWab() { @@ -399,10 +440,10 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } } - private boolean addFileToJar(Jar jar, String destination, String sourceAbsPath) throws IOException { + private void addFileToJar(Jar jar, String destination, String sourceAbsPath) throws IOException { if (includedResources.contains(sourceAbsPath)) { log("Skipping already included resource: %s\n", sourceAbsPath); - return false; + return; } File file = new File(sourceAbsPath); if (!file.isFile()) { @@ -412,16 +453,17 @@ private boolean addFileToJar(Jar jar, String destination, String sourceAbsPath) Resource resource = new FileResource(file); if (jar.getResource(destination) != null) { warn("Skipping duplicate resource: %s\n", destination); - return false; + return; } jar.putResource(destination, resource); includedResources.add(sourceAbsPath); log("Adding resource: %s\n", destination); - return true; } private void log(String format, Object... objects) { - //System.err.printf(format, objects); + if (debug) { + System.out.printf(format, objects); + } } private void warn(String format, Object... objects) { From cf38ba327d3064ed61a227d5d07cd26dc89c85e2 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 6 May 2022 23:06:20 +0200 Subject: [PATCH 232/235] [SDFAB-1197] First stab to update ONOS to py3 Update has been performed only on the scripts and the executables strictly necessary for the following use cases: - Build (including Intellij) - Tests (including Intellij) - Docker build (including dev and yourkit) - Upload snapshot (including local) - Release Finally, fix the ability to run ONOS using onos-local targets, stc and docker stc (aka up4 stc env). Last but not least, updated the azul image to a newer one which exports also the PYTHONENCODING Change-Id: Ie96f3a9c76dbba83b1fc3896a372f1045d3d7ccc --- .bazelrc | 2 +- Dockerfile | 5 ++-- README.md | 1 - WORKSPACE-docker | 2 +- .../build/bazel/dependencies_pom_generator.py | 8 +++---- tools/build/bazel/onos_app_bundler.py | 4 ++-- tools/build/bazel/onos_app_tools.py | 4 ++-- tools/build/bazel/osgi_feature_bundler.py | 4 ++-- tools/build/bazel/pom_generator.py | 6 ++--- tools/build/onos-close-staging | 24 +++++++++---------- tools/build/onos-release-prerequisites | 2 +- tools/build/onos-upload-artifacts.py | 20 ++++++++-------- tools/build/uploadToS3.py | 16 ++++++------- tools/dev/Dockerfile-bazel | 4 ++-- tools/dev/Dockerfile-yourkit | 5 ++-- tools/dev/bash_profile | 2 +- tools/dev/bin/onos-gen-bazel-project | 13 +++++----- tools/package/onos_stage.py | 2 +- tools/package/runtime/bin/_check-json | 2 +- tools/test/bin/atomix-gen-config | 6 ++--- tools/test/bin/onos-gen-config | 6 ++--- 21 files changed, 68 insertions(+), 70 deletions(-) diff --git a/.bazelrc b/.bazelrc index 2b9ed65152a..5faf22a0f75 100644 --- a/.bazelrc +++ b/.bazelrc @@ -12,7 +12,7 @@ build --java_runtime_version=remotejdk_11 build --tool_java_language_version=11 build --tool_java_runtime_version=remotejdk_11 -build --host_force_python=PY2 +build --host_force_python=PY3 build --nouse_ijars build --experimental_strict_action_env diff --git a/Dockerfile b/Dockerfile index 129e7cfa0b1..6a168c57aa8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,8 @@ ARG JOBS=2 ARG PROFILE=default -ARG TAG=11.0.8-11.41.23 -ARG JAVA_PATH=/usr/lib/jvm/zulu11-ca-amd64 +ARG TAG=11.0.13-11.52.13 +ARG JAVA_PATH=/usr/lib/jvm/zulu11 # First stage is the build environment. # zulu-openjdk images are based on Ubuntu. @@ -26,7 +26,6 @@ FROM azul/zulu-openjdk:${TAG} as builder ENV BUILD_DEPS \ ca-certificates \ zip \ - python \ python3 \ git \ bzip2 \ diff --git a/README.md b/README.md index 63fe80db16e..47371fdf11b 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,6 @@ The following packages are required: * zip * curl * unzip -* python2.7 * python3 (needed by Bazel) ### Build ONOS from source diff --git a/WORKSPACE-docker b/WORKSPACE-docker index 1b2b0d7047b..d9c9b4695f2 100644 --- a/WORKSPACE-docker +++ b/WORKSPACE-docker @@ -7,7 +7,7 @@ # local_java_repository for docker based builds load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_repository") -ABSOLUTE_JAVABASE = "/usr/lib/jvm/zulu11-ca-amd64" +ABSOLUTE_JAVABASE = "/usr/lib/jvm/zulu11" local_java_repository( name = "dockerjdk", diff --git a/tools/build/bazel/dependencies_pom_generator.py b/tools/build/bazel/dependencies_pom_generator.py index f2df0c2e920..8c6483f6a36 100755 --- a/tools/build/bazel/dependencies_pom_generator.py +++ b/tools/build/bazel/dependencies_pom_generator.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2019-present Open Networking Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ def resolve(mvn_coord): mvn_pieces = mvn_coord.split(":") if mvn_pieces[0] != "mvn": - raise ("Invalid Maven coordinate: %s" % mvn_coord) + raise ValueError("Invalid Maven coordinate: %s" % mvn_coord) return dict( groupId=mvn_pieces[1], artifactId=mvn_pieces[2], @@ -79,7 +79,7 @@ def generate_pom(out_file, template_file, provided_deps, test_deps, deps, var_di dep_template.format(scope='test', **deps[x]) for x in test_deps]) else: - for old, new in var_dict.items(): + for old, new in list(var_dict.items()): line = line.replace(old, new) new_lines.append(line) @@ -111,7 +111,7 @@ def generate_pom(out_file, template_file, provided_deps, test_deps, deps, var_di for var in args.vars: pieces = var.split('=') if len(pieces) != 2: - raise ("Invalid var '%s'" % var) + raise ValueError("Invalid var '%s'" % var) processed_vars["" % pieces[0]] = pieces[1] generate_pom( diff --git a/tools/build/bazel/onos_app_bundler.py b/tools/build/bazel/onos_app_bundler.py index 6c4ca68716e..5aa77a066ab 100755 --- a/tools/build/bazel/onos_app_bundler.py +++ b/tools/build/bazel/onos_app_bundler.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2018-present Open Networking Foundation @@ -60,5 +60,5 @@ def generateOar(output, files=[]): print('There must be an even number of args: file mvn_coords') sys.exit(2) - files = zip(*[iter(args)]*2) + files = list(zip(*[iter(args)]*2)) generateOar(output, files) diff --git a/tools/build/bazel/onos_app_tools.py b/tools/build/bazel/onos_app_tools.py index 9979ab516c6..43cab17e27e 100755 --- a/tools/build/bazel/onos_app_tools.py +++ b/tools/build/bazel/onos_app_tools.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2018-present Open Networking Foundation @@ -207,7 +207,7 @@ def write(name, msg): values['category'] = options.category values['url'] = options.url elif options.write_app: - sys.stderr.write('ERROR: Feature Name, Version, and Title are required\n') + sys.stderr.write('ERROR: App Name, Origin, Category and URL are required\n') sys.stderr.flush() sys.exit(1) diff --git a/tools/build/bazel/osgi_feature_bundler.py b/tools/build/bazel/osgi_feature_bundler.py index a4550e08fd5..f390c88eeca 100755 --- a/tools/build/bazel/osgi_feature_bundler.py +++ b/tools/build/bazel/osgi_feature_bundler.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2018-present Open Networking Foundation @@ -56,5 +56,5 @@ def writeFeatureBundle(output, files=[]): print('There must be an even number of args: file mvn_coords') sys.exit(2) - files = zip(*[iter(args)]*2) + files = list(zip(*[iter(args)]*2)) writeFeatureBundle(output, files) diff --git a/tools/build/bazel/pom_generator.py b/tools/build/bazel/pom_generator.py index 2e16f4984a3..1ad54ec9be5 100755 --- a/tools/build/bazel/pom_generator.py +++ b/tools/build/bazel/pom_generator.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2018-present Open Networking Foundation @@ -49,7 +49,7 @@ def write(name, msg): with open(name, "w") as file: file.write(msg) else: - print msg + print(msg) def write_pom(output, coords, deps): @@ -70,7 +70,7 @@ def write_pom(output, coords, deps): import sys if len(sys.argv) < 3: - print 'usage: pom_generator pom.xml maven_coords dep_coords1 dep_coords2 ...' + print('usage: pom_generator pom.xml maven_coords dep_coords1 dep_coords2 ...') sys.exit(1) output = sys.argv[1] diff --git a/tools/build/onos-close-staging b/tools/build/onos-close-staging index e70d1194c15..1e37ef39565 100755 --- a/tools/build/onos-close-staging +++ b/tools/build/onos-close-staging @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # This script finds an open staging repository, checks that it contains an # expected artifact, attemps to close the repository, and checks that it is closed. @@ -29,7 +29,7 @@ def get(url): resp.raise_for_status() return resp except requests.exceptions.HTTPError as e: - print 'Encountered error:', e + print('Encountered error:', e) error = e time.sleep(1) if error: @@ -46,7 +46,7 @@ def post(url, data): resp.raise_for_status() return resp except requests.exceptions.HTTPError as e: - print 'Encountered error:', e + print('Encountered error:', e) error = e time.sleep(1) if error: @@ -64,11 +64,11 @@ def getStagingRepo(groupId): repos.append(( entry['repositoryId'], entry['profileId'] )) if len(repos) > 1: - print 'Aborting... too many open staging repos' - print repos + print('Aborting... too many open staging repos') + print(repos) sys.exit(1) elif len(repos) == 0: - print 'Aborting... there are no open staging repos' + print('Aborting... there are no open staging repos') sys.exit(1) return repos[0] @@ -131,8 +131,8 @@ def checkClose(repositoryId): if event['name'] == 'repositoryClosed': return True elif event['name'] == 'repositoryCloseFailed': - print 'Aborting... repository failed to close' - print json.dumps(activity, sort_keys=True, indent=2, separators=(',', ': ')) + print('Aborting... repository failed to close') + print(json.dumps(activity, sort_keys=True, indent=2, separators=(',', ': '))) sys.exit(1) return False @@ -144,12 +144,12 @@ def waitClosed(repositoryId): sys.stdout.write('.') sys.stdout.flush() time.sleep(2) - print ' Closed.' + print(' Closed.') if __name__ == '__main__': repositoryId, profileId = getStagingRepo(GROUP_ID) - print 'Repository Id:', repositoryId - print 'Profile Id:', profileId + print('Repository Id:', repositoryId) + print('Profile Id:', profileId) checkStagingRepo(repositoryId, ARTIFACT, GROUP_ID, VERSION) @@ -158,5 +158,5 @@ if __name__ == '__main__': waitClosed(repositoryId) if '-d' in sys.argv: - print 'Dropping repo %s' % repositoryId + print('Dropping repo %s' % repositoryId) dropRepo(repositoryId, profileId) diff --git a/tools/build/onos-release-prerequisites b/tools/build/onos-release-prerequisites index 92e201deb21..c1605ac2724 100755 --- a/tools/build/onos-release-prerequisites +++ b/tools/build/onos-release-prerequisites @@ -50,7 +50,7 @@ function testJavaVersion { # Tests availability of the required tools function testToolchain { - for tool in bash python git java javac mvn tar; do + for tool in bash python3 git java javac mvn tar; do testTool $tool; done testGerritTool diff --git a/tools/build/onos-upload-artifacts.py b/tools/build/onos-upload-artifacts.py index a9b24c55db9..d5f007957f7 100755 --- a/tools/build/onos-upload-artifacts.py +++ b/tools/build/onos-upload-artifacts.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2018-present Open Networking Foundation @@ -147,8 +147,8 @@ def stage_file(file, repo_id, dest): with open(file, 'rb') as f: r = requests.post(url, data=f.read(), headers=headers, auth=(SONATYPE_USER, SONATYPE_PASSWORD)) if r.status_code != 201: - print (r.status_code) - print (r.text) + print((r.status_code)) + print((r.text)) sys.exit(1) else: # deploy to local repo @@ -165,7 +165,7 @@ def stage_files(files, dest): def upload_file(src, dest): - print ("publishing: " + dest.replace("org/onosproject", "")) + print(("publishing: " + dest.replace("org/onosproject", ""))) files = generate_metadata_files(src, dest) stage_files(files, dest) @@ -174,7 +174,7 @@ def upload_file(src, dest): import sys if len(sys.argv) < 2: - print 'USAGE: upload-maven-artifacts catalog-file-name [nexus root url]' + print('USAGE: upload-maven-artifacts catalog-file-name [nexus root url]') sys.exit(1) input_list_file = sys.argv[1] @@ -191,20 +191,20 @@ def upload_file(src, dest): if destination_repo_url is not None: if SONATYPE_USER is None: - print "Environment variable SONATYPE_USER must be set" + print("Environment variable SONATYPE_USER must be set") sys.exit(1) if SONATYPE_PASSWORD is None: - print "Environment variable SONATYPE_PASSWORD must be set" + print("Environment variable SONATYPE_PASSWORD must be set") sys.exit(1) if SONATYPE_PROFILE is None: - print "Environment variable SONATYPE_PROFILE must be set" + print("Environment variable SONATYPE_PROFILE must be set") sys.exit(1) - print ("Uploading to remote repo: " + destination_repo_url) + print(("Uploading to remote repo: " + destination_repo_url)) else: - print ("Installing in local repo: " + local_maven_repo) + print(("Installing in local repo: " + local_maven_repo)) list_file = open(input_list_file, "r") lines = list_file.readlines() diff --git a/tools/build/uploadToS3.py b/tools/build/uploadToS3.py index 720878c288d..c5dc8410846 100755 --- a/tools/build/uploadToS3.py +++ b/tools/build/uploadToS3.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Upload a file to S3 """ @@ -20,7 +20,7 @@ def uploadFile( filename, dest=None, bucket=None, overwrite=False ): key = basename( filename ) else: key = dest + basename( filename ) #FIXME add the / - print '* Uploading', filename, 'to bucket', bucket, 'as', key + print('* Uploading', filename, 'to bucket', bucket, 'as', key) stdout.flush() start = time() def callback( transmitted, size ): @@ -28,9 +28,9 @@ def callback( transmitted, size ): elapsed = time() - start percent = 100.0 * transmitted / size kbps = .001 * transmitted / elapsed - print ( '\r%d bytes transmitted of %d (%.2f%%),' + print(( '\r%d bytes transmitted of %d (%.2f%%),' ' %.2f KB/sec ' % - ( transmitted, size, percent, kbps ) ), + ( transmitted, size, percent, kbps ) ), end='\n') stdout.flush() conn = S3Connection() bucket = conn.get_bucket( bucket ) @@ -38,11 +38,11 @@ def callback( transmitted, size ): k.key = key if overwrite or not k.exists(): k.set_contents_from_filename( filename, cb=callback, num_cb=100 ) - print + print() elapsed = time() - start - print "* elapsed time: %.2f seconds" % elapsed + print("* elapsed time: %.2f seconds" % elapsed) else: - print 'file', basename( filename ), 'already exists in', bucket.name + print('file', basename( filename ), 'already exists in', bucket.name) def testAccess( bucket=None ): "Verify access to a bucket" @@ -51,7 +51,7 @@ def testAccess( bucket=None ): conn = S3Connection() bucket = conn.get_bucket( bucket ) - print bucket.get_acl() + print(bucket.get_acl()) if __name__ == '__main__': diff --git a/tools/dev/Dockerfile-bazel b/tools/dev/Dockerfile-bazel index 4860e04a51c..1eae2dfacdb 100644 --- a/tools/dev/Dockerfile-bazel +++ b/tools/dev/Dockerfile-bazel @@ -19,8 +19,8 @@ # COPY command incompatibilities). # e.g. docker build -t onosproject/onos:latest -f $ONOS_ROOT/tools/dev/Dockerfile-bazel $ONOS_ROOT/bazel-bin -ARG TAG=11.0.8-11.41.23 -ARG JAVA_PATH=/usr/lib/jvm/zulu11-ca-amd64 +ARG TAG=11.0.13-11.52.13 +ARG JAVA_PATH=/usr/lib/jvm/zulu11 # Firts stage to copy and untar ONOS archive inside the container. FROM bitnami/minideb:jessie as untar diff --git a/tools/dev/Dockerfile-yourkit b/tools/dev/Dockerfile-yourkit index 176c3b3d37e..61fbe4f2018 100644 --- a/tools/dev/Dockerfile-yourkit +++ b/tools/dev/Dockerfile-yourkit @@ -17,8 +17,8 @@ ARG JOBS=2 ARG PROFILE=default -ARG TAG=11.0.8-11.41.23 -ARG JAVA_PATH=/usr/lib/jvm/zulu11-ca-amd64 +ARG TAG=11.0.13-11.52.13 +ARG JAVA_PATH=/usr/lib/jvm/zulu11 # First stage is the build environment. # zulu-openjdk images are based on Ubuntu. @@ -30,7 +30,6 @@ ARG ONOS_YOURKIT ENV BUILD_DEPS \ ca-certificates \ zip \ - python \ python3 \ git \ bzip2 \ diff --git a/tools/dev/bash_profile b/tools/dev/bash_profile index eaff4b38844..f6a954341af 100644 --- a/tools/dev/bash_profile +++ b/tools/dev/bash_profile @@ -77,7 +77,7 @@ alias olo='filterLog' alias ole='olo "ERROR|WARN|Exception|Error"' # Pretty-print JSON output -alias pp='python -m json.tool' +alias pp='python3 -m json.tool' # Short-hand to launch Java API docs, REST API docs and ONOS GUI alias docs='open $ONOS_ROOT/docs/target/site/apidocs/index.html' diff --git a/tools/dev/bin/onos-gen-bazel-project b/tools/dev/bin/onos-gen-bazel-project index 355193a39be..007a13a95ee 100755 --- a/tools/dev/bin/onos-gen-bazel-project +++ b/tools/dev/bin/onos-gen-bazel-project @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python3 import os import subprocess @@ -31,8 +31,9 @@ test_sources: def get_library_targets(): this_dir = os.path.dirname(os.path.realpath(__file__)) + # NOTE that here we depends on bazel generating utf-8 bytes out = subprocess.check_output([ - "bazel", "query", "kind(\"java_library\", //...:all)"], cwd=this_dir) + "bazel", "query", "kind(\"java_library\", //...:all)"], cwd=this_dir, encoding='UTF-8') return out.strip().split("\n") @@ -43,12 +44,12 @@ def gen_project(): "script_name": os.path.basename(__file__), "language_level": JAVA_LANGUAGE_LEVEL, "exclude_dirs": "\n".join( - map(lambda x: " -" + x, EXCLUDE_DIRECTORIES)), - "targets": "\n".join(map(lambda x: " " + x, all_targets)), - "test_sources": "\n".join(map(lambda x: " " + x, TEST_SOURCES)), + [" -" + x for x in EXCLUDE_DIRECTORIES]), + "targets": "\n".join([" " + x for x in all_targets]), + "test_sources": "\n".join([" " + x for x in TEST_SOURCES]), } return TEMPLATE.format(**data) if __name__ == "__main__": - print gen_project() + print(gen_project()) diff --git a/tools/package/onos_stage.py b/tools/package/onos_stage.py index 7a4865023b8..ac669065ec6 100755 --- a/tools/package/onos_stage.py +++ b/tools/package/onos_stage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright 2017-present Open Networking Foundation diff --git a/tools/package/runtime/bin/_check-json b/tools/package/runtime/bin/_check-json index 1eef25ba971..0ebaf2caa53 100644 --- a/tools/package/runtime/bin/_check-json +++ b/tools/package/runtime/bin/_check-json @@ -22,7 +22,7 @@ # ----------------------------------------------------------------------------- checkJson() { - cat ${1} | python -m json.tool >> /dev/null + cat ${1} | python3 -m json.tool >> /dev/null if [ "$?" -ne "0" ]; then echo "Not valid JSON File" && exit 1 fi diff --git a/tools/test/bin/atomix-gen-config b/tools/test/bin/atomix-gen-config index c3c89ac32b0..d32ca98c753 100755 --- a/tools/test/bin/atomix-gen-config +++ b/tools/test/bin/atomix-gen-config @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ usage: atomix-gen-config [-h] [-s PARTITION_SIZE] [-n NUM_PARTITIONS] [node_ip] [filename] [node_ip [node_ip ...]] @@ -112,7 +112,7 @@ if __name__ == '__main__': args = parser.parse_args() filename = args.filename partition_size = args.partition_size - local_member_id = get_local_node(args.node) + local_member_id = get_local_node(args.node, args.nodes) local_member_address = get_local_address(args.node, args.nodes) nodes = get_nodes(args.nodes) num_partitions = args.num_partitions @@ -158,4 +158,4 @@ if __name__ == '__main__': with open(filename, 'w') as f: f.write(output) else: - print output + print(output) diff --git a/tools/test/bin/onos-gen-config b/tools/test/bin/onos-gen-config index b73df39335f..e214d2fc5d6 100755 --- a/tools/test/bin/onos-gen-config +++ b/tools/test/bin/onos-gen-config @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ usage: onos-gen-config [-h] [-s PARTITION_SIZE] [-n NUM_PARTITIONS] [filename] [node_ip [node_ip ...]] @@ -87,7 +87,7 @@ if __name__ == '__main__': args = parser.parse_args() node = args.node - print node + print(node) filename = args.filename nodes = get_nodes(args.nodes) @@ -106,4 +106,4 @@ if __name__ == '__main__': with open(filename, 'w') as f: f.write(output) else: - print output + print(output) From dd14a4e6111c321b0252ea5555fabe0b7b4d22d2 Mon Sep 17 00:00:00 2001 From: pierventre Date: Fri, 29 Jul 2022 21:57:16 +0200 Subject: [PATCH 233/235] [SDFAB-189] Update ONOS CI and test new image Fix api docs upload. Upload is done now in the CI script by using rsync (see ci-management) Change-Id: I29f435850cb74a72b50288725dd6e9508783dbce --- tools/build/onos-build-and-upload | 4 ++-- tools/build/onos-prepare-docs | 21 +++++++++++++++++++++ tools/build/onos-upload-docs | 27 --------------------------- 3 files changed, 23 insertions(+), 29 deletions(-) create mode 100755 tools/build/onos-prepare-docs delete mode 100755 tools/build/onos-upload-docs diff --git a/tools/build/onos-build-and-upload b/tools/build/onos-build-and-upload index 1d6697303a6..fdf3f9294cc 100755 --- a/tools/build/onos-build-and-upload +++ b/tools/build/onos-build-and-upload @@ -19,8 +19,8 @@ fi onos-release $VERSION $DRY_RUN if [ $dryRun -eq 0 ]; then - # upload docs - onos-upload-docs ${WIKI_USER} + # prepare docs + onos-prepare-docs # spot check that uploaded artifacts are correct # TODO - implement this for bazel diff --git a/tools/build/onos-prepare-docs b/tools/build/onos-prepare-docs new file mode 100755 index 00000000000..b062264738b --- /dev/null +++ b/tools/build/onos-prepare-docs @@ -0,0 +1,21 @@ +#!/bin/bash +# ----------------------------------------------------------------------------- +# Uploads ONOS Java API docs. +# ----------------------------------------------------------------------------- + +set -e + +[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 +. $ONOS_ROOT/tools/build/envDefaults + +docs="bazel-bin/docs/external.jar" +docs_path="bazel-bin/docs/tmp" +mkdir -p ${docs_path} + +ONOS_VERSION_STRING=${ONOS_VERSION} +if echo ${ONOS_VERSION_STRING} | grep -- '-b'; then + echo "ONOS version ${ONOS_VERSION_STRING} is a beta. Skipping" + exit 0 +fi + +unzip ${docs} -d ${docs_path} diff --git a/tools/build/onos-upload-docs b/tools/build/onos-upload-docs deleted file mode 100755 index 0e4320c10cf..00000000000 --- a/tools/build/onos-upload-docs +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# ----------------------------------------------------------------------------- -# Uploads ONOS Java API docs. -# ----------------------------------------------------------------------------- - -set -e - -[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 -. $ONOS_ROOT/tools/build/envDefaults - -user=${1:-${WIKI_USER:-$USER}} -remote=$user@api.onosproject.org - -docs="bazel-bin/docs/external.jar" - -ONOS_VERSION_STRING=$ONOS_VERSION -if echo $ONOS_VERSION_STRING | grep -- '-b'; then - echo "ONOS version $ONOS_VERSION_STRING is a beta. Skipping" - exit 0 -fi - -scp $docs $remote:/tmp/onos-apidocs-$ONOS_VERSION.tar.gz -ssh $remote " - mkdir -p /var/www/api/$ONOS_VERSION - cd /var/www/api/$ONOS_VERSION - unzip /tmp/onos-apidocs-$ONOS_VERSION.tar.gz -" From ffd47060d18b0102f5e93bb0323b935f3a59b4a3 Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Fri, 29 Jul 2022 21:17:26 +0000 Subject: [PATCH 234/235] Tagging 2.5.9 --- .../src/main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 2 +- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../ui/src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index eb1a4fe8ed6..4561031af3b 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.9-SNAPSHOT"); + private static Version version = Version.version("2.5.9"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index 30ec1948b62..a1a4983316d 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.9-SNAPSHOT" +ONOS_VERSION = "2.5.9" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index bde8fc1ef58..71356c8961c 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,7 +18,7 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.9-SNAPSHOT" +export ONOS_POM_VERSION="2.5.9" export ONOS_VERSION=${ONOS_VERSION:-2.5.9.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index feae3382ec7..8ed02368a6e 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 2ab14871708..735369904ce 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index 1a236659792..b2d37225ba8 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 2630d4a09d1..9cf87673e0a 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 03335aad09e..7fd26c95c45 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 03a9bc0630e..97f50d6c9ea 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index fda0a86f51e..93c7c49fbff 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index e2050809ea8..f4858c024b2 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index b738ff7c8da..e16327c1148 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index d4883354056..8c943b4ebb3 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index afe66da42b1..33cab7dcb53 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 56d4a01131f..6c7c6316ae0 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index c07986a7748..e8b08f0f5a2 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index c8274de296c..52b8ead24dd 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 7fcf51cd784..0bc437dcf88 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 25716aafa7b..05e47ff09e3 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9-SNAPSHOT + 2.5.9 onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 9ec86d111aa..27e122f5775 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.9-SNAPSHOT + 2.5.9 diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index c7255c74f48..0d71671cb19 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.9-SNAPSHOT" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.9" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT From 8ba60ef746eddab1b86ee227a72250d3ec40243e Mon Sep 17 00:00:00 2001 From: ONOS Jenkins User Date: Fri, 29 Jul 2022 21:17:30 +0000 Subject: [PATCH 235/235] Starting snapshot 2.5.10-SNAPSHOT --- .../main/java/org/onosproject/core/impl/VersionManager.java | 2 +- tools/build/bazel/variables.bzl | 2 +- tools/build/envDefaults | 4 ++-- tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/pom.xml | 2 +- tools/package/archetypes/rest/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/ui2/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/META-INF/maven/archetype-metadata.xml | 2 +- tools/test/bin/onos-archetypes-test | 2 +- 21 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java index 4561031af3b..ad5e9f04463 100644 --- a/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java +++ b/core/net/src/main/java/org/onosproject/core/impl/VersionManager.java @@ -38,7 +38,7 @@ public class VersionManager implements VersionService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("2.5.9"); + private static Version version = Version.version("2.5.10-SNAPSHOT"); @Activate protected void activate() { diff --git a/tools/build/bazel/variables.bzl b/tools/build/bazel/variables.bzl index a1a4983316d..4fd695dd86a 100644 --- a/tools/build/bazel/variables.bzl +++ b/tools/build/bazel/variables.bzl @@ -1,4 +1,4 @@ -ONOS_VERSION = "2.5.9" +ONOS_VERSION = "2.5.10-SNAPSHOT" ONOS_ARTIFACT_BASE = "onos-" ONOS_GROUP_ID = "org.onosproject" ONOS_ORIGIN = "ONOS Community" diff --git a/tools/build/envDefaults b/tools/build/envDefaults index 71356c8961c..16e093f0a8b 100644 --- a/tools/build/envDefaults +++ b/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$ONOS_ROOT/tools/build:$PATH" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="2.5.9" -export ONOS_VERSION=${ONOS_VERSION:-2.5.9.$BUILD_NUMBER} +export ONOS_POM_VERSION="2.5.10-SNAPSHOT" +export ONOS_VERSION=${ONOS_VERSION:-2.5.10.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/tools/package/archetypes/api/pom.xml b/tools/package/archetypes/api/pom.xml index 8ed02368a6e..cfa81b3e1cf 100644 --- a/tools/package/archetypes/api/pom.xml +++ b/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-api-archetype diff --git a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml index 735369904ce..eaf873cb3e9 100644 --- a/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/api/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -29,7 +29,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/bundle/pom.xml b/tools/package/archetypes/bundle/pom.xml index b2d37225ba8..7cbb24d19c6 100644 --- a/tools/package/archetypes/bundle/pom.xml +++ b/tools/package/archetypes/bundle/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-bundle-archetype diff --git a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml index 9cf87673e0a..5b701f528e5 100644 --- a/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/cli/pom.xml b/tools/package/archetypes/cli/pom.xml index 7fd26c95c45..d79025decba 100644 --- a/tools/package/archetypes/cli/pom.xml +++ b/tools/package/archetypes/cli/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-cli-archetype diff --git a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml index 97f50d6c9ea..e0df630b5de 100644 --- a/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/cli/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml index 93c7c49fbff..14c62876b78 100644 --- a/tools/package/archetypes/pom.xml +++ b/tools/package/archetypes/pom.xml @@ -28,7 +28,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT pom ONOS archetypes project diff --git a/tools/package/archetypes/rest/pom.xml b/tools/package/archetypes/rest/pom.xml index f4858c024b2..6d744fa3373 100644 --- a/tools/package/archetypes/rest/pom.xml +++ b/tools/package/archetypes/rest/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-rest-archetype diff --git a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml index e16327c1148..a132e8068f8 100644 --- a/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/rest/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -35,7 +35,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/ui/pom.xml b/tools/package/archetypes/ui/pom.xml index 8c943b4ebb3..4792c1ce6ad 100644 --- a/tools/package/archetypes/ui/pom.xml +++ b/tools/package/archetypes/ui/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-ui-archetype diff --git a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml index 33cab7dcb53..7b001a95cd9 100644 --- a/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -37,7 +37,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/ui2/pom.xml b/tools/package/archetypes/ui2/pom.xml index 6c7c6316ae0..f103aec03bc 100644 --- a/tools/package/archetypes/ui2/pom.xml +++ b/tools/package/archetypes/ui2/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-ui2-archetype diff --git a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml index e8b08f0f5a2..e84b95001f3 100644 --- a/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/ui2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -75,7 +75,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/uitab/pom.xml b/tools/package/archetypes/uitab/pom.xml index 52b8ead24dd..36ceee6a64c 100644 --- a/tools/package/archetypes/uitab/pom.xml +++ b/tools/package/archetypes/uitab/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-uitab-archetype diff --git a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml index 0bc437dcf88..ea77f191cdc 100644 --- a/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitab/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/package/archetypes/uitopo/pom.xml b/tools/package/archetypes/uitopo/pom.xml index 05e47ff09e3..707916b07e7 100644 --- a/tools/package/archetypes/uitopo/pom.xml +++ b/tools/package/archetypes/uitopo/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 2.5.9 + 2.5.10-SNAPSHOT onos-uitopo-archetype diff --git a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml index 27e122f5775..fdc0699b25e 100644 --- a/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/tools/package/archetypes/uitopo/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -38,7 +38,7 @@ - 2.5.9 + 2.5.10-SNAPSHOT diff --git a/tools/test/bin/onos-archetypes-test b/tools/test/bin/onos-archetypes-test index 0d71671cb19..0a883b96896 100755 --- a/tools/test/bin/onos-archetypes-test +++ b/tools/test/bin/onos-archetypes-test @@ -19,7 +19,7 @@ _EOF_ set -e export AROOT=${ONOS_STAGE_ROOT:-/tmp}/foo -export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.9" +export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=2.5.10-SNAPSHOT" rm -fr $AROOT 2>/dev/null mkdir -p $AROOT