From a5ae2adad959861f3e3d15a797b0b9414e69bbb4 Mon Sep 17 00:00:00 2001 From: Jian Li Date: Fri, 5 Oct 2018 18:16:41 +0900 Subject: [PATCH 01/19] Fix: resolve NPE with empty configMap setup for openstacktelemetry Change-Id: Ib3f50f34845ddc631a928a037810e1fa688fa669 --- .../config/DefaultPrometheusTelemetryConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java index b22f053d55..33d1d2e498 100644 --- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java +++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java @@ -124,7 +124,6 @@ public final class DefaultPrometheusTelemetryConfig implements PrometheusTelemet @Override public PrometheusTelemetryConfig build() { checkNotNull(address, "Prometheus exporter binding address cannot be null"); - checkNotNull(configMap, "Config map cannot be null"); return new DefaultPrometheusTelemetryConfig(address, port, configMap); } } From 651c6878e421c1e1b30df189f9e759f867df33ff Mon Sep 17 00:00:00 2001 From: cboling Date: Fri, 5 Oct 2018 11:09:22 -0500 Subject: [PATCH 02/19] ONOS-7807: Fix to provide inner-tag of Q-in-Q flows correctly to VOLTHA Change-Id: I056c22a34b5a21e8969ecaa43d50d3f9c86b115d --- .../java/org/onosproject/driver/pipeline/OltPipeline.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 6fcf5f48ef..19532cd59f 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 @@ -430,7 +430,11 @@ public class OltPipeline extends AbstractHandlerBehaviour implements Pipeliner { 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()); + + long cvid = ((VlanIdCriterion) innerVlan).vlanId().toShort(); + long outPort = output.port().toLong() & 0x0FFFFFFFFL; + + Criterion metadata = Criteria.matchMetadata((cvid << 32) | outPort); if (outerVlan == null || innerVlan == null || inport == null) { log.error("Forwarding objective is underspecified: {}", fwd); @@ -445,7 +449,7 @@ public class OltPipeline extends AbstractHandlerBehaviour implements Pipeliner { .forDevice(deviceId) .makePermanent() .withPriority(fwd.priority()) - .withSelector(buildSelector(inport, outerVlan, bullshit)) + .withSelector(buildSelector(inport, outerVlan, metadata)) .withTreatment(buildTreatment(popAndRewrite.getLeft(), Instructions.transition(QQ_TABLE))); From e03d9ba071c542d2995af81103cfc81f8ea45954 Mon Sep 17 00:00:00 2001 From: Jordan Halterman Date: Wed, 3 Oct 2018 09:40:22 -0700 Subject: [PATCH 03/19] Upgrade to Atomix 3.0.6 Change-Id: Ieea4fa4b30509ecd2f54a7b67dd0734b6dd061b9 --- lib/BUCK | 74 ++++++++++++------------ lib/deps.json | 18 +++--- tools/build/bazel/generate_workspace.bzl | 56 +++++++++--------- tools/test/bin/atomix-install | 2 +- 4 files changed, 75 insertions(+), 75 deletions(-) diff --git a/lib/BUCK b/lib/BUCK index c20205108d..adaba59d9c 100644 --- a/lib/BUCK +++ b/lib/BUCK @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Thu, 27 Sep 2018 15:25:26 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Wed, 3 Oct 2018 16:27:23 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** pass_thru_pom( @@ -242,82 +242,82 @@ remote_jar ( remote_jar ( name = 'atomix', - out = 'atomix-3.0.5.jar', - url = 'mvn:io.atomix:atomix:jar:3.0.5', - sha1 = '758df25aed743d625930654d2e589cc0084efdbc', - maven_coords = 'io.atomix:atomix:3.0.5', + out = 'atomix-3.0.6.jar', + url = 'mvn:io.atomix:atomix:jar:3.0.6', + sha1 = 'a8c1401b9f5d3757c8cfa2b7905d928825507cf8', + maven_coords = 'io.atomix:atomix:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-cluster', - out = 'atomix-cluster-3.0.5.jar', - url = 'mvn:io.atomix:atomix-cluster:jar:3.0.5', - sha1 = '3ac50436eaf47fa5ba7553b37628aea7fa8b8deb', - maven_coords = 'io.atomix:atomix-cluster:3.0.5', + out = 'atomix-cluster-3.0.6.jar', + url = 'mvn:io.atomix:atomix-cluster:jar:3.0.6', + sha1 = '8d91e0caf5c2739476826b32bdcf21afc32bf433', + maven_coords = 'io.atomix:atomix-cluster:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-gossip', - out = 'atomix-gossip-3.0.5.jar', - url = 'mvn:io.atomix:atomix-gossip:jar:3.0.5', - sha1 = '63c365b00b0164aa067e55febca9a4df253e8ab2', - maven_coords = 'io.atomix:atomix-gossip:3.0.5', + out = 'atomix-gossip-3.0.6.jar', + url = 'mvn:io.atomix:atomix-gossip:jar:3.0.6', + sha1 = '5db475ea2702fabfb8eb19079bc07979bc706c17', + maven_coords = 'io.atomix:atomix-gossip:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-primary-backup', - out = 'atomix-primary-backup-3.0.5.jar', - url = 'mvn:io.atomix:atomix-primary-backup:jar:3.0.5', - sha1 = 'f444f8f733457182a096786dd2b6a4369d1feebc', - maven_coords = 'io.atomix:atomix-primary-backup:3.0.5', + out = 'atomix-primary-backup-3.0.6.jar', + url = 'mvn:io.atomix:atomix-primary-backup:jar:3.0.6', + sha1 = 'af3a4475a54a83fe8eafd58925c04db608eec150', + maven_coords = 'io.atomix:atomix-primary-backup:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-primitive', - out = 'atomix-primitive-3.0.5.jar', - url = 'mvn:io.atomix:atomix-primitive:jar:3.0.5', - sha1 = 'e383b171c202df84af7e8510034714bc52831115', - maven_coords = 'io.atomix:atomix-primitive:3.0.5', + out = 'atomix-primitive-3.0.6.jar', + url = 'mvn:io.atomix:atomix-primitive:jar:3.0.6', + sha1 = 'bb65acf0dd5e805ffc27f0f768e2fe5310d83a71', + maven_coords = 'io.atomix:atomix-primitive:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-raft', - out = 'atomix-raft-3.0.5.jar', - url = 'mvn:io.atomix:atomix-raft:jar:3.0.5', - sha1 = '0e7345cd475adb6e1f5af8ec48fd6faeb1261f84', - maven_coords = 'io.atomix:atomix-raft:3.0.5', + out = 'atomix-raft-3.0.6.jar', + url = 'mvn:io.atomix:atomix-raft:jar:3.0.6', + sha1 = 'f3497269b021f8794ba26296f6779977fd213f0e', + maven_coords = 'io.atomix:atomix-raft:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-storage', - out = 'atomix-storage-3.0.5.jar', - url = 'mvn:io.atomix:atomix-storage:jar:3.0.5', - sha1 = '2967037f437ce85c191795baeb65535d76b027fe', - maven_coords = 'io.atomix:atomix-storage:3.0.5', + out = 'atomix-storage-3.0.6.jar', + url = 'mvn:io.atomix:atomix-storage:jar:3.0.6', + sha1 = '0cebbfd8932c7ed27d173d9f3487687317905f5d', + maven_coords = 'io.atomix:atomix-storage:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-utils', - out = 'atomix-utils-3.0.5.jar', - url = 'mvn:io.atomix:atomix-utils:jar:3.0.5', - sha1 = '63afb65deccb9631b8017d6aa779b337f920cef0', - maven_coords = 'io.atomix:atomix-utils:3.0.5', + out = 'atomix-utils-3.0.6.jar', + url = 'mvn:io.atomix:atomix-utils:jar:3.0.6', + sha1 = 'd99e63b9df25b59baea5c2fedbd6ad9dab6de59f', + maven_coords = 'io.atomix:atomix-utils:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'classgraph', - out = 'classgraph-4.0.6.jar', - url = 'mvn:io.github.classgraph:classgraph:jar:4.0.6', - sha1 = '7fe1e7464ffd40c7333b8bbf53c4d73a7cbd7b4c', - maven_coords = 'io.github.classgraph:classgraph:4.0.6', + out = 'classgraph-4.2.3.jar', + url = 'mvn:io.github.classgraph:classgraph:jar:4.2.3', + sha1 = '5c9bfb002097a6cf6c7134821954e24326db3a7b', + maven_coords = 'io.github.classgraph:classgraph:4.2.3', visibility = [ 'PUBLIC' ], ) diff --git a/lib/deps.json b/lib/deps.json index a5bd894a65..c9561559c1 100644 --- a/lib/deps.json +++ b/lib/deps.json @@ -138,15 +138,15 @@ "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.0.4", - "atomix": "mvn:io.atomix:atomix:3.0.5", - "atomix-cluster": "mvn:io.atomix:atomix-cluster:3.0.5", - "atomix-gossip": "mvn:io.atomix:atomix-gossip:3.0.5", - "atomix-primary-backup": "mvn:io.atomix:atomix-primary-backup:3.0.5", - "atomix-primitive": "mvn:io.atomix:atomix-primitive:3.0.5", - "atomix-raft": "mvn:io.atomix:atomix-raft:3.0.5", - "atomix-storage": "mvn:io.atomix:atomix-storage:3.0.5", - "atomix-utils": "mvn:io.atomix:atomix-utils:3.0.5", - "classgraph": "mvn:io.github.classgraph:classgraph:4.0.6", + "atomix": "mvn:io.atomix:atomix:3.0.6", + "atomix-cluster": "mvn:io.atomix:atomix-cluster:3.0.6", + "atomix-gossip": "mvn:io.atomix:atomix-gossip:3.0.6", + "atomix-primary-backup": "mvn:io.atomix:atomix-primary-backup:3.0.6", + "atomix-primitive": "mvn:io.atomix:atomix-primitive:3.0.6", + "atomix-raft": "mvn:io.atomix:atomix-raft:3.0.6", + "atomix-storage": "mvn:io.atomix:atomix-storage:3.0.6", + "atomix-utils": "mvn:io.atomix:atomix-utils:3.0.6", + "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", "commons-collections": "mvn:commons-collections:commons-collections:3.2.2", diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index 500fd0bcfa..3d93329fe9 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, 27 Sep 2018 15:23:13 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Wed, 3 Oct 2018 16:26:56 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -156,57 +156,57 @@ def generated_maven_jars(): if "atomix" not in native.existing_rules(): java_import_external( name = "atomix", - jar_sha256 = "72dad2fa314a8fdc3f10ef0a7e73a667c370cd576863e483fa3f4bb6c82bbb2c", + jar_sha256 = "3007f7e5a8a768e8010ce53218746f1f594728a25b4905793159cc1bbfcff631", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix/3.0.5/atomix-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix/3.0.6/atomix-3.0.6.jar"], ) if "atomix_cluster" not in native.existing_rules(): java_import_external( name = "atomix_cluster", - jar_sha256 = "139a70b2b733c2fc5cd03d9e82e3075dc73ca54ed317ad7594d4c818f3b70506", + jar_sha256 = "e1e0f4d49e176433c0880a3dac5ebfa64c3673885ec8899f13ec4799100d8d23", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-cluster/3.0.5/atomix-cluster-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-cluster/3.0.6/atomix-cluster-3.0.6.jar"], ) if "atomix_gossip" not in native.existing_rules(): java_import_external( name = "atomix_gossip", - jar_sha256 = "34b92866b57d63636871a5d68e84acbad727237541bcbda572167990505f3e7a", + jar_sha256 = "0c9cc7f56bcd8018733f789579294dbfae1afa2b2e5954f4a4fd49b9d05cd6d0", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-gossip/3.0.5/atomix-gossip-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-gossip/3.0.6/atomix-gossip-3.0.6.jar"], ) if "atomix_primary_backup" not in native.existing_rules(): java_import_external( name = "atomix_primary_backup", - jar_sha256 = "1da0a4eff24cd259b75e7c8c39a7f6396bd3aec5d4b06d6740412dc9237f8aa3", + jar_sha256 = "889b38e96b872edda59e0864dc530c4d5c818e8d7aa109646df3912cc7f5efc7", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-primary-backup/3.0.5/atomix-primary-backup-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-primary-backup/3.0.6/atomix-primary-backup-3.0.6.jar"], ) if "atomix_primitive" not in native.existing_rules(): java_import_external( name = "atomix_primitive", - jar_sha256 = "80a7b4e0e2aee6ccbeab7a0f66485cd29affbf3f10abfd7740961223a0c76002", + jar_sha256 = "aaac2be34f2c4b832bf8fb2a7b0685680462b59168268bf210c89d7a8882baa8", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-primitive/3.0.5/atomix-primitive-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-primitive/3.0.6/atomix-primitive-3.0.6.jar"], ) if "atomix_raft" not in native.existing_rules(): java_import_external( name = "atomix_raft", - jar_sha256 = "7f27c11d3f5948190b53714d3a9a12d7a3c967fbe4d4bf0c8cbeb5a75715a78f", + jar_sha256 = "e19b58b84003c4d3fbbe824915ae3fccd4bba403a4d2ddf08e41027bcaead451", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-raft/3.0.5/atomix-raft-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-raft/3.0.6/atomix-raft-3.0.6.jar"], ) if "atomix_storage" not in native.existing_rules(): java_import_external( name = "atomix_storage", - jar_sha256 = "038a939d2bfc12488bc584c7144a9aeed4c91e0fe30ef514c522bdda352026f1", + jar_sha256 = "4be2fbd90e670bf1001c6e636695335a346745281de8383383c2d7d98623d71f", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-storage/3.0.5/atomix-storage-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-storage/3.0.6/atomix-storage-3.0.6.jar"], ) if "atomix_utils" not in native.existing_rules(): java_import_external( name = "atomix_utils", - jar_sha256 = "e928e252861f8689e450829eaf671c08f5e5afe3f95389866a8ae494ab165987", + jar_sha256 = "eade85cd718bc088f726de45c4b1d84d16d52ce6565fbd84873152df87a7c79c", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-utils/3.0.5/atomix-utils-3.0.5.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/atomix/atomix-utils/3.0.6/atomix-utils-3.0.6.jar"], ) if "classgraph" not in native.existing_rules(): java_import_external( name = "classgraph", - jar_sha256 = "b88663a3c775262afad6450d4670fc7c6afa64f4933db0d75e94d66f14230ef7", + jar_sha256 = "92a75236a6a30993895916b7eea4011c54d3182c9fa6734e8c23b30cc9500023", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.0.6/classgraph-4.0.6.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.2.3/classgraph-4.2.3.jar"], ) if "commons_codec" not in native.existing_rules(): java_import_external( name = "commons_codec", @@ -1363,15 +1363,15 @@ 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.0.4" -artifact_map["@atomix//:atomix"] = "mvn:io.atomix:atomix:jar:3.0.5" -artifact_map["@atomix_cluster//:atomix_cluster"] = "mvn:io.atomix:atomix-cluster:jar:3.0.5" -artifact_map["@atomix_gossip//:atomix_gossip"] = "mvn:io.atomix:atomix-gossip:jar:3.0.5" -artifact_map["@atomix_primary_backup//:atomix_primary_backup"] = "mvn:io.atomix:atomix-primary-backup:jar:3.0.5" -artifact_map["@atomix_primitive//:atomix_primitive"] = "mvn:io.atomix:atomix-primitive:jar:3.0.5" -artifact_map["@atomix_raft//:atomix_raft"] = "mvn:io.atomix:atomix-raft:jar:3.0.5" -artifact_map["@atomix_storage//:atomix_storage"] = "mvn:io.atomix:atomix-storage:jar:3.0.5" -artifact_map["@atomix_utils//:atomix_utils"] = "mvn:io.atomix:atomix-utils:jar:3.0.5" -artifact_map["@classgraph//:classgraph"] = "mvn:io.github.classgraph:classgraph:jar:4.0.6" +artifact_map["@atomix//:atomix"] = "mvn:io.atomix:atomix:jar:3.0.6" +artifact_map["@atomix_cluster//:atomix_cluster"] = "mvn:io.atomix:atomix-cluster:jar:3.0.6" +artifact_map["@atomix_gossip//:atomix_gossip"] = "mvn:io.atomix:atomix-gossip:jar:3.0.6" +artifact_map["@atomix_primary_backup//:atomix_primary_backup"] = "mvn:io.atomix:atomix-primary-backup:jar:3.0.6" +artifact_map["@atomix_primitive//:atomix_primitive"] = "mvn:io.atomix:atomix-primitive:jar:3.0.6" +artifact_map["@atomix_raft//:atomix_raft"] = "mvn:io.atomix:atomix-raft:jar:3.0.6" +artifact_map["@atomix_storage//:atomix_storage"] = "mvn:io.atomix:atomix-storage:jar:3.0.6" +artifact_map["@atomix_utils//:atomix_utils"] = "mvn:io.atomix:atomix-utils:jar:3.0.6" +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" artifact_map["@commons_collections//:commons_collections"] = "mvn:commons-collections:commons-collections:jar:3.2.2" diff --git a/tools/test/bin/atomix-install b/tools/test/bin/atomix-install index f6a04bf4b6..5a10413f13 100755 --- a/tools/test/bin/atomix-install +++ b/tools/test/bin/atomix-install @@ -47,7 +47,7 @@ ssh -tt $remote " [ -f $ATOMIX_INSTALL_DIR/bin/atomix-agent ] && echo \"Atomix is already installed\" && exit 1 sudo mkdir -p $ATOMIX_INSTALL_DIR && sudo chown ${ONOS_USER}:${ONOS_GROUP} $ATOMIX_INSTALL_DIR - sudo wget -O $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.0.5/atomix-dist-3.0.5.tar.gz + sudo wget -O $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.0.6/atomix-dist-3.0.6.tar.gz tar -xvf $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz -C $ATOMIX_INSTALL_DIR " From da0b559e915c3919ba83f6a864eb20813fcc84c1 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 14 Sep 2018 12:54:15 -0700 Subject: [PATCH 04/19] Recover missing pipeconf-merged driver at component activation needed to support rebooting ONOS nodes Change-Id: I44d34c649750ffc3d6b0205ee02c8c88391f1f8a (cherry picked from commit ccee77a024c14c3cef68457028ea71edc0555f54) --- .../pi/service/PiPipeconfMappingStore.java | 2 +- .../net/driver/impl/DriverManager.java | 41 ++++-- .../net/pi/impl/PiPipeconfManager.java | 135 ++++++++++++------ 3 files changed, 121 insertions(+), 57 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java b/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java index 2f275eefe8..4a9bc90a05 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java +++ b/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java @@ -31,7 +31,7 @@ import java.util.Set; public interface PiPipeconfMappingStore extends Store { /** - * Retrieves the id of the pipeconf deployed on a given device. + * Retrieves the id of the pipeconf associated to a given device. * * @param deviceId device identifier * @return PiPipeconfId diff --git a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java index f2ece6b4b6..f098c75580 100644 --- a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java +++ b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java @@ -120,21 +120,14 @@ public class DriverManager implements DriverService { Driver driver; - // Primary source of driver configuration is the network config. + // Special processing for devices with pipeconf. if (pipeconfService.ofDevice(deviceId).isPresent()) { - // Device has pipeconf associated, look for merged driver. - // Implementation of PiPipeconfService is expected to look for a - // base driver in network config. - PiPipeconfId pipeconfId = pipeconfService.ofDevice(deviceId).get(); - String mergedDriver = pipeconfService.getMergedDriver(deviceId, pipeconfId); - driver = mergedDriver != null ? lookupDriver(mergedDriver) : null; - if (driver != null) { - return driver; - } else { - log.error("Merged driver for {} with pipeconf {} not found, falling back.", - deviceId, pipeconfId); - } + // No fallback for pipeconf merged drivers. Returns null if driver + // does not exist. + return getPipeconfMergedDriver(deviceId); } + + // Primary source of driver configuration is the network config. BasicDeviceConfig cfg = networkConfigService.getConfig(deviceId, BasicDeviceConfig.class); driver = lookupDriver(cfg != null ? cfg.driver() : null); if (driver != null) { @@ -155,6 +148,28 @@ public class DriverManager implements DriverService { NO_DRIVER); } + private Driver getPipeconfMergedDriver(DeviceId deviceId) { + PiPipeconfId pipeconfId = pipeconfService.ofDevice(deviceId).orElse(null); + if (pipeconfId == null) { + log.warn("Missing pipeconf for {}, cannot produce a pipeconf merged driver", + deviceId); + return null; + } + String mergedDriverName = pipeconfService.getMergedDriver(deviceId, pipeconfId); + if (mergedDriverName == null) { + log.warn("Unable to get pipeconf merged driver for {} and {}", + deviceId, pipeconfId); + return null; + } + try { + return getDriver(mergedDriverName); + } catch (ItemNotFoundException e) { + log.warn("Specified pipeconf merged driver {} for {} not found", + mergedDriverName, deviceId); + return null; + } + } + private Driver lookupDriver(String driverName) { if (driverName != null) { try { diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java index a90149fb47..5044df0158 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java @@ -27,6 +27,7 @@ import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.apache.felix.scr.annotations.Service; import org.onlab.util.ItemNotFoundException; +import org.onlab.util.SharedExecutors; import org.onosproject.net.DeviceId; import org.onosproject.net.config.ConfigFactory; import org.onosproject.net.config.NetworkConfigRegistry; @@ -55,6 +56,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import static java.lang.String.format; @@ -75,6 +77,8 @@ public class PiPipeconfManager implements PiPipeconfService { private static final String MERGED_DRIVER_SEPARATOR = ":"; private static final String CFG_SCHEME = "piPipeconf"; + private static final int MISSING_DRIVER_WATCHDOG_INTERVAL = 5; // Seconds. + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) protected NetworkConfigRegistry cfgService; @@ -111,6 +115,13 @@ public class PiPipeconfManager implements PiPipeconfService { cfgService.registerConfigFactory(configFactory); driverAdminService.addListener(driverListener); checkMissingMergedDrivers(); + if (!missingMergedDrivers.isEmpty()) { + // Missing drivers should be created upon detecting registration + // events of a new pipeconf or a base driver. If, for any reason, we + // miss such event, here's a watchdog task. + SharedExecutors.getPoolThreadExecutor() + .execute(this::missingDriversWatchdogTask); + } log.info("Started"); } @@ -134,7 +145,7 @@ public class PiPipeconfManager implements PiPipeconfService { } pipeconfs.put(pipeconf.id(), pipeconf); log.info("New pipeconf registered: {}", pipeconf.id()); - executor.execute(() -> mergeAll(pipeconf.id())); + executor.execute(() -> attemptMergeAll(pipeconf.id())); } @Override @@ -306,64 +317,102 @@ public class PiPipeconfManager implements PiPipeconfService { } } - private void checkMissingMergedDrivers() { - cfgService.getSubjects(DeviceId.class, BasicDeviceConfig.class).stream() - .map(d -> cfgService.getConfig(d, BasicDeviceConfig.class)) - .map(BasicDeviceConfig::driver) - .filter(Objects::nonNull) - .filter(d -> getDriver(d) == null) - .forEach(driverName -> { - final String baseDriverName = getBaseDriverNameFromMerged(driverName); - final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(driverName); - if (baseDriverName == null || pipeconfId == null) { - // Not a merged driver. - return; - } - log.info("Detected missing merged driver: {}", driverName); - missingMergedDrivers.add(driverName); - // Attempt building the driver now if all pieces are present. - // If not, either a driver or pipeconf event will re-trigger - // the merge process. - if (getDriver(baseDriverName) != null - && pipeconfs.containsKey(pipeconfId)) { - mergedDriverName(baseDriverName, pipeconfId); - } - }); + private boolean driverExists(String name) { + return getDriver(name) != null; } - private void mergeAll(String baseDriverName) { + private void checkMissingMergedDriver(DeviceId deviceId) { + final PiPipeconfId pipeconfId = pipeconfMappingStore.getPipeconfId(deviceId); + final BasicDeviceConfig cfg = cfgService.getConfig(deviceId, BasicDeviceConfig.class); + + if (pipeconfId == null) { + // No pipeconf associated. + return; + } + + if (cfg == null || cfg.driver() == null) { + log.warn("Missing basic device config or driver key in netcfg for " + + "{}, which is odd since it has a " + + "pipeconf associated ({})", + deviceId, pipeconfId); + return; + } + + final String baseDriverName = cfg.driver(); + final String mergedDriverName = mergedDriverName(baseDriverName, pipeconfId); + + if (driverExists(mergedDriverName) || + missingMergedDrivers.contains(mergedDriverName)) { + // Not missing, or already aware of it missing. + return; + } + + log.info("Detected missing merged driver: {}", mergedDriverName); + missingMergedDrivers.add(mergedDriverName); + // Attempt building the driver now if all pieces are present. + // If not, either a driver or pipeconf event will re-trigger + // the process. + attemptDriverMerge(mergedDriverName); + } + + private void attemptDriverMerge(String mergedDriverName) { + final String baseDriverName = getBaseDriverNameFromMerged(mergedDriverName); + final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(mergedDriverName); + if (driverExists(baseDriverName) && pipeconfs.containsKey(pipeconfId)) { + doMergeDriver(baseDriverName, pipeconfId); + } + } + + private void missingDriversWatchdogTask() { + while (true) { + // Most probably all missing drivers will be created before the + // watchdog interval, so wait before starting... + try { + TimeUnit.SECONDS.sleep(MISSING_DRIVER_WATCHDOG_INTERVAL); + } catch (InterruptedException e) { + log.warn("Interrupted! There are still {} missing merged drivers", + missingMergedDrivers.size()); + } + if (missingMergedDrivers.isEmpty()) { + log.info("There are no more missing merged drivers!"); + return; + } + log.info("Detected {} missing merged drivers, attempt merge...", + missingMergedDrivers.size()); + missingMergedDrivers.forEach(this::attemptDriverMerge); + } + } + + private void checkMissingMergedDrivers() { + cfgService.getSubjects(DeviceId.class, BasicDeviceConfig.class) + .forEach(this::checkMissingMergedDriver); + } + + private void attemptMergeAll(String baseDriverName) { missingMergedDrivers.stream() - .filter(driverName -> { - final String xx = getBaseDriverNameFromMerged(driverName); + .filter(missingDriver -> { + // Filter missing merged drivers using this base driver. + final String xx = getBaseDriverNameFromMerged(missingDriver); return xx != null && xx.equals(baseDriverName); }) - .forEach(driverName -> { - final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(driverName); - if (pipeconfs.containsKey(pipeconfId)) { - doMergeDriver(baseDriverName, pipeconfId); - } - }); + .forEach(this::attemptDriverMerge); } - private void mergeAll(PiPipeconfId pipeconfId) { + private void attemptMergeAll(PiPipeconfId pipeconfId) { missingMergedDrivers.stream() - .filter(driverName -> { - final PiPipeconfId xx = getPipeconfIdFromMerged(driverName); + .filter(missingDriver -> { + // Filter missing merged drivers using this pipeconf. + final PiPipeconfId xx = getPipeconfIdFromMerged(missingDriver); return xx != null && xx.equals(pipeconfId); }) - .forEach(driverName -> { - final String baseDriverName = getBaseDriverNameFromMerged(driverName); - if (getDriver(baseDriverName) != null) { - doMergeDriver(baseDriverName, pipeconfId); - } - }); + .forEach(this::attemptDriverMerge); } private class InternalDriverListener implements DriverListener { @Override public void event(DriverEvent event) { - executor.execute(() -> mergeAll(event.subject().name())); + executor.execute(() -> attemptMergeAll(event.subject().name())); } @Override From fecab94751601524793cc119bf60d5e55b93c529 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 31 Aug 2018 18:12:16 -0700 Subject: [PATCH 05/19] Bumped thrift version Needed to build barefoot-pro driver Also unplug bmv2 drivers from buck tests Change-Id: I8da30c80583feb2d36bafc15f836a065b0a79de6 --- drivers/bmv2/BUCK | 87 ++++++++++++------------ lib/BUCK | 10 +-- lib/deps.json | 2 +- tools/build/bazel/generate_workspace.bzl | 8 +-- 4 files changed, 54 insertions(+), 53 deletions(-) diff --git a/drivers/bmv2/BUCK b/drivers/bmv2/BUCK index 9c27e0914b..312020f7cf 100644 --- a/drivers/bmv2/BUCK +++ b/drivers/bmv2/BUCK @@ -1,43 +1,44 @@ -GRPC_VER = '1.3.1' - -COMPILE_DEPS = [ - '//lib:CORE_DEPS', - '//lib:minimal-json', - '//lib:KRYO', - '//lib:JACKSON', - '//lib:libthrift', - '//protocols/p4runtime/api:onos-protocols-p4runtime-api', - '//protocols/p4runtime/model:onos-protocols-p4runtime-model', - '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api', - '//drivers/p4runtime:onos-drivers-p4runtime', - '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER, - '//lib:grpc-netty-' + GRPC_VER, - '//pipelines/basic:onos-pipelines-basic', - '//core/store/serializers:onos-core-serializers', -] - -BUNDLES = [ - ':onos-drivers-bmv2', - '//lib:libthrift', - '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api', -] - -osgi_jar( - deps = COMPILE_DEPS, - resources_root = 'src/main/resources', - resources = glob(['src/main/resources/**']), -) - -onos_app ( - app_name = 'org.onosproject.drivers.bmv2', - title = 'BMv2 Drivers', - category = 'Drivers', - url = 'http://onosproject.org', - description = 'Adds support for BMv2 P4 devices.', - included_bundles = BUNDLES, - required_apps = [ - 'org.onosproject.drivers.p4runtime', - 'org.onosproject.drivers.gnmi', - 'org.onosproject.pipelines.basic', - ], -) +# Buck build of P4-related modules is no longer supported, please use Bazel +# GRPC_VER = '1.3.1' +# +# COMPILE_DEPS = [ +# '//lib:CORE_DEPS', +# '//lib:minimal-json', +# '//lib:KRYO', +# '//lib:JACKSON', +# '//lib:libthrift', +# '//protocols/p4runtime/api:onos-protocols-p4runtime-api', +# '//protocols/p4runtime/model:onos-protocols-p4runtime-model', +# '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api', +# '//drivers/p4runtime:onos-drivers-p4runtime', +# '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER, +# '//lib:grpc-netty-' + GRPC_VER, +# '//pipelines/basic:onos-pipelines-basic', +# '//core/store/serializers:onos-core-serializers', +# ] +# +# BUNDLES = [ +# ':onos-drivers-bmv2', +# '//lib:libthrift', +# '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api', +# ] +# +# osgi_jar( +# deps = COMPILE_DEPS, +# resources_root = 'src/main/resources', +# resources = glob(['src/main/resources/**']), +# ) +# +# onos_app ( +# app_name = 'org.onosproject.drivers.bmv2', +# title = 'BMv2 Drivers', +# category = 'Drivers', +# url = 'http://onosproject.org', +# description = 'Adds support for BMv2 P4 devices.', +# included_bundles = BUNDLES, +# required_apps = [ +# 'org.onosproject.drivers.p4runtime', +# 'org.onosproject.drivers.gnmi', +# 'org.onosproject.pipelines.basic', +# ], +# ) diff --git a/lib/BUCK b/lib/BUCK index adaba59d9c..8204bf48f7 100644 --- a/lib/BUCK +++ b/lib/BUCK @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Wed, 3 Oct 2018 16:27:23 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Fri, 5 Oct 2018 20:40:12 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** pass_thru_pom( @@ -1455,10 +1455,10 @@ remote_jar ( remote_jar ( name = 'libthrift', - out = 'libthrift-0.9.3.jar', - url = 'mvn:org.apache.thrift:libthrift:jar:0.9.3', - sha1 = '8625e8f9b6f49b881fa5fd143172c2833df1ce47', - maven_coords = 'org.apache.thrift:libthrift:0.9.3', + out = 'libthrift-0.11.0.jar', + url = 'mvn:org.apache.thrift:libthrift:jar:0.11.0', + sha1 = '4f4f1c1fbbae63258625dea71007fa41bee7edb3', + maven_coords = 'org.apache.thrift:libthrift:0.11.0', visibility = [ 'PUBLIC' ], ) diff --git a/lib/deps.json b/lib/deps.json index c9561559c1..e0e795378c 100644 --- a/lib/deps.json +++ b/lib/deps.json @@ -277,7 +277,7 @@ "apache-karaf-patches": "http://repo1.maven.org/maven2/org/onosproject/onos-apache-karaf-patches/3.0.8/onos-apache-karaf-patches-3.0.8.tar.gz", "bndlib": "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0", "bndexe": "mvn:biz.aQute.bnd:biz.aQute.bnd:4.0.0", - "libthrift": "mvn:org.apache.thrift:libthrift:0.9.3", + "libthrift": "mvn:org.apache.thrift:libthrift:0.11.0", "qdox": "mvn:com.thoughtworks.qdox:qdox:2.0-M3", "org.apache.felix.scr.bnd": { "uri": "mvn:org.onosproject:org.apache.felix.scr.bnd:1.4.1-SNAPSHOT", diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index 3d93329fe9..5cb24b3420 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 Wed, 3 Oct 2018 16:26:56 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Fri, 5 Oct 2018 20:39:53 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -966,9 +966,9 @@ def generated_maven_jars(): if "libthrift" not in native.existing_rules(): java_import_external( name = "libthrift", - jar_sha256 = "bca5e8cdee1e0fbf563de7d41c452385e7bed69723fa28225a9ce718a8ee3419", + jar_sha256 = "65f1d191c3c97ec79e6d82e75f8af9d5265f4fbb605df4efc5614c222109cf36", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.3/libthrift-0.9.3.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.11.0/libthrift-0.11.0.jar"], ) if "qdox" not in native.existing_rules(): java_import_external( name = "qdox", @@ -1498,7 +1498,7 @@ artifact_map["@apache_karaf//:apache_karaf"] = "http://repo1.maven.org/maven2/or artifact_map["@apache_karaf_patches//:apache_karaf_patches"] = "http://repo1.maven.org/maven2/org/onosproject/onos-apache-karaf-patches/3.0.8/onos-apache-karaf-patches-3.0.8.tar.gz" artifact_map["@bndlib//:bndlib"] = "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0" artifact_map["@bndexe//:bndexe"] = "mvn:biz.aQute.bnd:biz.aQute.bnd:jar:4.0.0" -artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.9.3" +artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.11.0" artifact_map["@qdox//:qdox"] = "mvn:com.thoughtworks.qdox:qdox:jar:NON-OSGI:2.0-M3" artifact_map["@org_apache_felix_scr_bnd//:org_apache_felix_scr_bnd"] = "https://oss.sonatype.org/content/repositories/snapshots/org/onosproject/org.apache.felix.scr.bnd/1.4.1-SNAPSHOT/org.apache.felix.scr.bnd-1.4.1-20160328.235003-2.jar" artifact_map["@snmp_core//:snmp_core"] = "mvn:org.onosproject:snmp-core:jar:1.3-20161021.1" From 6880ba619ac3f89264997c7b2d7c901d7921e485 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 6 Sep 2018 00:04:34 -0700 Subject: [PATCH 06/19] Get CPU port dynamically in fabric interpreter Different HW platforms have different CPU ports, here we allow using the same interpreter with multiple platform. Change-Id: I0895d4d3e11560c75aca3fa908ca38759b597d67 --- .../onosproject/net/pi/model/PiPipeconf.java | 10 ++- .../pipelines/fabric/FabricInterpreter.java | 64 +++++++++++++ .../pipelines/fabric/PipeconfLoader.java | 89 ++++++++++--------- .../fabric/src/main/resources/bmv2-compile.sh | 2 + .../fabric-full/bmv2/default/cpu_port.txt | 1 + .../fabric-int/bmv2/default/cpu_port.txt | 1 + .../fabric-spgw/bmv2/default/cpu_port.txt | 1 + .../p4c-out/fabric/bmv2/default/cpu_port.txt | 1 + 8 files changed, 126 insertions(+), 43 deletions(-) create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java index 9b353c89e8..5fedaf7976 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java @@ -100,6 +100,14 @@ public interface PiPipeconf { /** * Barefoot's Tofino context JSON. */ - TOFINO_CONTEXT_JSON + TOFINO_CONTEXT_JSON, + + /** + * CPU port file in UTF 8 encoding. + */ + // TODO: consider a better way to get the CPU port in the interpreter + // (see FabricInterpreter.java mapLogicalPortNumber). Perhaps using + // pipeconf annotations? + CPU_PORT_TXT } } diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java index b3f996dcba..3115584cca 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java @@ -36,12 +36,20 @@ import org.onosproject.net.packet.DefaultInboundPacket; import org.onosproject.net.packet.InboundPacket; import org.onosproject.net.packet.OutboundPacket; import org.onosproject.net.pi.model.PiMatchFieldId; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.model.PiPipeconfId; import org.onosproject.net.pi.model.PiPipelineInterpreter; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiControlMetadata; import org.onosproject.net.pi.runtime.PiPacketOperation; +import org.onosproject.net.pi.service.PiPipeconfService; +import org.slf4j.Logger; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.util.Collection; import java.util.List; @@ -51,9 +59,12 @@ import java.util.Set; import static java.lang.String.format; import static java.util.stream.Collectors.toList; import static org.onlab.util.ImmutableByteSequence.copyFrom; +import static org.onosproject.net.PortNumber.CONTROLLER; import static org.onosproject.net.PortNumber.FLOOD; import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT; import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT; +import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.CPU_PORT_TXT; +import static org.slf4j.LoggerFactory.getLogger; /** * Interpreter for fabric pipeline. @@ -61,6 +72,8 @@ import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT; public class FabricInterpreter extends AbstractHandlerBehaviour implements PiPipelineInterpreter { + private final Logger log = getLogger(getClass()); + public static final int PORT_BITWIDTH = 9; private static final ImmutableBiMap TABLE_ID_MAP = @@ -262,4 +275,55 @@ public class FabricInterpreter extends AbstractHandlerBehaviour FabricConstants.INGRESS_PORT, deviceId, packetIn)); } } + + @Override + public Optional mapLogicalPortNumber(PortNumber port) { + if (!port.equals(CONTROLLER)) { + return Optional.empty(); + } + // This is probably brittle, but needed to dynamically get the CPU port + // for different platforms. + final DeviceId deviceId = data().deviceId(); + final PiPipeconfService pipeconfService = handler().get( + PiPipeconfService.class); + final PiPipeconfId pipeconfId = pipeconfService + .ofDevice(deviceId).orElse(null); + if (pipeconfId == null || + !pipeconfService.getPipeconf(pipeconfId).isPresent()) { + log.error("Unable to get pipeconf of {} - BUG?"); + return Optional.empty(); + } + final PiPipeconf pipeconf = pipeconfService.getPipeconf(pipeconfId).get(); + if (!pipeconf.extension(CPU_PORT_TXT).isPresent()) { + log.error("Missing {} extension from pipeconf {}", + CPU_PORT_TXT, pipeconfId); + return Optional.empty(); + } + return Optional.ofNullable( + readCpuPort(pipeconf.extension(CPU_PORT_TXT).get(), + pipeconfId)); + } + + private Integer readCpuPort(InputStream stream, PiPipeconfId pipeconfId) { + try { + final BufferedReader buff = new BufferedReader( + new InputStreamReader(stream)); + final String str = buff.readLine(); + buff.close(); + if (str == null) { + log.error("Empty CPU port file for {}", pipeconfId); + return null; + } + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + log.error("Invalid CPU port for {}: {}", pipeconfId, str); + return null; + } + } catch (IOException e) { + log.error("Unable to read CPU port file of {}: {}", + pipeconfId, e.getMessage()); + return null; + } + } } diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java index 3d044267d4..f808fc8d07 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java @@ -23,7 +23,6 @@ import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.PortNumber; import org.onosproject.net.behaviour.Pipeliner; import org.onosproject.net.device.PortStatisticsDiscovery; import org.onosproject.net.pi.model.DefaultPiPipeconf; @@ -44,7 +43,6 @@ import java.io.FileNotFoundException; import java.net.URL; import java.util.Collection; import java.util.Objects; -import java.util.Optional; import java.util.stream.Collectors; import static java.lang.String.format; @@ -79,13 +77,12 @@ public class PipeconfLoader { private static final String DEFAULT_PLATFORM = "default"; private static final String BMV2_JSON = "bmv2.json"; private static final String P4INFO_TXT = "p4info.txt"; + private static final String CPU_PORT_TXT = "cpu_port.txt"; private static final String TOFINO_BIN = "tofino.bin"; private static final String TOFINO_CTX_JSON = "context.json"; private static final String INT_PROFILE_SUFFIX = "-int"; private static final String FULL_PROFILE_SUFFIX = "-full"; - private static final int BMV2_CPU_PORT = 255; - private static final Collection PIPECONFS = buildAllPipeconf(); @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) @@ -131,45 +128,56 @@ public class PipeconfLoader { String profile = pieces[1]; String target = pieces[2]; String platform = pieces[3]; + final DefaultPiPipeconf.Builder pipeconfBuilder; try { switch (target) { case BMV2: - return buildBmv2Pipeconf(profile, platform); + pipeconfBuilder = bmv2Pipeconf(profile, platform); + break; case TOFINO: - return buildTofinoPipeconf(profile, platform); + pipeconfBuilder = tofinoPipeconf(profile, platform); + break; default: log.warn("Unknown target '{}', skipping pipeconf build...", target); return null; } } catch (FileNotFoundException e) { - log.warn("Unable to build pipeconf at {} because one or more p4c outputs are missing", - path); + log.warn("Unable to build pipeconf at {} because file is missing: {}", + path, e.getMessage()); return null; } + // Add IntProgrammable behaviour for INT-enabled profiles. + if (profile.endsWith(INT_PROFILE_SUFFIX) || profile.endsWith(FULL_PROFILE_SUFFIX)) { + pipeconfBuilder.addBehaviour(IntProgrammable.class, IntProgrammableImpl.class); + } + return pipeconfBuilder.build(); } - private static PiPipeconf buildBmv2Pipeconf(String profile, String platform) + private static DefaultPiPipeconf.Builder bmv2Pipeconf( + String profile, String platform) throws FileNotFoundException { final URL bmv2JsonUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + BMV2_JSON, profile, BMV2, platform)); final URL p4InfoUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + P4INFO_TXT, profile, BMV2, platform)); - if (bmv2JsonUrl == null || p4InfoUrl == null) { - throw new FileNotFoundException(); + final URL cpuPortUrl = PipeconfLoader.class.getResource(format( + P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, BMV2, platform)); + if (bmv2JsonUrl == null) { + throw new FileNotFoundException(BMV2_JSON); } - - DefaultPiPipeconf.Builder builder = basePipeconfBuilder( - profile, platform, p4InfoUrl, Bmv2FabricInterpreter.class) + if (p4InfoUrl == null) { + throw new FileNotFoundException(P4INFO_TXT); + } + if (cpuPortUrl == null) { + throw new FileNotFoundException(CPU_PORT_TXT); + } + return basePipeconfBuilder(profile, platform, p4InfoUrl, cpuPortUrl) .addExtension(ExtensionType.BMV2_JSON, bmv2JsonUrl); - // Add IntProgrammable behaviour for INT-enabled profiles. - if (profile.endsWith(INT_PROFILE_SUFFIX) || profile.endsWith(FULL_PROFILE_SUFFIX)) { - builder.addBehaviour(IntProgrammable.class, IntProgrammableImpl.class); - } - return builder.build(); } - private static PiPipeconf buildTofinoPipeconf(String profile, String platform) + private static DefaultPiPipeconf.Builder tofinoPipeconf( + String profile, String platform) throws FileNotFoundException { final URL tofinoBinUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + TOFINO_BIN, profile, TOFINO, platform)); @@ -177,19 +185,27 @@ public class PipeconfLoader { P4C_RES_BASE_PATH + TOFINO_CTX_JSON, profile, TOFINO, platform)); final URL p4InfoUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + P4INFO_TXT, profile, TOFINO, platform)); - if (tofinoBinUrl == null || contextJsonUrl == null || p4InfoUrl == null) { - throw new FileNotFoundException(); + final URL cpuPortUrl = PipeconfLoader.class.getResource(format( + P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, TOFINO, platform)); + if (tofinoBinUrl == null) { + throw new FileNotFoundException(TOFINO_BIN); } - return basePipeconfBuilder( - profile, platform, p4InfoUrl, FabricInterpreter.class) + if (contextJsonUrl == null) { + throw new FileNotFoundException(TOFINO_CTX_JSON); + } + if (p4InfoUrl == null) { + throw new FileNotFoundException(P4INFO_TXT); + } + if (cpuPortUrl == null) { + throw new FileNotFoundException(CPU_PORT_TXT); + } + return basePipeconfBuilder(profile, platform, p4InfoUrl, cpuPortUrl) .addExtension(ExtensionType.TOFINO_BIN, tofinoBinUrl) - .addExtension(ExtensionType.TOFINO_CONTEXT_JSON, contextJsonUrl) - .build(); + .addExtension(ExtensionType.TOFINO_CONTEXT_JSON, contextJsonUrl); } private static DefaultPiPipeconf.Builder basePipeconfBuilder( - String profile, String platform, URL p4InfoUrl, - Class interpreterClass) { + String profile, String platform, URL p4InfoUrl, URL cpuPortUrl) { final String pipeconfId = platform.equals(DEFAULT_PLATFORM) // Omit platform if default, e.g. with BMv2 pipeconf ? format("%s.%s", BASE_PIPECONF_ID, profile) @@ -199,12 +215,13 @@ public class PipeconfLoader { .withId(new PiPipeconfId(pipeconfId)) .withPipelineModel(model) .addBehaviour(PiPipelineInterpreter.class, - interpreterClass) + FabricInterpreter.class) .addBehaviour(Pipeliner.class, FabricPipeliner.class) .addBehaviour(PortStatisticsDiscovery.class, FabricPortStatisticsDiscovery.class) - .addExtension(ExtensionType.P4_INFO_TEXT, p4InfoUrl); + .addExtension(ExtensionType.P4_INFO_TEXT, p4InfoUrl) + .addExtension(ExtensionType.CPU_PORT_TXT, cpuPortUrl); } private static PiPipelineModel parseP4Info(URL p4InfoUrl) { @@ -214,16 +231,4 @@ public class PipeconfLoader { throw new IllegalStateException(e); } } - - // TODO: define interpreters with logical port mapping for Tofino platforms. - public static class Bmv2FabricInterpreter extends FabricInterpreter { - @Override - public Optional mapLogicalPortNumber(PortNumber port) { - if (port.equals(PortNumber.CONTROLLER)) { - return Optional.of(BMV2_CPU_PORT); - } else { - return Optional.empty(); - } - } - } } diff --git a/pipelines/fabric/src/main/resources/bmv2-compile.sh b/pipelines/fabric/src/main/resources/bmv2-compile.sh index d92a5c4734..b0ac43ea34 100755 --- a/pipelines/fabric/src/main/resources/bmv2-compile.sh +++ b/pipelines/fabric/src/main/resources/bmv2-compile.sh @@ -18,3 +18,5 @@ p4c-bm2-ss --arch v1model \ --p4runtime-file ${OUT_DIR}/p4info.txt \ --p4runtime-format text \ fabric.p4 + +echo ${BMV2_CPU_PORT} > ${OUT_DIR}/cpu_port.txt diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 From dca52babbe21923ace4fa4ffbdb481a75e4b9c7d Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 7 Sep 2018 19:06:26 -0700 Subject: [PATCH 07/19] Increase gRPC inbound msg size for P4Runtime client Change-Id: I51bb790a7b16c6e34066978e7044d51971f1b9d4 (cherry picked from commit b3e821d417eddc0c0345d7848a5e62ddd47ff5c3) --- .../p4runtime/ctl/P4RuntimeControllerImpl.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java index cb413bcddd..a14049182f 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java @@ -61,6 +61,10 @@ public class P4RuntimeControllerImpl extends AbstractListenerManager implements P4RuntimeController { + // Getting the pipeline config from the device can take tens of MBs. + private static final int MAX_INBOUND_MSG_SIZE = 256; // Megabytes. + private static final int MEGABYTES = 1024 * 1024; + private final Logger log = getLogger(getClass()); private final Map clientKeys = Maps.newHashMap(); @@ -121,7 +125,7 @@ public class P4RuntimeControllerImpl final ClientKey existingKey = clientKeys.get(deviceId); if (clientKey.equals(existingKey)) { log.debug("Not creating client for {} as it already exists (server={}:{}, p4DeviceId={})...", - deviceId, serverAddr, serverPort, p4DeviceId); + deviceId, serverAddr, serverPort, p4DeviceId); return true; } else { log.info("Requested client for {} with new " + @@ -141,7 +145,8 @@ public class P4RuntimeControllerImpl ManagedChannelBuilder channelBuilder = NettyChannelBuilder .forAddress(serverAddr, serverPort) - .usePlaintext(true); + .maxInboundMessageSize(MAX_INBOUND_MSG_SIZE * MEGABYTES) + .usePlaintext(); ManagedChannel channel; try { From 0c8d73ea088ad8f0bf186b26bcb7bb9dcc50b0c5 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Fri, 7 Sep 2018 16:31:06 -0700 Subject: [PATCH 08/19] Use P4 port counters only for BMv2 pipeconf in fabric.p4 Change-Id: I7d13b42188368318c43606f9b97afe75adfae7dc --- .../pipelines/fabric/PipeconfLoader.java | 4 ++-- .../fabric/src/main/resources/bmv2-compile.sh | 2 +- pipelines/fabric/src/main/resources/fabric.p4 | 9 ++++++++- .../fabric-full/bmv2/default/bmv2.json | 20 +++++++++---------- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 16 +++++++-------- .../fabric-spgw/bmv2/default/bmv2.json | 8 ++++---- .../p4c-out/fabric/bmv2/default/bmv2.json | 4 ++-- 7 files changed, 35 insertions(+), 28 deletions(-) diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java index f808fc8d07..9b54dfcbad 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java @@ -173,6 +173,8 @@ public class PipeconfLoader { throw new FileNotFoundException(CPU_PORT_TXT); } return basePipeconfBuilder(profile, platform, p4InfoUrl, cpuPortUrl) + .addBehaviour(PortStatisticsDiscovery.class, + FabricPortStatisticsDiscovery.class) .addExtension(ExtensionType.BMV2_JSON, bmv2JsonUrl); } @@ -218,8 +220,6 @@ public class PipeconfLoader { FabricInterpreter.class) .addBehaviour(Pipeliner.class, FabricPipeliner.class) - .addBehaviour(PortStatisticsDiscovery.class, - FabricPortStatisticsDiscovery.class) .addExtension(ExtensionType.P4_INFO_TEXT, p4InfoUrl) .addExtension(ExtensionType.CPU_PORT_TXT, cpuPortUrl); } diff --git a/pipelines/fabric/src/main/resources/bmv2-compile.sh b/pipelines/fabric/src/main/resources/bmv2-compile.sh index b0ac43ea34..0fede1c09a 100755 --- a/pipelines/fabric/src/main/resources/bmv2-compile.sh +++ b/pipelines/fabric/src/main/resources/bmv2-compile.sh @@ -3,7 +3,7 @@ set -ex BMV2_CPU_PORT="255" -BMV2_PP_FLAGS="-DTARGET_BMV2 -DCPU_PORT=${BMV2_CPU_PORT}" +BMV2_PP_FLAGS="-DTARGET_BMV2 -DCPU_PORT=${BMV2_CPU_PORT} -DWITH_PORT_COUNTER" PROFILE=$1 OTHER_PP_FLAGS=$2 diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4 index 22ad209eee..6ef205b92f 100644 --- a/pipelines/fabric/src/main/resources/fabric.p4 +++ b/pipelines/fabric/src/main/resources/fabric.p4 @@ -21,11 +21,14 @@ #include "include/control/forwarding.p4" #include "include/control/next.p4" #include "include/control/packetio.p4" -#include "include/control/port_counter.p4" #include "include/header.p4" #include "include/checksum.p4" #include "include/parser.p4" +#ifdef WITH_PORT_COUNTER +#include "include/control/port_counter.p4" +#endif // WITH_PORT_COUNTER + #ifdef WITH_SPGW #include "include/spgw.p4" #endif // WITH_SPGW @@ -45,7 +48,9 @@ inout standard_metadata_t standard_metadata) { Filtering() filtering; Forwarding() forwarding; Next() next; +#ifdef WITH_PORT_COUNTER PortCountersControl() port_counters_control; +#endif // WITH_PORT_COUNTER apply { #ifdef WITH_SPGW @@ -64,7 +69,9 @@ inout standard_metadata_t standard_metadata) { filtering.apply(hdr, fabric_metadata, standard_metadata); forwarding.apply(hdr, fabric_metadata, standard_metadata); next.apply(hdr, fabric_metadata, standard_metadata); +#ifdef WITH_PORT_COUNTER port_counters_control.apply(hdr, fabric_metadata, standard_metadata); +#endif // WITH_PORT_COUNTER #ifdef WITH_INT process_set_source_sink.apply(hdr, fabric_metadata, standard_metadata); if(fabric_metadata.int_meta.sink == 1) { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 67d1b45113..40f5a60dbb 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -4068,7 +4068,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 57, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -4083,7 +4083,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 57, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -11194,7 +11194,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 40, + "line" : 43, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -13227,7 +13227,7 @@ "id" : 22, "source_info" : { "filename" : "fabric.p4", - "line" : 70, + "line" : 77, "column" : 11, "source_fragment" : "fabric_metadata.int_meta.sink == 1" }, @@ -13255,7 +13255,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 87, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -14032,7 +14032,7 @@ "id" : 29, "source_info" : { "filename" : "fabric.p4", - "line" : 94, + "line" : 101, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -14112,7 +14112,7 @@ "id" : 30, "source_info" : { "filename" : "fabric.p4", - "line" : 97, + "line" : 104, "column" : 16, "source_fragment" : "fabric_metadata.int_meta.source == 1" }, @@ -14138,7 +14138,7 @@ "id" : 31, "source_info" : { "filename" : "fabric.p4", - "line" : 100, + "line" : 107, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -14230,7 +14230,7 @@ "id" : 35, "source_info" : { "filename" : "fabric.p4", - "line" : 104, + "line" : 111, "column" : 20, "source_fragment" : "standard_metadata.instance_type == 1" }, @@ -14256,7 +14256,7 @@ "id" : 36, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 115, "column" : 20, "source_fragment" : "fabric_metadata.int_meta.sink == 1" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index 7e96c8b6a3..f0917e4eb0 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -9426,7 +9426,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 40, + "line" : 43, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -10737,7 +10737,7 @@ "id" : 13, "source_info" : { "filename" : "fabric.p4", - "line" : 70, + "line" : 77, "column" : 11, "source_fragment" : "fabric_metadata.int_meta.sink == 1" }, @@ -10765,7 +10765,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 87, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -11493,7 +11493,7 @@ "id" : 19, "source_info" : { "filename" : "fabric.p4", - "line" : 94, + "line" : 101, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -11573,7 +11573,7 @@ "id" : 20, "source_info" : { "filename" : "fabric.p4", - "line" : 97, + "line" : 104, "column" : 16, "source_fragment" : "fabric_metadata.int_meta.source == 1" }, @@ -11599,7 +11599,7 @@ "id" : 21, "source_info" : { "filename" : "fabric.p4", - "line" : 100, + "line" : 107, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -11691,7 +11691,7 @@ "id" : 25, "source_info" : { "filename" : "fabric.p4", - "line" : 104, + "line" : 111, "column" : 20, "source_fragment" : "standard_metadata.instance_type == 1" }, @@ -11717,7 +11717,7 @@ "id" : 26, "source_info" : { "filename" : "fabric.p4", - "line" : 108, + "line" : 115, "column" : 20, "source_fragment" : "fabric_metadata.int_meta.sink == 1" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index a34bcfbfd0..160814c9fb 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -3155,7 +3155,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 57, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -3170,7 +3170,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 57, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -4970,7 +4970,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 40, + "line" : 43, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -6799,7 +6799,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 87, "column" : 8, "source_fragment" : "FabricEgress" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index 32e5f336a2..e7c2981e29 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -3391,7 +3391,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 40, + "line" : 43, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -4607,7 +4607,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 87, "column" : 8, "source_fragment" : "FabricEgress" }, From 79a3a31aec2ef5bef372007185e2f7f40300d273 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 16 Aug 2018 17:14:43 -0700 Subject: [PATCH 09/19] Refactor fabric.p4 INT support to allow compilation on more P4 targets Also use constant entries for instruction mask tables to avoid programming them at runtime. Change-Id: Ia1ab1ecd42a433daec171f9a30bcdba3b8484061 --- .../pipelines/fabric/FabricConstants.java | 198 +- .../pipelines/fabric/IntProgrammableImpl.java | 128 +- pipelines/fabric/src/main/resources/Makefile | 5 +- pipelines/fabric/src/main/resources/fabric.p4 | 35 +- .../resources/include/control/packetio.p4 | 3 +- .../src/main/resources/include/define.p4 | 11 +- .../src/main/resources/include/header.p4 | 130 +- .../main/resources/include/int/int_header.p4 | 141 + .../main/resources/include/int/int_main.p4 | 124 + .../resources/include/{ => int}/int_report.p4 | 4 +- .../resources/include/{ => int}/int_sink.p4 | 13 +- .../resources/include/{ => int}/int_source.p4 | 65 +- .../include/{ => int}/int_transit.p4 | 233 +- .../src/main/resources/include/parser.p4 | 107 +- .../fabric-full/bmv2/default/bmv2.json | 11726 ++++++++------ .../fabric-full/bmv2/default/p4info.txt | 320 +- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 12960 +++++++++------- .../fabric-int/bmv2/default/p4info.txt | 403 +- .../fabric-spgw/bmv2/default/bmv2.json | 60 +- .../p4c-out/fabric/bmv2/default/bmv2.json | 51 +- 20 files changed, 15433 insertions(+), 11284 deletions(-) create mode 100644 pipelines/fabric/src/main/resources/include/int/int_header.p4 create mode 100644 pipelines/fabric/src/main/resources/include/int/int_main.p4 rename pipelines/fabric/src/main/resources/include/{ => int}/int_report.p4 (96%) rename pipelines/fabric/src/main/resources/include/{ => int}/int_sink.p4 (83%) rename pipelines/fabric/src/main/resources/include/{ => int}/int_source.p4 (64%) rename pipelines/fabric/src/main/resources/include/{ => int}/int_transit.p4 (54%) diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index 78cf0717d6..7c7f3fb7a3 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -82,36 +82,36 @@ public final class FabricConstants { PiTableId.of("FabricIngress.forwarding.acl"); public static final PiTableId FABRIC_INGRESS_NEXT_HASHED = PiTableId.of("FabricIngress.next.hashed"); + 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_MPLS = PiTableId.of("FabricIngress.forwarding.mpls"); public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK = PiTableId.of("FabricIngress.process_set_source_sink.tb_set_sink"); public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V4 = PiTableId.of("FabricIngress.forwarding.routing_v4"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0407 = + PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407"); + 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_NEXT_SIMPLE = PiTableId.of("FabricIngress.next.simple"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_SOURCE_TB_INT_SOURCE = - PiTableId.of("FabricEgress.process_int_source.tb_int_source"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0003 = - PiTableId.of("FabricEgress.process_int_transit.tb_int_inst_0003"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INSERT = - PiTableId.of("FabricEgress.process_int_transit.tb_int_insert"); public static final PiTableId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER = PiTableId.of("FabricIngress.filtering.fwd_classifier"); public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE = PiTableId.of("FabricIngress.process_set_source_sink.tb_set_source"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_REPORT_TB_GENERATE_REPORT = - PiTableId.of("FabricEgress.process_int_report.tb_generate_report"); public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING = PiTableId.of("FabricIngress.forwarding.bridging"); public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_S1U_FILTER_TABLE = PiTableId.of("FabricIngress.spgw_ingress.s1u_filter_table"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0003 = + PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"); public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN = PiTableId.of("FabricIngress.filtering.ingress_port_vlan"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT = + PiTableId.of("FabricEgress.process_int_main.process_int_report.tb_generate_report"); public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_DL_SESS_LOOKUP = PiTableId.of("FabricIngress.spgw_ingress.dl_sess_lookup"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0407 = - PiTableId.of("FabricEgress.process_int_transit.tb_int_inst_0407"); public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN = PiTableId.of("FabricEgress.egress_next.egress_vlan"); public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST = @@ -140,22 +140,16 @@ public final class FabricConstants { PiCounterId.of("FabricIngress.forwarding.routing_v4_counter"); public static final PiCounterId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SOURCE = PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_source"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INST_0407 = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_inst_0407"); + 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_SPGW_INGRESS_UE_COUNTER = PiCounterId.of("FabricIngress.spgw_ingress.ue_counter"); - 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_NEXT_SIMPLE_COUNTER = PiCounterId.of("FabricIngress.next.simple_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_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INSERT = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_insert"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_SOURCE_COUNTER_INT_SOURCE = - PiCounterId.of("FabricEgress.process_int_source.counter_int_source"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INST_0003 = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_inst_0003"); + 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_FORWARDING_ROUTING_V6_COUNTER = PiCounterId.of("FabricIngress.forwarding.routing_v6_counter"); public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER = @@ -165,145 +159,129 @@ public final class FabricConstants { public static final PiCounterId FABRIC_INGRESS_NEXT_HASHED_COUNTER = PiCounterId.of("FabricIngress.next.hashed_counter"); // Action IDs - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i14"); public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU = PiActionId.of("FabricIngress.forwarding.punt_to_cpu"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i12"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i13"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V6_SIMPLE = PiActionId.of("FabricIngress.next.mpls_routing_v6_simple"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12"); public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4 = PiActionId.of("FabricIngress.forwarding.nop_routing_v4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_UPDATE_TOTAL_HOP_CNT = - PiActionId.of("FabricEgress.process_int_transit.int_update_total_hop_cnt"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11"); public static final PiActionId FABRIC_INGRESS_FILTERING_NOP_INGRESS_PORT_VLAN = PiActionId.of("FabricIngress.filtering.nop_ingress_port_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i14"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING = PiActionId.of("FabricIngress.forwarding.set_next_id_bridging"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i15"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i2"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i5"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SINK_INT_SINK = - PiActionId.of("FabricEgress.process_int_sink.int_sink"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i3"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i13"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i7"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP = + PiActionId.of("FabricEgress.process_int_main.process_int_source.int_source_dscp"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0"); + 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_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14"); + public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = + PiActionId.of("FabricEgress.egress_next.pop_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN = PiActionId.of("FabricIngress.next.set_vlan"); - public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN = - PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i8"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i9"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4"); public static final PiActionId FABRIC_EGRESS_SPGW_EGRESS_GTPU_ENCAP = PiActionId.of("FabricEgress.spgw_egress.gtpu_encap"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i5"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13"); public static final PiActionId FABRIC_INGRESS_FILTERING_SET_VLAN = PiActionId.of("FabricIngress.filtering.set_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i11"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i0"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i1"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11"); + public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN = + PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_SIMPLE = PiActionId.of("FabricIngress.next.l3_routing_simple"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i3"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP = PiActionId.of("FabricIngress.next.set_mcast_group"); 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_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_UDP = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_udp"); 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_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13"); public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_SET_DL_SESS_INFO = PiActionId.of("FabricIngress.spgw_ingress.set_dl_sess_info"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7"); public static final PiActionId FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN = PiActionId.of("FabricIngress.filtering.push_internal_vlan"); public static final PiActionId FABRIC_INGRESS_FORWARDING_CLONE_TO_CPU = PiActionId.of("FabricIngress.forwarding.clone_to_cpu"); public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_GTPU_DECAP = PiActionId.of("FabricIngress.spgw_ingress.gtpu_decap"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i15"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i12"); 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_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i10"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i11"); public static final PiActionId DROP_NOW = PiActionId.of("drop_now"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_HASHED = PiActionId.of("FabricIngress.next.l3_routing_hashed"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SOURCE_INT_SOURCE_DSCP = - PiActionId.of("FabricEgress.process_int_source.int_source_dscp"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION = - PiActionId.of("FabricEgress.process_int_report.do_report_encapsulation"); - public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = - PiActionId.of("FabricEgress.egress_next.pop_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0"); public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK = PiActionId.of("FabricIngress.process_set_source_sink.int_set_sink"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_SHIM = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_shim"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SINK_INT_SINK = + PiActionId.of("FabricEgress.process_int_main.process_int_sink.int_sink"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4_HASHED = PiActionId.of("FabricIngress.next.mpls_routing_v4_hashed"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1"); 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 FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3"); public static final PiActionId NOP = PiActionId.of("nop"); public static final PiActionId FABRIC_INGRESS_FORWARDING_DROP = PiActionId.of("FabricIngress.forwarding.drop"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE = PiActionId.of("FabricIngress.next.output_simple"); public static final PiActionId FABRIC_INGRESS_FILTERING_DROP = PiActionId.of("FabricIngress.filtering.drop"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_IPV4 = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_ipv4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i8"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i9"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SINK_RESTORE_HEADER = - PiActionId.of("FabricEgress.process_int_sink.restore_header"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SINK_RESTORE_HEADER = + PiActionId.of("FabricEgress.process_int_main.process_int_sink.restore_header"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9"); public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE = PiActionId.of("FabricIngress.filtering.set_forwarding_type"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT = PiActionId.of("FabricIngress.next.set_vlan_output"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i6"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i7"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i0"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i1"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i2"); + 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"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_TRANSIT = - PiActionId.of("FabricEgress.process_int_transit.int_transit"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4_SIMPLE = PiActionId.of("FabricIngress.next.mpls_routing_v4_simple"); public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ACL = @@ -312,10 +290,18 @@ public final class FabricConstants { PiActionId.of("FabricIngress.next.mpls_routing_v6_hashed"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN = PiActionId.of("FabricIngress.next.l3_routing_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ACL = PiActionId.of("FabricIngress.forwarding.set_next_id_acl"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i6"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7"); // Action Param IDs public static final PiActionParamId DMAC = PiActionParamId.of("dmac"); public static final PiActionParamId MON_IP = PiActionParamId.of("mon_ip"); diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java index 2019b3e473..5d95abdbad 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java @@ -17,8 +17,6 @@ package org.onosproject.pipelines.fabric; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Sets; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onlab.util.ImmutableByteSequence; import org.onlab.util.SharedExecutors; import org.onosproject.core.ApplicationId; @@ -78,65 +76,57 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST, Criterion.Type.IP_PROTO); - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private FlowRuleService flowRuleService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private DeviceService deviceService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private HostService hostService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private CoreService coreService; private DeviceId deviceId; private static final int DEFAULT_PRIORITY = 10000; private static final ImmutableBiMap INST_0003_ACTION_MAP = ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15) + .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0) + .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1) + .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2) + .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3) + .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4) + .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5) + .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6) + .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7) + .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8) + .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9) + .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10) + .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11) + .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12) + .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13) + .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14) + .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15) .build(); private static final ImmutableBiMap INST_0407_ACTION_MAP = ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15) + .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0) + .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1) + .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2) + .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3) + .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4) + .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5) + .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6) + .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7) + .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8) + .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9) + .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10) + .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11) + .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12) + .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13) + .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14) + .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15) .build(); @Override public void init() { deviceId = this.data().deviceId(); flowRuleService = handler().get(FlowRuleService.class); - deviceService = handler().get(DeviceService.class); + DeviceService deviceService = handler().get(DeviceService.class); hostService = handler().get(HostService.class); coreService = handler().get(CoreService.class); appId = coreService.getAppId(PIPELINE_APP_NAME); @@ -145,9 +135,9 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int return; } - Set hostPorts = deviceService.getPorts(deviceId).stream().filter(port -> - hostService.getConnectedHosts( - new ConnectPoint(deviceId, port.number())).size() > 0 + Set hostPorts = deviceService.getPorts(deviceId).stream() + .filter(port -> hostService.getConnectedHosts( + new ConnectPoint(deviceId, port.number())).size() > 0 ).map(Port::number).collect(Collectors.toSet()); List flowRules = new ArrayList<>(); @@ -158,7 +148,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Integer.parseInt(deviceId.toString().substring( deviceId.toString().length() - 2)))); PiAction transitAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_TRANSIT) + .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA) .withParameter(transitIdParam) .build(); TrafficTreatment treatment = DefaultTrafficTreatment.builder() @@ -171,11 +161,11 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .withPriority(DEFAULT_PRIORITY) .makePermanent() .forDevice(deviceId) - .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INSERT) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT) .build(); flowRules.add(transitFlowRule); - for (PortNumber portNumber: hostPorts) { + for (PortNumber portNumber : hostPorts) { // process_set_source_sink.tb_set_source for each host-facing port PiCriterion ingressCriterion = PiCriterion.builder() .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, portNumber.toLong()) @@ -227,19 +217,19 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule)); // Populate tb_int_inst_0003 table - INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> - populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0003, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0003, - matchValue, - actionId, - appId)); + INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> populateInstTableEntry( + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0003, + FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0003, + matchValue, + actionId, + appId)); // Populate tb_int_inst_0407 table - INST_0407_ACTION_MAP.forEach((matchValue, actionId) -> - populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0407, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0407, - matchValue, - actionId, - appId)); + INST_0407_ACTION_MAP.forEach((matchValue, actionId) -> populateInstTableEntry( + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0407, + FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0407, + matchValue, + actionId, + appId)); } @Override @@ -318,7 +308,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int ImmutableByteSequence.copyFrom((instructionBitmap >> 8) & 0xF)); PiAction intSourceAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_INT_SOURCE_DSCP) + .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP) .withParameter(maxHopParam) .withParameter(instCntParam) .withParameter(inst0003Param) @@ -376,7 +366,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .withSelector(sBuilder.build()) .withTreatment(instTreatment) .withPriority(DEFAULT_PRIORITY) - .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_TB_INT_SOURCE) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE) .fromApp(appId) .withIdleTimeout(IDLE_TIMEOUT) .build(); @@ -419,12 +409,12 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } /** - * Returns a subset of Criterion from given selector, - * which is unsupported by this INT pipeline. + * Returns a subset of Criterion from given selector, which is unsupported + * by this INT pipeline. * * @param selector a traffic selector - * @return a subset of Criterion from given selector, unsupported by this INT pipeline, - * empty if all criteria are supported. + * @return a subset of Criterion from given selector, unsupported by this + * INT pipeline, empty if all criteria are supported. */ private Set unsupportedSelectors(TrafficSelector selector) { return selector.criteria().stream() @@ -496,7 +486,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int FabricConstants.MON_PORT, ImmutableByteSequence.copyFrom(cfg.collectorPort().toInt())); PiAction reportAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION) + .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION) .withParameter(srcMacParam) .withParameter(nextHopMacParam) .withParameter(srcIpParam) @@ -513,7 +503,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .withPriority(DEFAULT_PRIORITY) .makePermanent() .forDevice(this.data().deviceId()) - .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_TB_GENERATE_REPORT) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT) .build(); } diff --git a/pipelines/fabric/src/main/resources/Makefile b/pipelines/fabric/src/main/resources/Makefile index 508bb1dee9..a83bc0f2da 100644 --- a/pipelines/fabric/src/main/resources/Makefile +++ b/pipelines/fabric/src/main/resources/Makefile @@ -7,10 +7,11 @@ fabric-spgw: @./bmv2-compile.sh "fabric-spgw" "-DWITH_SPGW" fabric-int: - @./bmv2-compile.sh "fabric-int" "-DWITH_INT" + @./bmv2-compile.sh "fabric-int" "-DWITH_INT_SOURCE -DWITH_INT_TRANSIT" fabric-full: - @./bmv2-compile.sh "fabric-full" "-DWITH_MULTICAST -DWITH_IPV6 -DWITH_SPGW -DWITH_INT" + @./bmv2-compile.sh "fabric-full" "-DWITH_MULTICAST -DWITH_IPV6 -DWITH_SPGW \ + -DWITH_INT_SOURCE -DWITH_INT_TRANSIT -DWITH_INT_SINK" constants: onos-gen-p4-constants \ diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4 index 6ef205b92f..0aee32b0fb 100644 --- a/pipelines/fabric/src/main/resources/fabric.p4 +++ b/pipelines/fabric/src/main/resources/fabric.p4 @@ -34,10 +34,7 @@ #endif // WITH_SPGW #ifdef WITH_INT -#include "include/int_source.p4" -#include "include/int_transit.p4" -#include "include/int_sink.p4" -#include "include/int_report.p4" +#include "include/int/int_main.p4" #endif // WITH_INT control FabricIngress ( @@ -70,16 +67,11 @@ inout standard_metadata_t standard_metadata) { forwarding.apply(hdr, fabric_metadata, standard_metadata); next.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_PORT_COUNTER + // FIXME: we're not counting pkts punted to cpu or forwarded via multicast groups. port_counters_control.apply(hdr, fabric_metadata, standard_metadata); #endif // WITH_PORT_COUNTER -#ifdef WITH_INT +#if defined(WITH_INT_SOURCE) || defined(WITH_INT_SINK) process_set_source_sink.apply(hdr, fabric_metadata, standard_metadata); - if(fabric_metadata.int_meta.sink == 1) { - // clone packet for Telemetry Report - #ifdef __TARGET_BMV2__ - clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID); - #endif - } #endif } } @@ -98,26 +90,7 @@ control FabricEgress (inout parsed_headers_t hdr, fabric_metadata.spgw, standard_metadata); #endif // WITH_SPGW #ifdef WITH_INT - if (standard_metadata.ingress_port != CPU_PORT && - standard_metadata.egress_port != CPU_PORT && - (hdr.udp.isValid() || hdr.tcp.isValid())) { - if (fabric_metadata.int_meta.source == 1) { - process_int_source.apply(hdr, fabric_metadata, standard_metadata); - } - if(hdr.int_header.isValid()) { - process_int_transit.apply(hdr, fabric_metadata, standard_metadata); - // update underlay header based on INT information inserted - process_int_outer_encap.apply(hdr, fabric_metadata, standard_metadata); - if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_CLONE) { - /* send int report */ - process_int_report.apply(hdr, fabric_metadata, standard_metadata); - } - if (fabric_metadata.int_meta.sink == 1) { - // int sink - process_int_sink.apply(hdr, fabric_metadata, standard_metadata); - } - } - } + process_int_main.apply(hdr, fabric_metadata, standard_metadata); #endif } } diff --git a/pipelines/fabric/src/main/resources/include/control/packetio.p4 b/pipelines/fabric/src/main/resources/include/control/packetio.p4 index 1086dace75..a77d82a4f4 100644 --- a/pipelines/fabric/src/main/resources/include/control/packetio.p4 +++ b/pipelines/fabric/src/main/resources/include/control/packetio.p4 @@ -26,6 +26,7 @@ inout standard_metadata_t standard_metadata) { standard_metadata.egress_spec = hdr.packet_out.egress_port; hdr.packet_out.setInvalid(); fabric_metadata.is_controller_packet_out = _TRUE; + // No need for ingress processing, straight to egress. exit; } } @@ -41,7 +42,7 @@ control PacketIoEgress( } apply { if (fabric_metadata.is_controller_packet_out == _TRUE) { - // No need to process through the rest of the pipeline. + // Transmit right away. exit; } if (standard_metadata.egress_port == CPU_PORT) { diff --git a/pipelines/fabric/src/main/resources/include/define.p4 b/pipelines/fabric/src/main/resources/include/define.p4 index 77808bd260..26d3167534 100644 --- a/pipelines/fabric/src/main/resources/include/define.p4 +++ b/pipelines/fabric/src/main/resources/include/define.p4 @@ -19,6 +19,10 @@ #define MAX_PORTS 511 +#if defined(WITH_INT_SOURCE) || defined(WITH_INT_TRANSIT) || defined(WITH_INT_SINK) +#define WITH_INT +#endif + #ifndef _BOOL #define _BOOL bool #endif @@ -68,8 +72,6 @@ typedef bit<9> port_num_t; typedef bit<48> mac_addr_t; typedef bit<16> group_id_t; typedef bit<12> vlan_id_t; -typedef bit<48> timestamp_t; -typedef bit<32> switch_id_t; typedef bit<32> ipv4_addr_t; typedef bit<16> l4_port_t; @@ -124,7 +126,10 @@ const pcc_gate_status_t PCC_GATE_CLOSED = 1w1; /* indicate INT at LSB of DSCP */ const bit<6> INT_DSCP = 0x1; -const bit<8> INT_HEADER_LEN_WORD = 4; +// Length of the whole INT header, +// including shim and tail, excluding metadata stack. +const bit<8> INT_HEADER_LEN_WORDS = 4; +const bit<16> INT_HEADER_LEN_BYTES = 16; const bit<8> CPU_MIRROR_SESSION_ID = 250; const bit<32> REPORT_MIRROR_SESSION_ID = 500; diff --git a/pipelines/fabric/src/main/resources/include/header.p4 b/pipelines/fabric/src/main/resources/include/header.p4 index 5591c11d6e..46fa022d1a 100644 --- a/pipelines/fabric/src/main/resources/include/header.p4 +++ b/pipelines/fabric/src/main/resources/include/header.p4 @@ -18,6 +18,7 @@ #define __HEADER__ #include "define.p4" +#include "int/int_header.p4" @controller_header("packet_in") header packet_in_header_t { @@ -147,122 +148,6 @@ struct spgw_meta_t { } #endif // WITH_SPGW -#ifdef WITH_INT -// Report Telemetry Headers -header report_fixed_header_t { - bit<4> ver; - bit<4> nproto; - bit<1> d; - bit<1> q; - bit<1> f; - bit<15> rsvd; - bit<6> hw_id; - bit<32> seq_no; - bit<32> ingress_tstamp; -} - -// Telemetry drop report header -header drop_report_header_t { - bit<32> switch_id; - bit<16> ingress_port_id; - bit<16> egress_port_id; - bit<8> queue_id; - bit<8> drop_reason; - bit<16> pad; -} - -// Switch Local Report Header -header local_report_header_t { - bit<32> switch_id; - bit<16> ingress_port_id; - bit<16> egress_port_id; - bit<8> queue_id; - bit<24> queue_occupancy; - bit<32> egress_tstamp; -} - -header_union local_report_t { - drop_report_header_t drop_report_header; - local_report_header_t local_report_header; -} - -// INT headers -header int_header_t { - bit<2> ver; - bit<2> rep; - bit<1> c; - bit<1> e; - bit<5> rsvd1; - bit<5> ins_cnt; - bit<8> max_hop_cnt; - bit<8> total_hop_cnt; - bit<4> instruction_mask_0003; /* split the bits for lookup */ - bit<4> instruction_mask_0407; - bit<4> instruction_mask_0811; - bit<4> instruction_mask_1215; - bit<16> rsvd2; -} - -// INT meta-value headers - different header for each value type -header int_switch_id_t { - bit<32> switch_id; -} -header int_port_ids_t { - bit<16> ingress_port_id; - bit<16> egress_port_id; -} -header int_hop_latency_t { - bit<32> hop_latency; -} -header int_q_occupancy_t { - bit<8> q_id; - bit<24> q_occupancy; -} -header int_ingress_tstamp_t { - bit<32> ingress_tstamp; -} -header int_egress_tstamp_t { - bit<32> egress_tstamp; -} -header int_q_congestion_t { - bit<8> q_id; - bit<24> q_congestion; -} -header int_egress_port_tx_util_t { - bit<32> egress_port_tx_util; -} - -header int_data_t { - // Maximum int metadata stack size in bits: - // (0xFF -4) * 32 (excluding INT shim header, tail header and INT header) - varbit<8032> data; -} - -/* INT shim header for TCP/UDP */ -header intl4_shim_t { - bit<8> int_type; - bit<8> rsvd1; - bit<8> len; - bit<8> rsvd2; -} -/* INT tail header for TCP/UDP */ -header intl4_tail_t { - bit<8> next_proto; - bit<16> dest_port; - bit<8> dscp; -} - -struct int_metadata_t { - switch_id_t switch_id; - bit<16> insert_byte_cnt; - bit<1> source; - bit<1> sink; - bit<8> mirror_id; - bit<16> flow_id; - bit<8> metadata_len; -} -#endif // WITH_INT - //Custom metadata definition struct fabric_metadata_t { fwd_type_t fwd_type; @@ -279,7 +164,6 @@ struct fabric_metadata_t { #endif // WITH_SPGW #ifdef WITH_INT int_metadata_t int_meta; - bool compute_checksum; #endif // WITH_INT } @@ -304,18 +188,19 @@ struct parsed_headers_t { icmp_t icmp; packet_out_header_t packet_out; packet_in_header_t packet_in; -#ifdef WITH_INT - // INT Report Encapsulation +#ifdef WITH_INT_SINK + // INT Report encap ethernet_t report_ethernet; ipv4_t report_ipv4; udp_t report_udp; - // INT Report Headers + // INT Report header (support only fixed) report_fixed_header_t report_fixed_header; - local_report_t report_local; + // local_report_t report_local; +#endif // WITH_INT_SINK +#ifdef WITH_INT // INT specific headers intl4_shim_t intl4_shim; int_header_t int_header; - int_data_t int_data; int_switch_id_t int_switch_id; int_port_ids_t int_port_ids; int_hop_latency_t int_hop_latency; @@ -324,6 +209,7 @@ struct parsed_headers_t { int_egress_tstamp_t int_egress_tstamp; int_q_congestion_t int_q_congestion; int_egress_port_tx_util_t int_egress_tx_util; + int_data_t int_data; intl4_tail_t intl4_tail; #endif //WITH_INT } diff --git a/pipelines/fabric/src/main/resources/include/int/int_header.p4 b/pipelines/fabric/src/main/resources/include/int/int_header.p4 new file mode 100644 index 0000000000..f3399952e6 --- /dev/null +++ b/pipelines/fabric/src/main/resources/include/int/int_header.p4 @@ -0,0 +1,141 @@ +/* + * 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. + */ + +#ifndef __INT_HEADER__ +#define __INT_HEADER__ + +#include "../define.p4" + +struct int_metadata_t { + _BOOL source; + _BOOL transit; + _BOOL sink; + bit<32> switch_id; + bit<8> new_words; + bit<16> new_bytes; +} + +// INT headers - 8 bytes +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; /* split the bits for lookup */ + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +// INT shim header for TCP/UDP - 4 bytes +header intl4_shim_t { + bit<8> int_type; + bit<8> rsvd1; + bit<8> len_words; // 4-byte words. + bit<8> rsvd2; +} +// INT tail header for TCP/UDP - 4 bytes +header intl4_tail_t { + bit<8> next_proto; + bit<16> dest_port; + bit<2> padding; + bit<6> dscp; +} + +header int_data_t { + // Maximum int metadata stack size in bits: + // (0xFF -4) * 32 (excluding INT shim header, tail header and INT header) + varbit<8032> data; +} + +#ifdef WITH_INT_TRANSIT +// INT meta-value headers - 4 bytes each +// Different header for each value type +header int_switch_id_t { + bit<32> switch_id; +} +header int_port_ids_t { + bit<16> ingress_port_id; + bit<16> egress_port_id; +} +header int_hop_latency_t { + bit<32> hop_latency; +} +header int_q_occupancy_t { + bit<8> q_id; + bit<24> q_occupancy; +} +header int_ingress_tstamp_t { + bit<32> ingress_tstamp; +} +header int_egress_tstamp_t { + bit<32> egress_tstamp; +} +header int_q_congestion_t { + bit<8> q_id; + bit<24> q_congestion; +} +header int_egress_port_tx_util_t { + bit<32> egress_port_tx_util; +} +#endif // WITH_INT_TRANSIT + +#ifdef WITH_INT_SINK +// Report Telemetry Headers +header report_fixed_header_t { + bit<4> ver; + bit<4> nproto; + bit<1> d; + bit<1> q; + bit<1> f; + bit<15> rsvd; + bit<6> hw_id; + bit<32> seq_no; + bit<32> ingress_tstamp; +} + +// Telemetry drop report header +header drop_report_header_t { + bit<32> switch_id; + bit<16> ingress_port_id; + bit<16> egress_port_id; + bit<8> queue_id; + bit<8> drop_reason; + bit<16> pad; +} + +// Switch Local Report Header +header local_report_header_t { + bit<32> switch_id; + bit<16> ingress_port_id; + bit<16> egress_port_id; + bit<8> queue_id; + bit<24> queue_occupancy; + bit<32> egress_tstamp; +} + +header_union local_report_t { + drop_report_header_t drop_report_header; + local_report_header_t local_report_header; +} +#endif // WITH_INT_SINK + +#endif diff --git a/pipelines/fabric/src/main/resources/include/int/int_main.p4 b/pipelines/fabric/src/main/resources/include/int/int_main.p4 new file mode 100644 index 0000000000..ef81cc9057 --- /dev/null +++ b/pipelines/fabric/src/main/resources/include/int/int_main.p4 @@ -0,0 +1,124 @@ +/* + * Copyright 2018-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. + */ + +/* -*- P4_16 -*- */ +#ifndef __INT_MAIN__ +#define __INT_MAIN__ + +#ifdef WITH_INT_SOURCE +#include "int_source.p4" +#endif // WITH_INT_SOURCE + +#ifdef WITH_INT_TRANSIT +#include "int_transit.p4" +#endif // WITH_INT_TRANSIT + +#ifdef WITH_INT_SINK +#include "int_sink.p4" +#include "int_report.p4" +#endif // WITH_INT_SINK + +control process_set_source_sink ( + inout parsed_headers_t hdr, + inout fabric_metadata_t fabric_metadata, + inout standard_metadata_t standard_metadata) { + + direct_counter(CounterType.packets_and_bytes) counter_set_source; + + action int_set_source () { + fabric_metadata.int_meta.source = _TRUE; + counter_set_source.count(); + } + + table tb_set_source { + key = { + standard_metadata.ingress_port: exact; + } + actions = { + int_set_source; + } + counters = counter_set_source; + size = MAX_PORTS; + } + +#ifdef WITH_INT_SINK + direct_counter(CounterType.packets_and_bytes) counter_set_sink; + + action int_set_sink () { + fabric_metadata.int_meta.sink = _TRUE; + counter_set_sink.count(); + } + + table tb_set_sink { + key = { + standard_metadata.egress_spec: exact; + } + actions = { + int_set_sink; + } + counters = counter_set_sink; + size = MAX_PORTS; + } +#endif // WITH_INT_SINK + + apply { + tb_set_source.apply(); + +#ifdef WITH_INT_SINK + tb_set_sink.apply(); + if(fabric_metadata.int_meta.sink == _TRUE) { + // FIXME: this works only on BMv2 + #ifdef __TARGET_BMV2__ + clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID); + #endif + } +#endif // WITH_INT_SINK + } +} + +control process_int_main ( + inout parsed_headers_t hdr, + inout fabric_metadata_t fabric_metadata, + inout standard_metadata_t standard_metadata) { + + apply { + if (standard_metadata.ingress_port != CPU_PORT && + standard_metadata.egress_port != CPU_PORT && + (hdr.udp.isValid() || hdr.tcp.isValid())) { +#ifdef WITH_INT_SOURCE + if (fabric_metadata.int_meta.source == _TRUE) { + process_int_source.apply(hdr, fabric_metadata, standard_metadata); + } +#endif // WITH_INT_SOURCE + if(hdr.int_header.isValid()) { +#ifdef WITH_INT_TRANSIT + process_int_transit.apply(hdr, fabric_metadata, standard_metadata); +#endif // WITH_INT_TRANSIT +#ifdef WITH_INT_SINK + if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_CLONE) { + /* send int report */ + process_int_report.apply(hdr, fabric_metadata, standard_metadata); + } + if (fabric_metadata.int_meta.sink == _TRUE) { + // int sink + process_int_sink.apply(hdr, fabric_metadata); + } +#endif // WITH_INT_SINK + } + } + } +} +#endif diff --git a/pipelines/fabric/src/main/resources/include/int_report.p4 b/pipelines/fabric/src/main/resources/include/int/int_report.p4 similarity index 96% rename from pipelines/fabric/src/main/resources/include/int_report.p4 rename to pipelines/fabric/src/main/resources/include/int/int_report.p4 index 6d7c29dfeb..9326375e6f 100644 --- a/pipelines/fabric/src/main/resources/include/int_report.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_report.p4 @@ -40,8 +40,7 @@ control process_int_report ( // TODO how save a variable and increment hdr.report_fixed_header.seq_no = 0; //TODO how to get timestamp from ingress ns - hdr.report_fixed_header.ingress_tstamp = - (bit<32>) standard_metadata.enq_timestamp; + hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp; } action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ipv4_addr_t src_ip, @@ -77,7 +76,6 @@ control process_int_report ( hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + (bit<16>) ETH_HEADER_LEN + hdr.ipv4.total_len; - fabric_metadata.compute_checksum = true; add_report_fixed_header(); } diff --git a/pipelines/fabric/src/main/resources/include/int_sink.p4 b/pipelines/fabric/src/main/resources/include/int/int_sink.p4 similarity index 83% rename from pipelines/fabric/src/main/resources/include/int_sink.p4 rename to pipelines/fabric/src/main/resources/include/int/int_sink.p4 index 4c272d685c..6c64e322e8 100644 --- a/pipelines/fabric/src/main/resources/include/int_sink.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_sink.p4 @@ -20,17 +20,18 @@ control process_int_sink ( inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { + inout fabric_metadata_t fabric_metadata) { + action restore_header () { hdr.udp.dst_port = hdr.intl4_tail.dest_port; - hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp; + hdr.ipv4.dscp = hdr.intl4_tail.dscp; } action int_sink() { // restore length fields of IPv4 header and UDP header - hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2); - hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2); + bit<16> len_bytes = (bit<16>) (hdr.intl4_shim.len_words << 5w2); + hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes; + hdr.udp.len = hdr.udp.len - len_bytes; // remove all the INT information from the packet hdr.int_header.setInvalid(); hdr.int_data.setInvalid(); @@ -51,4 +52,4 @@ control process_int_sink ( int_sink(); } } -#endif \ No newline at end of file +#endif diff --git a/pipelines/fabric/src/main/resources/include/int_source.p4 b/pipelines/fabric/src/main/resources/include/int/int_source.p4 similarity index 64% rename from pipelines/fabric/src/main/resources/include/int_source.p4 rename to pipelines/fabric/src/main/resources/include/int/int_source.p4 index 57c2b7967d..245fe7e51b 100644 --- a/pipelines/fabric/src/main/resources/include/int_source.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_source.p4 @@ -27,13 +27,12 @@ control process_int_source ( direct_counter(CounterType.packets_and_bytes) counter_int_source; action int_source(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) { - // insert INT shim header + // Insert INT shim header. hdr.intl4_shim.setValid(); // int_type: Hop-by-hop type (1) , destination type (2) hdr.intl4_shim.int_type = 1; - hdr.intl4_shim.len = INT_HEADER_LEN_WORD; - - // insert INT header + hdr.intl4_shim.len_words = INT_HEADER_LEN_WORDS; + // Insert INT header. hdr.int_header.setValid(); hdr.int_header.ver = 0; hdr.int_header.rep = 0; @@ -47,20 +46,20 @@ control process_int_source ( hdr.int_header.instruction_mask_0407 = ins_mask0407; hdr.int_header.instruction_mask_0811 = 0; // not supported hdr.int_header.instruction_mask_1215 = 0; // not supported - - // insert INT tail header + // Insert INT tail header. hdr.intl4_tail.setValid(); hdr.intl4_tail.next_proto = hdr.ipv4.protocol; hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port; - hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp; - - // add the header len (8 bytes) to total len - hdr.ipv4.total_len = hdr.ipv4.total_len + 16; - hdr.udp.len = hdr.udp.len + 16; + hdr.intl4_tail.dscp = hdr.ipv4.dscp; + // Update IP and UDP (if not valid we don't care) lens (in bytes). + hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES; + hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES; } + action int_source_dscp(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) { int_source(max_hop, ins_cnt, ins_mask0003, ins_mask0407); hdr.ipv4.dscp = INT_DSCP; + counter_int_source.count(); } table tb_int_source { @@ -74,54 +73,10 @@ control process_int_source ( int_source_dscp; } counters = counter_int_source; - size = 1024; } apply { tb_int_source.apply(); } } - -control process_set_source_sink ( - inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { - - direct_counter(CounterType.packets_and_bytes) counter_set_source; - direct_counter(CounterType.packets_and_bytes) counter_set_sink; - - action int_set_source () { - fabric_metadata.int_meta.source = 1; - } - - action int_set_sink () { - fabric_metadata.int_meta.sink = 1; - } - - table tb_set_source { - key = { - standard_metadata.ingress_port: exact; - } - actions = { - int_set_source; - } - counters = counter_set_source; - size = 256; - } - table tb_set_sink { - key = { - standard_metadata.egress_spec: exact; - } - actions = { - int_set_sink; - } - counters = counter_set_sink; - size = 256; - } - - apply { - tb_set_source.apply(); - tb_set_sink.apply(); - } -} #endif diff --git a/pipelines/fabric/src/main/resources/include/int_transit.p4 b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 similarity index 54% rename from pipelines/fabric/src/main/resources/include/int_transit.p4 rename to pipelines/fabric/src/main/resources/include/int/int_transit.p4 index 3f863e8fd2..4d4568b3ca 100644 --- a/pipelines/fabric/src/main/resources/include/int_transit.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 @@ -19,221 +19,264 @@ #define __INT_TRANSIT__ control process_int_transit ( inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { + inout fabric_metadata_t fmeta, + inout standard_metadata_t smeta) { - direct_counter(CounterType.packets_and_bytes) counter_int_insert; - direct_counter(CounterType.packets_and_bytes) counter_int_inst_0003; - direct_counter(CounterType.packets_and_bytes) counter_int_inst_0407; - - action int_update_total_hop_cnt() { - hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1; + action init_metadata(bit<32> switch_id) { + fmeta.int_meta.transit = _TRUE; +#ifdef _INT_INIT_METADATA + // Allow other targets to initialize INT metadata in their own way. + _INT_INIT_METADATA +#else + fmeta.int_meta.switch_id = switch_id; +#endif // _INT_INIT_METADATA } - action int_transit(switch_id_t switch_id) { - fabric_metadata.int_meta.switch_id = switch_id; - fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2; - } - - /* Instr Bit 0 */ - action int_set_header_0() { //switch_id +#ifdef _INT_METADATA_ACTIONS + _INT_METADATA_ACTIONS +#else + // Switch ID. + action int_set_header_0() { hdr.int_switch_id.setValid(); - hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id; + hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; } - action int_set_header_1() { //port_ids + // Port IDs. + action int_set_header_1() { hdr.int_port_ids.setValid(); - hdr.int_port_ids.ingress_port_id = - (bit<16>) standard_metadata.ingress_port; - hdr.int_port_ids.egress_port_id = - (bit<16>) standard_metadata.egress_port; + hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port; + hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port; } - action int_set_header_2() { //hop_latency + // Hop latency. + action int_set_header_2() { hdr.int_hop_latency.setValid(); - hdr.int_hop_latency.hop_latency = - (bit<32>) standard_metadata.deq_timedelta; + hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta; } - action int_set_header_3() { //q_occupancy - // TODO: Support egress queue ID + // Queue occupancy. + action int_set_header_3() { hdr.int_q_occupancy.setValid(); - hdr.int_q_occupancy.q_id = - 0; - // (bit<8>) standard_metadata.egress_qid; - hdr.int_q_occupancy.q_occupancy = - (bit<24>) standard_metadata.deq_qdepth; + // TODO: support queues in BMv2. ATM we assume only one. + hdr.int_q_occupancy.q_id = 8w0; + hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth; } - action int_set_header_4() { //ingress_tstamp + // Ingress timestamp. + action int_set_header_4() { hdr.int_ingress_tstamp.setValid(); - hdr.int_ingress_tstamp.ingress_tstamp = - (bit<32>) standard_metadata.enq_timestamp; + hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp; } - action int_set_header_5() { //egress_timestamp + // Egress timestamp. + action int_set_header_5() { hdr.int_egress_tstamp.setValid(); - hdr.int_egress_tstamp.egress_tstamp = - (bit<32>) standard_metadata.enq_timestamp + - (bit<32>) standard_metadata.deq_timedelta; + hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta; } - action int_set_header_6() { //q_congestion - // TODO: implement queue congestion support in BMv2 - // TODO: update egress queue ID + // Queue congestion. + action int_set_header_6() { hdr.int_q_congestion.setValid(); - hdr.int_q_congestion.q_id = - 0; - // (bit<8>) standard_metadata.egress_qid; - hdr.int_q_congestion.q_congestion = - // (bit<24>) queueing_metadata.deq_congestion; - 0; + // TODO: support queue congestion. + hdr.int_q_congestion.q_id = 8w0; + hdr.int_q_congestion.q_congestion = 24w0; } - action int_set_header_7() { //egress_port_tx_utilization - // TODO: implement tx utilization support in BMv2 + // Egress port utilization. + action int_set_header_7() { hdr.int_egress_tx_util.setValid(); - hdr.int_egress_tx_util.egress_port_tx_util = - // (bit<32>) queueing_metadata.tx_utilization; - 0; + // TODO: implement tx utilization support in BMv2. + hdr.int_egress_tx_util.egress_port_tx_util = 32w0; + } +#endif // _INT_METADATA_ACTIONS + + // Actions to keep track of the new metadata added. + action add_1() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4; } - /* action function for bits 0-3 combinations, 0 is msb, 3 is lsb */ - /* Each bit set indicates that corresponding INT header should be added */ + action add_2() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8; + } + + action add_3() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12; + } + + action add_4() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16; + } + + // Action function for bits 0-3 combinations, 0 is msb, 3 is lsb. + // Each bit set indicates that corresponding INT header should be added. action int_set_header_0003_i0() { } action int_set_header_0003_i1() { int_set_header_3(); + add_1(); } action int_set_header_0003_i2() { int_set_header_2(); + add_1(); } action int_set_header_0003_i3() { int_set_header_3(); int_set_header_2(); + add_2(); } action int_set_header_0003_i4() { int_set_header_1(); + add_1(); } action int_set_header_0003_i5() { int_set_header_3(); int_set_header_1(); + add_2(); } action int_set_header_0003_i6() { int_set_header_2(); int_set_header_1(); + add_2(); } action int_set_header_0003_i7() { int_set_header_3(); int_set_header_2(); int_set_header_1(); + add_3(); } action int_set_header_0003_i8() { int_set_header_0(); + add_1(); } action int_set_header_0003_i9() { int_set_header_3(); int_set_header_0(); + add_2(); } action int_set_header_0003_i10() { int_set_header_2(); int_set_header_0(); + add_2(); } action int_set_header_0003_i11() { int_set_header_3(); int_set_header_2(); int_set_header_0(); + add_3(); } action int_set_header_0003_i12() { int_set_header_1(); int_set_header_0(); + add_2(); } action int_set_header_0003_i13() { int_set_header_3(); int_set_header_1(); int_set_header_0(); + add_3(); } action int_set_header_0003_i14() { int_set_header_2(); int_set_header_1(); int_set_header_0(); + add_3(); } action int_set_header_0003_i15() { int_set_header_3(); int_set_header_2(); int_set_header_1(); int_set_header_0(); + add_4(); } - /* action function for bits 4-7 combinations, 4 is msb, 7 is lsb */ + // Action function for bits 4-7 combinations, 4 is msb, 7 is lsb. action int_set_header_0407_i0() { } action int_set_header_0407_i1() { int_set_header_7(); + add_1(); } action int_set_header_0407_i2() { int_set_header_6(); + add_1(); } action int_set_header_0407_i3() { int_set_header_7(); int_set_header_6(); + add_2(); } action int_set_header_0407_i4() { int_set_header_5(); + add_1(); } action int_set_header_0407_i5() { int_set_header_7(); int_set_header_5(); + add_2(); } action int_set_header_0407_i6() { int_set_header_6(); int_set_header_5(); + add_2(); } action int_set_header_0407_i7() { int_set_header_7(); int_set_header_6(); int_set_header_5(); + add_3(); } action int_set_header_0407_i8() { int_set_header_4(); + add_1(); } action int_set_header_0407_i9() { int_set_header_7(); int_set_header_4(); + add_2(); } action int_set_header_0407_i10() { int_set_header_6(); int_set_header_4(); + add_2(); } action int_set_header_0407_i11() { int_set_header_7(); int_set_header_6(); int_set_header_4(); + add_3(); } action int_set_header_0407_i12() { int_set_header_5(); int_set_header_4(); + add_2(); } action int_set_header_0407_i13() { int_set_header_7(); int_set_header_5(); int_set_header_4(); + add_3(); } action int_set_header_0407_i14() { int_set_header_6(); int_set_header_5(); int_set_header_4(); + add_3(); } action int_set_header_0407_i15() { int_set_header_7(); int_set_header_6(); int_set_header_5(); int_set_header_4(); + add_4(); } + // Default action used to set switch ID. table tb_int_insert { key = {} actions = { - int_transit; + init_metadata; } - counters = counter_int_insert; - size = 2; + size = 0; } - /* Table to process instruction bits 0-3 */ + // Table to process instruction bits 0-3. table tb_int_inst_0003 { key = { hdr.int_header.instruction_mask_0003 : exact; @@ -256,11 +299,28 @@ control process_int_transit ( int_set_header_0003_i14; int_set_header_0003_i15; } - counters = counter_int_inst_0003; size = 16; + const entries = { + (0x0) : int_set_header_0003_i0(); + (0x1) : int_set_header_0003_i1(); + (0x2) : int_set_header_0003_i2(); + (0x3) : int_set_header_0003_i3(); + (0x4) : int_set_header_0003_i4(); + (0x5) : int_set_header_0003_i5(); + (0x6) : int_set_header_0003_i6(); + (0x7) : int_set_header_0003_i7(); + (0x8) : int_set_header_0003_i8(); + (0x9) : int_set_header_0003_i9(); + (0xA) : int_set_header_0003_i10(); + (0xB) : int_set_header_0003_i11(); + (0xC) : int_set_header_0003_i12(); + (0xD) : int_set_header_0003_i13(); + (0xE) : int_set_header_0003_i14(); + (0xF) : int_set_header_0003_i15(); + } } - /* Table to process instruction bits 4-7 */ + // Table to process instruction bits 4-7. table tb_int_inst_0407 { key = { hdr.int_header.instruction_mask_0407 : exact; @@ -283,42 +343,45 @@ control process_int_transit ( int_set_header_0407_i14; int_set_header_0407_i15; } - counters = counter_int_inst_0407; size = 16; + const entries = { + (0x0) : int_set_header_0407_i0(); + (0x1) : int_set_header_0407_i1(); + (0x2) : int_set_header_0407_i2(); + (0x3) : int_set_header_0407_i3(); + (0x4) : int_set_header_0407_i4(); + (0x5) : int_set_header_0407_i5(); + (0x6) : int_set_header_0407_i6(); + (0x7) : int_set_header_0407_i7(); + (0x8) : int_set_header_0407_i8(); + (0x9) : int_set_header_0407_i9(); + (0xA) : int_set_header_0407_i10(); + (0xB) : int_set_header_0407_i11(); + (0xC) : int_set_header_0407_i12(); + (0xD) : int_set_header_0407_i13(); + (0xE) : int_set_header_0407_i14(); + (0xF) : int_set_header_0407_i15(); + } } apply { tb_int_insert.apply(); + if (fmeta.int_meta.transit == _FALSE) { + return; + } tb_int_inst_0003.apply(); tb_int_inst_0407.apply(); - int_update_total_hop_cnt(); - } -} - -control process_int_outer_encap ( - inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { - - action int_update_ipv4() { - hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt; - } - action int_update_udp() { - hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt; - } - action int_update_shim() { - hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt; - } - - apply { + // Increment hop cnt + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1; + // Update headers lengths. if (hdr.ipv4.isValid()) { - int_update_ipv4(); + hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes; } if (hdr.udp.isValid()) { - int_update_udp(); + hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes; } if (hdr.intl4_shim.isValid()) { - int_update_shim(); + hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words; } } } diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4 index 20c310ccf0..3f77df9595 100644 --- a/pipelines/fabric/src/main/resources/include/parser.p4 +++ b/pipelines/fabric/src/main/resources/include/parser.p4 @@ -25,6 +25,8 @@ out parsed_headers_t hdr, inout fabric_metadata_t fabric_metadata, inout standard_metadata_t standard_metadata) { + bit<6> last_ipv4_dscp = 0; + state start { transition select(standard_metadata.ingress_port) { CPU_PORT: parse_packet_out; @@ -82,6 +84,7 @@ inout standard_metadata_t standard_metadata) { state parse_ipv4 { packet.extract(hdr.ipv4); fabric_metadata.ip_proto = hdr.ipv4.protocol; + last_ipv4_dscp = hdr.ipv4.dscp; //Need header verification? transition select(hdr.ipv4.protocol) { PROTO_TCP: parse_tcp; @@ -114,10 +117,7 @@ inout standard_metadata_t standard_metadata) { fabric_metadata.l4_src_port = hdr.tcp.src_port; fabric_metadata.l4_dst_port = hdr.tcp.dst_port; #ifdef WITH_INT - transition select(hdr.ipv4.isValid() && ((hdr.ipv4.dscp & INT_DSCP) == INT_DSCP)) { - true: parse_intl4_shim; - default: accept; - } + transition parse_int; #else transition accept; #endif // WITH_INT @@ -127,19 +127,16 @@ inout standard_metadata_t standard_metadata) { packet.extract(hdr.udp); fabric_metadata.l4_src_port = hdr.udp.src_port; fabric_metadata.l4_dst_port = hdr.udp.dst_port; -#ifdef WITH_SPGW transition select(hdr.udp.dst_port) { +#ifdef WITH_SPGW UDP_PORT_GTPU: parse_gtpu; - default: accept; - } -#elif WITH_INT - transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { - true: parse_intl4_shim; - default: accept; - } +#endif // WITH_SPGW +#ifdef WITH_INT + default: parse_int; #else - transition accept; -#endif // WITH_SPGW, WITH_INT + default: accept; +#endif // WITH_INT + } } state parse_icmp { @@ -147,36 +144,6 @@ inout standard_metadata_t standard_metadata) { transition accept; } -#ifdef WITH_INT - state parse_intl4_shim { - packet.extract(hdr.intl4_shim); - transition parse_int_header; - } - - state parse_int_header { - packet.extract(hdr.int_header); - // If there is no INT metadata but the INT header (and corresponding shim header - // and tail header) exists, default value of length field in shim header - // should be INT_HEADER_LEN_WORD. - fabric_metadata.int_meta.metadata_len = hdr.intl4_shim.len - INT_HEADER_LEN_WORD; - transition select (fabric_metadata.int_meta.metadata_len) { - 0: parse_intl4_tail; - default: parse_int_data; - } - } - - state parse_int_data { - // Parse INT metadata, not INT header, INT shim header and INT tail header - packet.extract(hdr.int_data, (bit<32>) ((hdr.intl4_shim.len - INT_HEADER_LEN_WORD) << 5)); - transition parse_intl4_tail; - } - - state parse_intl4_tail { - packet.extract(hdr.intl4_tail); - transition accept; - } -#endif // WITH_INT - #ifdef WITH_SPGW state parse_gtpu { transition select(hdr.ipv4.dst_addr[31:32-S1U_SGW_PREFIX_LEN]) { @@ -196,6 +163,7 @@ inout standard_metadata_t standard_metadata) { state parse_inner_ipv4 { packet.extract(hdr.inner_ipv4); + last_ipv4_dscp = hdr.inner_ipv4.dscp; transition select(hdr.inner_ipv4.protocol) { PROTO_TCP: parse_tcp; PROTO_UDP: parse_inner_udp; @@ -209,26 +177,63 @@ inout standard_metadata_t standard_metadata) { fabric_metadata.l4_src_port = hdr.inner_udp.src_port; fabric_metadata.l4_dst_port = hdr.inner_udp.dst_port; #ifdef WITH_INT - transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { - true: parse_intl4_shim; - default: accept; - } + transition parse_int; #else transition accept; #endif // WITH_INT } #endif // WITH_SPGW + +#ifdef WITH_INT + state parse_int { + transition select(last_ipv4_dscp) { + INT_DSCP &&& INT_DSCP: parse_intl4_shim; + default: accept; + } + } + + state parse_intl4_shim { + packet.extract(hdr.intl4_shim); + transition parse_int_header; + } + + state parse_int_header { + packet.extract(hdr.int_header); + // If there is no INT metadata but the INT header (plus shim and tail) + // exists, default value of length field in shim header should be + // INT_HEADER_LEN_WORDS. + transition select (hdr.intl4_shim.len_words) { + INT_HEADER_LEN_WORDS: parse_intl4_tail; + default: parse_int_data; + } + } + + state parse_int_data { +#ifdef WITH_INT_SINK + // Parse INT metadata stack, but not tail + packet.extract(hdr.int_data, (bit<32>) (hdr.intl4_shim.len_words - INT_HEADER_LEN_WORDS) << 5); + transition parse_intl4_tail; +#else // not interested in INT data + transition accept; +#endif // WITH_INT_SINK + } + + state parse_intl4_tail { + packet.extract(hdr.intl4_tail); + transition accept; + } +#endif // WITH_INT } control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { apply { packet.emit(hdr.packet_in); -#ifdef WITH_INT +#ifdef WITH_INT_SINK packet.emit(hdr.report_ethernet); packet.emit(hdr.report_ipv4); packet.emit(hdr.report_udp); packet.emit(hdr.report_fixed_header); -#endif // WITH_INT +#endif // WITH_INT_SINK packet.emit(hdr.ethernet); packet.emit(hdr.vlan_tag); packet.emit(hdr.mpls); @@ -248,6 +253,7 @@ control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { #ifdef WITH_INT packet.emit(hdr.intl4_shim); packet.emit(hdr.int_header); +#ifdef WITH_INT_TRANSIT packet.emit(hdr.int_switch_id); packet.emit(hdr.int_port_ids); packet.emit(hdr.int_hop_latency); @@ -256,6 +262,7 @@ control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { packet.emit(hdr.int_egress_tstamp); packet.emit(hdr.int_q_congestion); packet.emit(hdr.int_egress_tx_util); +#endif // WITH_INT_TRANSIT packet.emit(hdr.int_data); packet.emit(hdr.intl4_tail); #endif // WITH_INT diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 40f5a60dbb..246401b230 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -4,13 +4,12 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["last_ipv4_dscp", 6, false], ["tmp", 4, false], - ["tmp_0", 1, false], + ["tmp_0", 8, false], ["tmp_1", 32, false], - ["tmp_2", 8, false], - ["tmp_3", 1, false], - ["tmp_4", 32, false], - ["tmp_5", 32, false], + ["tmp_2", 32, false], + ["tmp_3", 32, false], ["spgw_ingress_tmp_1", 1, false], ["spgw_ingress_tmp_2", 1, false], ["filtering_tmp_0", 1, false], @@ -20,6 +19,7 @@ ["spgw_normalizer_hasReturned_0", 1, false], ["spgw_ingress_hasReturned_0", 1, false], ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], ["fabric_metadata_t.fwd_type", 3, false], ["fabric_metadata_t.next_id", 32, false], ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], @@ -29,8 +29,7 @@ ["fabric_metadata_t.ip_proto", 8, false], ["fabric_metadata_t.l4_src_port", 16, false], ["fabric_metadata_t.l4_dst_port", 16, false], - ["fabric_metadata_t.compute_checksum", 1, false], - ["_padding_2", 1, false] + ["_padding_2", 5, false] ] }, { @@ -218,43 +217,19 @@ ["ingress_tstamp", 32, false] ] }, - { - "name" : "drop_report_header_t", - "id" : 15, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["drop_reason", 8, false], - ["pad", 16, false] - ] - }, - { - "name" : "local_report_header_t", - "id" : 16, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["queue_occupancy", 24, false], - ["egress_tstamp", 32, false] - ] - }, { "name" : "intl4_shim_t", - "id" : 17, + "id" : 15, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], - ["len", 8, false], + ["len_words", 8, false], ["rsvd2", 8, false] ] }, { "name" : "int_header_t", - "id" : 18, + "id" : 16, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -271,24 +246,16 @@ ["rsvd2", 16, false] ] }, - { - "name" : "int_data_t", - "id" : 19, - "fields" : [ - ["data", "*"] - ], - "max_length" : 1004 - }, { "name" : "int_switch_id_t", - "id" : 20, + "id" : 17, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 21, + "id" : 18, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -296,14 +263,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 22, + "id" : 19, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 23, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -311,21 +278,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 24, + "id" : 21, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 25, + "id" : 22, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 26, + "id" : 23, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -333,23 +300,32 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 27, + "id" : 24, "fields" : [ ["egress_port_tx_util", 32, false] ] }, + { + "name" : "int_data_t", + "id" : 25, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, { "name" : "intl4_tail_t", - "id" : 28, + "id" : 26, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], - ["dscp", 8, false] + ["padding", 2, false], + ["dscp", 6, false] ] }, { "name" : "spgw_meta_t", - "id" : 29, + "id" : 27, "fields" : [ ["direction", 2, false], ["ipv4_len", 16, false], @@ -361,16 +337,15 @@ }, { "name" : "int_metadata_t", - "id" : 30, + "id" : 28, "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], ["switch_id", 32, false], - ["insert_byte_cnt", 16, false], - ["source", 1, false], - ["sink", 1, false], - ["mirror_id", 8, false], - ["flow_id", 16, false], - ["metadata_len", 8, false], - ["_padding_1", 6, false] + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_1", 5, false] ] } ], @@ -529,139 +504,108 @@ "metadata" : false, "pi_omit" : true }, - { - "name" : "report_local.drop_report_header", - "id" : 22, - "header_type" : "drop_report_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.local_report_header", - "id" : 23, - "header_type" : "local_report_header_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "intl4_shim", - "id" : 24, + "id" : 22, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 25, + "id" : 23, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, - { - "name" : "int_data", - "id" : 26, - "header_type" : "int_data_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "int_switch_id", - "id" : 27, + "id" : 24, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 28, + "id" : 25, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 29, + "id" : 26, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 30, + "id" : 27, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 31, + "id" : 28, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 32, + "id" : 29, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 33, + "id" : 30, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 34, + "id" : 31, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "int_data", + "id" : 32, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "intl4_tail", - "id" : 35, + "id" : 33, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true }, { "name" : "userMetadata.spgw", - "id" : 36, + "id" : 34, "header_type" : "spgw_meta_t", "metadata" : true, "pi_omit" : true }, { "name" : "userMetadata.int_meta", - "id" : 37, + "id" : 35, "header_type" : "int_metadata_t", "metadata" : true, "pi_omit" : true } ], "header_stacks" : [], - "header_union_types" : [ - { - "name" : "local_report_t", - "id" : 0, - "headers" : [ - ["drop_report_header", "drop_report_header_t"], - ["local_report_header", "local_report_header_t"] - ] - } - ], - "header_unions" : [ - { - "name" : "report_local", - "id" : 0, - "union_type" : "local_report_t", - "header_ids" : [22, 23], - "pi_omit" : true - } - ], + "header_union_types" : [], + "header_unions" : [], "header_union_stacks" : [], "field_lists" : [ { @@ -681,7 +625,21 @@ { "name" : "start", "id" : 0, - "parser_ops" : [], + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "op" : "set" + } + ], "transitions" : [ { "type" : "hexstr", @@ -913,6 +871,19 @@ } ], "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -1067,94 +1038,16 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], - "transition_key" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - } - ] + "transition_key" : [] }, { "name" : "parse_udp", @@ -1206,7 +1099,7 @@ { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], "transition_key" : [ @@ -1240,212 +1133,14 @@ "transition_key" : [] }, { - "name" : "parse_intl4_shim", + "name" : "parse_gtpu", "id" : 11, "parser_ops" : [ - { - "parameters" : [ - { - "type" : "regular", - "value" : "intl4_shim" - } - ], - "op" : "extract" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_header" - } - ], - "op" : "extract" - }, { "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "op" : "set" - } - ], - "transitions" : [ - { - "type" : "hexstr", - "value" : "0x00", - "mask" : null, - "next_state" : "parse_intl4_tail" - }, - { - "value" : "default", - "mask" : null, - "next_state" : "parse_int_data" - } - ], - "transition_key" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - } - ] - }, - { - "name" : "parse_int_data", - "id" : 12, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_1"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x5" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "op" : "set" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_data" - }, - { - "type" : "expression", - "value" : { - "type" : "field", - "value" : ["scalars", "tmp_1"] - } - } - ], - "op" : "extract_VL" - } - ], - "transitions" : [ - { - "value" : "default", - "mask" : null, - "next_state" : "parse_intl4_tail" - } - ], - "transition_key" : [] - }, - { - "name" : "parse_intl4_tail", - "id" : 13, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "regular", - "value" : "intl4_tail" - } - ], - "op" : "extract" - } - ], - "transitions" : [ - { - "value" : "default", - "mask" : null, - "next_state" : null - } - ], - "transition_key" : [] - }, - { - "name" : "parse_gtpu", - "id" : 14, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -1504,13 +1199,13 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_0"] } ] }, { "name" : "do_parse_gtpu", - "id" : 15, + "id" : 12, "parser_ops" : [ { "parameters" : [ @@ -1529,6 +1224,19 @@ } ], "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -1565,7 +1273,7 @@ }, { "name" : "parse_inner_udp", - "id" : 16, + "id" : 13, "parser_ops" : [ { "parameters" : [ @@ -1601,80 +1309,26 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_3"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_int", + "id" : 14, + "parser_ops" : [], "transitions" : [ { "type" : "hexstr", "value" : "0x01", - "mask" : null, + "mask" : "0x01", "next_state" : "parse_intl4_shim" }, { @@ -1686,9 +1340,171 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "last_ipv4_dscp"] } ] + }, + { + "name" : "parse_intl4_shim", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_shim" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_header" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_intl4_tail" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int_data" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + } + ] + }, + { + "name" : "parse_int_data", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xfc" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x5" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_data" + }, + { + "type" : "expression", + "value" : { + "type" : "field", + "value" : ["scalars", "tmp_1"] + } + } + ], + "op" : "extract_VL" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_intl4_tail" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_intl4_tail", + "id" : 17, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_tail" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] } ] } @@ -1700,7 +1516,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1818,32 +1634,14 @@ "is_direct" : false }, { - "name" : "FabricEgress.process_int_source.counter_int_source", + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", "id" : 16, "is_direct" : true, - "binding" : "FabricEgress.process_int_source.tb_int_source" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_insert", - "id" : 17, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_insert" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0003", - "id" : 18, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0003" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0407", - "id" : 19, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 20, + "id" : 17, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan" } @@ -2277,15 +2075,25 @@ "value" : ["userMetadata.int_meta", "source"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 42, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.source = 1" + "source_fragment" : "fabric_metadata.int_meta.source = true" } } ] @@ -2303,15 +2111,25 @@ "value" : ["userMetadata.int_meta", "sink"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 98, + "filename" : "include/int/int_main.p4", + "line" : 61, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.sink = 1" + "source_fragment" : "fabric_metadata.int_meta.sink = true" } } ] @@ -2460,7 +2278,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -3124,7 +2942,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3200,7 +3018,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3315,7 +3133,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3391,7 +3209,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3683,7 +3501,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3759,7 +3577,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3874,7 +3692,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3950,7 +3768,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -4068,7 +3886,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 57, + "line" : 54, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -4083,7 +3901,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 57, + "line" : 54, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -4374,7 +4192,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 121, "column" : 36, "source_fragment" : "2w1; ..." } @@ -4460,7 +4278,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 120, + "line" : 122, "column" : 38, "source_fragment" : "2w2; ..." } @@ -4486,7 +4304,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 118, + "line" : 120, "column" : 37, "source_fragment" : "2w0; ..." } @@ -4657,7 +4475,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -4683,7 +4501,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5044,7 +4862,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -5080,7 +4898,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -5102,7 +4920,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_5"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -5138,7 +4956,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_5"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -5313,7 +5131,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 101, + "line" : 103, "column" : 28, "source_fragment" : "5; ..." } @@ -5469,7 +5287,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 114, + "line" : 116, "column" : 32, "source_fragment" : "64; ..." } @@ -5488,7 +5306,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -5853,7 +5671,7 @@ ] }, { - "name" : "FabricEgress.process_int_source.int_source_dscp", + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", "id" : 84, "runtime_data" : [ { @@ -5883,7 +5701,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.intl4_shim.setValid()" @@ -5902,7 +5720,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 33, "column" : 8, "source_fragment" : "hdr.intl4_shim.int_type = 1" @@ -5913,7 +5731,7 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, { "type" : "hexstr", @@ -5922,8 +5740,8 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 127, - "column" : 35, + "line" : 131, + "column" : 36, "source_fragment" : "4; ..." } }, @@ -5936,8 +5754,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 37, + "filename" : "include/int/int_source.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setValid()" } @@ -5955,8 +5773,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 38, + "filename" : "include/int/int_source.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_header.ver = 0" } @@ -5974,8 +5792,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 39, + "filename" : "include/int/int_source.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.int_header.rep = 0" } @@ -5993,8 +5811,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 40, + "filename" : "include/int/int_source.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.int_header.c = 0" } @@ -6012,8 +5830,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 41, + "filename" : "include/int/int_source.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_header.e = 0" } @@ -6031,8 +5849,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 42, + "filename" : "include/int/int_source.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_header.rsvd1 = 0" } @@ -6050,8 +5868,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 43, + "filename" : "include/int/int_source.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } @@ -6069,8 +5887,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 44, + "filename" : "include/int/int_source.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } @@ -6088,8 +5906,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 45, + "filename" : "include/int/int_source.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = 0" } @@ -6107,8 +5925,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 46, + "filename" : "include/int/int_source.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } @@ -6126,8 +5944,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 47, + "filename" : "include/int/int_source.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } @@ -6145,8 +5963,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 48, + "filename" : "include/int/int_source.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } @@ -6164,8 +5982,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 49, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" } @@ -6179,8 +5997,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 52, + "filename" : "include/int/int_source.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.intl4_tail.setValid()" } @@ -6198,8 +6016,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 53, + "filename" : "include/int/int_source.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" } @@ -6217,8 +6035,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 52, "column" : 8, "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" } @@ -6231,28 +6049,15 @@ "value" : ["intl4_tail", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["ipv4", "dscp"] } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 53, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp" + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -6291,10 +6096,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 58, + "filename" : "include/int/int_source.p4", + "line" : 55, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + 16" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -6333,10 +6138,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 59, + "filename" : "include/int/int_source.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + 16" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -6353,7 +6158,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 127, "column" : 24, "source_fragment" : "0x1; ..." } @@ -6361,16 +6166,148 @@ ] }, { - "name" : "FabricEgress.process_int_transit.int_update_total_hop_cnt", + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", "id" : 85, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["userMetadata.int_meta", "transit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 26, + "column" : 8, + "source_fragment" : "fmeta.int_meta.transit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 31, + "column" : 8, + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 86, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] }, { "type" : "expression", @@ -6384,7 +6321,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["userMetadata.int_meta", "new_words"] }, "right" : { "type" : "hexstr", @@ -6401,41 +6338,10 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 30, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_transit", - "id" : 86, - "runtime_data" : [ - { - "name" : "switch_id", - "bitwidth" : 32 - } - ], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.switch_id = switch_id" + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" } }, { @@ -6443,7 +6349,7 @@ "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] + "value" : ["userMetadata.int_meta", "new_bytes"] }, { "type" : "expression", @@ -6454,24 +6360,14 @@ "left" : { "type" : "expression", "value" : { - "op" : "<<", + "op" : "+", "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x0004" } } }, @@ -6484,97 +6380,18 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 35, + "filename" : "include/int/int_transit.p4", + "line" : 89, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2" + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i0", - "id" : 87, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i1", + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "id" : 88, "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i2", - "id" : 89, - "runtime_data" : [], "primitives" : [ { "op" : "add_header", @@ -6585,7 +6402,7 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", + "filename" : "include/int/int_transit.p4", "line" : 51, "column" : 8, "source_fragment" : "hdr.int_hop_latency.setValid()" @@ -6604,32 +6421,10 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", + "filename" : "include/int/int_transit.p4", "line" : 52, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i3", - "id" : 90, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -6637,1903 +6432,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i4", - "id" : 91, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i5", - "id" : 92, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i6", - "id" : 93, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i7", - "id" : 94, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i8", - "id" : 95, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i9", - "id" : 96, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i10", - "id" : 97, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i11", - "id" : 98, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i12", - "id" : 99, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i13", - "id" : 100, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i14", - "id" : 101, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i15", - "id" : 102, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i0", - "id" : 103, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i1", - "id" : 104, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i2", - "id" : 105, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i3", - "id" : 106, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i4", - "id" : 107, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["userMetadata.int_meta", "new_words"] }, { "type" : "expression", @@ -8547,1438 +6446,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "value" : ["userMetadata.int_meta", "new_words"] }, "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i5", - "id" : 108, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i6", - "id" : 109, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i7", - "id" : 110, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i8", - "id" : 111, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i9", - "id" : 112, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i10", - "id" : 113, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i11", - "id" : 114, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i12", - "id" : 115, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i13", - "id" : 116, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i14", - "id" : 117, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i15", - "id" : 118, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_ipv4", - "id" : 119, - "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" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 304, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_udp", - "id" : 120, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 307, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_shim", - "id" : 121, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } + "type" : "hexstr", + "value" : "0x01" } } }, @@ -9991,17 +6463,5641 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 310, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt" + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_report.do_report_encapsulation", - "id" : 122, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 102, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 105, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 106, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 107, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 108, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 109, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 110, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 111, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 112, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 113, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 116, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", + "id" : 118, "runtime_data" : [ { "name" : "src_mac", @@ -10034,8 +12130,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 50, + "filename" : "include/int/int_report.p4", + "line" : 49, "column" : 8, "source_fragment" : "hdr.report_ethernet.setValid()" } @@ -10053,8 +12149,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 51, + "filename" : "include/int/int_report.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" } @@ -10072,8 +12168,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 52, + "filename" : "include/int/int_report.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" } @@ -10092,7 +12188,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -10106,8 +12202,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 56, + "filename" : "include/int/int_report.p4", + "line" : 55, "column" : 8, "source_fragment" : "hdr.report_ipv4.setValid()" } @@ -10125,8 +12221,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 57, + "filename" : "include/int/int_report.p4", + "line" : 56, "column" : 8, "source_fragment" : "hdr.report_ipv4.version = 4w4" } @@ -10144,8 +12240,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 58, + "filename" : "include/int/int_report.p4", + "line" : 57, "column" : 8, "source_fragment" : "hdr.report_ipv4.ihl = 4w5" } @@ -10163,8 +12259,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 59, + "filename" : "include/int/int_report.p4", + "line" : 58, "column" : 8, "source_fragment" : "hdr.report_ipv4.dscp = 6w0" } @@ -10182,8 +12278,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 60, + "filename" : "include/int/int_report.p4", + "line" : 59, "column" : 8, "source_fragment" : "hdr.report_ipv4.ecn = 2w0" } @@ -10224,8 +12320,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 62, + "filename" : "include/int/int_report.p4", + "line" : 61, "column" : 8, "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." } @@ -10243,8 +12339,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 65, + "filename" : "include/int/int_report.p4", + "line" : 64, "column" : 8, "source_fragment" : "hdr.report_ipv4.identification = 0" } @@ -10262,8 +12358,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 66, + "filename" : "include/int/int_report.p4", + "line" : 65, "column" : 8, "source_fragment" : "hdr.report_ipv4.flags = 0" } @@ -10281,8 +12377,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 67, + "filename" : "include/int/int_report.p4", + "line" : 66, "column" : 8, "source_fragment" : "hdr.report_ipv4.frag_offset = 0" } @@ -10300,8 +12396,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 68, + "filename" : "include/int/int_report.p4", + "line" : 67, "column" : 8, "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" } @@ -10320,7 +12416,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -10338,8 +12434,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 70, + "filename" : "include/int/int_report.p4", + "line" : 69, "column" : 8, "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" } @@ -10357,8 +12453,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 71, + "filename" : "include/int/int_report.p4", + "line" : 70, "column" : 8, "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" } @@ -10372,8 +12468,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 74, + "filename" : "include/int/int_report.p4", + "line" : 73, "column" : 8, "source_fragment" : "hdr.report_udp.setValid()" } @@ -10391,8 +12487,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 75, + "filename" : "include/int/int_report.p4", + "line" : 74, "column" : 8, "source_fragment" : "hdr.report_udp.src_port = 0" } @@ -10410,8 +12506,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 76, + "filename" : "include/int/int_report.p4", + "line" : 75, "column" : 8, "source_fragment" : "hdr.report_udp.dst_port = mon_port" } @@ -10452,41 +12548,12 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 77, + "filename" : "include/int/int_report.p4", + "line" : 76, "column" : 8, "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." } }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t.compute_checksum"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 80, - "column" : 8, - "source_fragment" : "fabric_metadata.compute_checksum = true" - } - }, { "op" : "add_header", "parameters" : [ @@ -10496,7 +12563,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 30, "column" : 8, "source_fragment" : "hdr.report_fixed_header.setValid()" @@ -10515,7 +12582,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.report_fixed_header.ver = 0" @@ -10535,7 +12602,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 137, "column" : 31, "source_fragment" : "0; ..." } @@ -10553,7 +12620,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 34, "column" : 8, "source_fragment" : "hdr.report_fixed_header.d = 0" @@ -10572,7 +12639,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 35, "column" : 8, "source_fragment" : "hdr.report_fixed_header.q = 0" @@ -10591,7 +12658,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 36, "column" : 8, "source_fragment" : "hdr.report_fixed_header.f = 1" @@ -10610,7 +12677,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 37, "column" : 8, "source_fragment" : "hdr.report_fixed_header.rsvd = 0" @@ -10630,7 +12697,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 136, + "line" : 141, "column" : 21, "source_fragment" : "1; ..." } @@ -10648,7 +12715,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 41, "column" : 8, "source_fragment" : "hdr.report_fixed_header.seq_no = 0" @@ -10667,17 +12734,17 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 43, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = ..." + "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp" } } ] }, { - "name" : "FabricEgress.process_int_sink.restore_header", - "id" : 123, + "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", + "id" : 119, "runtime_data" : [], "primitives" : [ { @@ -10693,7 +12760,7 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_sink.p4", "line" : 26, "column" : 8, "source_fragment" : "hdr.udp.dst_port = hdr.intl4_tail.dest_port" @@ -10707,35 +12774,22 @@ "value" : ["ipv4", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["intl4_tail", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x3f" - } - } - } + "type" : "field", + "value" : ["intl4_tail", "dscp"] } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_sink.p4", "line" : 27, "column" : 8, - "source_fragment" : "hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp" + "source_fragment" : "hdr.ipv4.dscp = hdr.intl4_tail.dscp" } } ] }, { - "name" : "FabricEgress.process_int_sink.int_sink", - "id" : 124, + "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", + "id" : 120, "runtime_data" : [], "primitives" : [ { @@ -10773,11 +12827,11 @@ "op" : "<<", "left" : { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x02" } } }, @@ -10804,10 +12858,10 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 32, + "filename" : "include/int/int_sink.p4", + "line" : 33, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2)" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes" } }, { @@ -10845,11 +12899,11 @@ "op" : "<<", "left" : { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x02" } } }, @@ -10876,10 +12930,10 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 33, + "filename" : "include/int/int_sink.p4", + "line" : 34, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2)" + "source_fragment" : "hdr.udp.len = hdr.udp.len - len_bytes" } }, { @@ -10891,8 +12945,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 35, + "filename" : "include/int/int_sink.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setInvalid()" } @@ -10906,8 +12960,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 36, + "filename" : "include/int/int_sink.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_data.setInvalid()" } @@ -10921,8 +12975,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 37, + "filename" : "include/int/int_sink.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.intl4_shim.setInvalid()" } @@ -10936,8 +12990,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 38, + "filename" : "include/int/int_sink.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.intl4_tail.setInvalid()" } @@ -10951,8 +13005,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 39, + "filename" : "include/int/int_sink.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_switch_id.setInvalid()" } @@ -10966,8 +13020,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 40, + "filename" : "include/int/int_sink.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_port_ids.setInvalid()" } @@ -10981,8 +13035,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 41, + "filename" : "include/int/int_sink.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_hop_latency.setInvalid()" } @@ -10996,8 +13050,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 42, + "filename" : "include/int/int_sink.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_q_occupancy.setInvalid()" } @@ -11011,8 +13065,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 43, + "filename" : "include/int/int_sink.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" } @@ -11026,8 +13080,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 44, + "filename" : "include/int/int_sink.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" } @@ -11041,8 +13095,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 45, + "filename" : "include/int/int_sink.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_q_congestion.setInvalid()" } @@ -11056,8 +13110,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 46, + "filename" : "include/int/int_sink.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" } @@ -11066,7 +13120,7 @@ }, { "name" : "FabricEgress.pkt_io_egress.pop_vlan", - "id" : 125, + "id" : 121, "runtime_data" : [], "primitives" : [ { @@ -11083,7 +13137,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -11098,7 +13152,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -11107,7 +13161,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 126, + "id" : 122, "runtime_data" : [], "primitives" : [ { @@ -11148,7 +13202,7 @@ }, { "name" : "act_31", - "id" : 127, + "id" : 123, "runtime_data" : [], "primitives" : [ { @@ -11161,7 +13215,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -11180,12 +13234,274 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } } ] + }, + { + "name" : "act_32", + "id" : 124, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_33", + "id" : 125, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 370, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_34", + "id" : 126, + "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" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 378, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_35", + "id" : 127, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 375, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_36", + "id" : 128, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 381, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_37", + "id" : 129, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 384, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] } ], "pipelines" : [ @@ -11194,7 +13510,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 43, + "line" : 40, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -12538,8 +14854,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_source", "id" : 46, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 46, "column" : 10, "source_fragment" : "tb_set_source" }, @@ -12553,7 +14869,7 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, @@ -12575,8 +14891,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_sink", "id" : 47, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 111, + "filename" : "include/int/int_main.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_set_sink" }, @@ -12590,7 +14906,7 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, @@ -13226,22 +15542,29 @@ "name" : "node_72", "id" : 22, "source_info" : { - "filename" : "fabric.p4", - "line" : 77, + "filename" : "include/int/int_main.p4", + "line" : 82, "column" : 11, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" + "source_fragment" : "fabric_metadata.int_meta.sink == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "sink"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, @@ -13255,7 +15578,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 87, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -13271,14 +15594,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [125], + "action_ids" : [121], "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], "base_default_next" : "node_80", "next_tables" : { "FabricEgress.pkt_io_egress.pop_vlan" : "node_80" }, "default_entry" : { - "action_id" : 125, + "action_id" : 121, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13317,14 +15640,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [127], + "action_ids" : [123], "actions" : ["act_31"], "base_default_next" : null, "next_tables" : { "act_31" : null }, "default_entry" : { - "action_id" : 127, + "action_id" : 123, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13382,7 +15705,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [126, 80], + "action_ids" : [122, 80], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], "base_default_next" : "node_86", "next_tables" : { @@ -13420,11 +15743,11 @@ } }, { - "name" : "FabricEgress.process_int_source.tb_int_source", + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "id" : 55, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 66, + "filename" : "include/int/int_source.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_int_source" }, @@ -13461,10 +15784,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [84, 75], - "actions" : ["FabricEgress.process_int_source.int_source_dscp", "NoAction"], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], "base_default_next" : "node_91", "next_tables" : { - "FabricEgress.process_int_source.int_source_dscp" : "node_91", + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_91", "NoAction" : "node_91" }, "default_entry" : { @@ -13475,27 +15798,50 @@ } }, { - "name" : "FabricEgress.process_int_transit.tb_int_insert", + "name" : "tbl_act_32", "id" : 56, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [124], + "actions" : ["act_32"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "next_tables" : { + "act_32" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + }, + "default_entry" : { + "action_id" : 124, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "id" : 57, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 227, + "filename" : "include/int/int_transit.p4", + "line" : 271, "column" : 10, "source_fragment" : "tb_int_insert" }, "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2, - "with_counters" : true, + "max_size" : 1024, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86, 76], - "actions" : ["FabricEgress.process_int_transit.int_transit", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "action_ids" : [85, 76], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "base_default_next" : "node_94", "next_tables" : { - "FabricEgress.process_int_transit.int_transit" : "FabricEgress.process_int_transit.tb_int_inst_0003", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0003" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_94", + "NoAction" : "node_94" }, "default_entry" : { "action_id" : 76, @@ -13505,11 +15851,34 @@ } }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0003", - "id" : 57, + "name" : "tbl_act_33", + "id" : 58, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [125], + "actions" : ["act_33"], + "base_default_next" : "node_96", + "next_tables" : { + "act_33" : "node_96" + }, + "default_entry" : { + "action_id" : 125, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "id" : 59, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 237, + "filename" : "include/int/int_transit.p4", + "line" : 280, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -13524,44 +15893,254 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 77], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_transit.int_set_header_0003_i15", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "action_ids" : [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 77], + "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" : { - "FabricEgress.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { "action_id" : 77, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 91, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 92, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 93, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 94, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 95, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 96, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 97, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 98, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 99, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 100, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 101, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "id" : 58, + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "id" : 60, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 264, + "filename" : "include/int/int_transit.p4", + "line" : 324, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -13576,86 +16155,250 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "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, 78], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_process_int_transit_int_update_total_hop_cnt", + "action_ids" : [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 78], + "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_34", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0407_i0" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i1" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i2" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i3" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i4" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i5" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i6" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i7" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i8" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i9" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i10" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i11" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i12" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i13" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i14" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i15" : "tbl_process_int_transit_int_update_total_hop_cnt", - "NoAction" : "tbl_process_int_transit_int_update_total_hop_cnt" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_34", + "NoAction" : "tbl_act_34" }, "default_entry" : { "action_id" : 78, "action_const" : false, "action_data" : [], "action_entry_const" : false - } - }, - { - "name" : "tbl_process_int_transit_int_update_total_hop_cnt", - "id" : 59, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [85], - "actions" : ["FabricEgress.process_int_transit.int_update_total_hop_cnt"], - "base_default_next" : "node_96", - "next_tables" : { - "FabricEgress.process_int_transit.int_update_total_hop_cnt" : "node_96" }, - "default_entry" : { - "action_id" : 85, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 102, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 103, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 104, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 105, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 106, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 107, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 108, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 109, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 110, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 111, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 112, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 113, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 114, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 115, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 116, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 117, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "tbl_process_int_outer_encap_int_update_ipv4", - "id" : 60, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [119], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_ipv4"], - "base_default_next" : "node_98", - "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_ipv4" : "node_98" - }, - "default_entry" : { - "action_id" : 119, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_udp", + "name" : "tbl_act_34", "id" : 61, "key" : [], "match_type" : "exact", @@ -13664,21 +16407,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [120], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_udp"], + "action_ids" : [127], + "actions" : ["act_35"], "base_default_next" : "node_100", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_udp" : "node_100" + "act_35" : "node_100" }, "default_entry" : { - "action_id" : 120, + "action_id" : 127, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_outer_encap_int_update_shim", + "name" : "tbl_act_35", "id" : 62, "key" : [], "match_type" : "exact", @@ -13687,25 +16430,71 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [121], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_shim"], + "action_ids" : [126], + "actions" : ["act_34"], "base_default_next" : "node_102", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_shim" : "node_102" + "act_34" : "node_102" }, "default_entry" : { - "action_id" : 121, + "action_id" : 126, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricEgress.process_int_report.tb_generate_report", + "name" : "tbl_act_36", "id" : 63, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [128], + "actions" : ["act_36"], + "base_default_next" : "node_104", + "next_tables" : { + "act_36" : "node_104" + }, + "default_entry" : { + "action_id" : 128, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_37", + "id" : 64, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [129], + "actions" : ["act_37"], + "base_default_next" : "node_106", + "next_tables" : { + "act_37" : "node_106" + }, + "default_entry" : { + "action_id" : 129, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", + "id" : 65, "source_info" : { - "filename" : "include/int_report.p4", - "line" : 87, + "filename" : "include/int/int_report.p4", + "line" : 85, "column" : 10, "source_fragment" : "tb_generate_report" }, @@ -13716,12 +16505,12 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [122, 79], - "actions" : ["FabricEgress.process_int_report.do_report_encapsulation", "NoAction"], - "base_default_next" : "node_104", + "action_ids" : [118, 79], + "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "NoAction"], + "base_default_next" : "node_108", "next_tables" : { - "FabricEgress.process_int_report.do_report_encapsulation" : "node_104", - "NoAction" : "node_104" + "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_108", + "NoAction" : "node_108" }, "default_entry" : { "action_id" : 79, @@ -13731,8 +16520,8 @@ } }, { - "name" : "tbl_process_int_sink_restore_header", - "id" : 64, + "name" : "tbl_process_int_main_process_int_sink_restore_header", + "id" : 66, "key" : [], "match_type" : "exact", "type" : "simple", @@ -13740,22 +16529,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [123], - "actions" : ["FabricEgress.process_int_sink.restore_header"], - "base_default_next" : "tbl_process_int_sink_int_sink", + "action_ids" : [119], + "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_sink.restore_header" : "tbl_process_int_sink_int_sink" + "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" }, "default_entry" : { - "action_id" : 123, + "action_id" : 119, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_sink_int_sink", - "id" : 65, + "name" : "tbl_process_int_main_process_int_sink_int_sink", + "id" : 67, "key" : [], "match_type" : "exact", "type" : "simple", @@ -13763,14 +16552,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [124], - "actions" : ["FabricEgress.process_int_sink.int_sink"], + "action_ids" : [120], + "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_sink.int_sink" : null + "FabricEgress.process_int_main.process_int_sink.int_sink" : null }, "default_entry" : { - "action_id" : 124, + "action_id" : 120, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13784,7 +16573,7 @@ "id" : 23, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -13817,7 +16606,7 @@ "id" : 24, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -13843,7 +16632,7 @@ "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -13893,7 +16682,7 @@ "id" : 26, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, @@ -14031,8 +16820,8 @@ "name" : "node_88", "id" : 29, "source_info" : { - "filename" : "fabric.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 98, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -14111,34 +16900,41 @@ "name" : "node_89", "id" : 30, "source_info" : { - "filename" : "fabric.p4", - "line" : 104, + "filename" : "include/int/int_main.p4", + "line" : 102, "column" : 16, - "source_fragment" : "fabric_metadata.int_meta.source == 1" + "source_fragment" : "fabric_metadata.int_meta.source == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "source"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, - "true_next" : "FabricEgress.process_int_source.tb_int_source", + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "false_next" : "node_91" }, { "name" : "node_91", "id" : 31, "source_info" : { - "filename" : "fabric.p4", - "line" : 107, + "filename" : "include/int/int_main.p4", + "line" : 106, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -14154,14 +16950,71 @@ } }, "false_next" : null, - "true_next" : "FabricEgress.process_int_transit.tb_int_insert" + "true_next" : "tbl_act_32" + }, + { + "name" : "node_94", + "id" : 32, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 369, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_33", + "false_next" : "node_96" }, { "name" : "node_96", - "id" : 32, + "id" : 33, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "false_next" : "node_106" + }, + { + "name" : "node_100", + "id" : 34, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 314, + "filename" : "include/int/int_transit.p4", + "line" : 377, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -14176,15 +17029,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_ipv4", - "false_next" : "node_98" + "true_next" : "tbl_act_35", + "false_next" : "node_102" }, { - "name" : "node_98", - "id" : 33, + "name" : "node_102", + "id" : 35, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 317, + "filename" : "include/int/int_transit.p4", + "line" : 380, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -14199,15 +17052,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_udp", - "false_next" : "node_100" + "true_next" : "tbl_act_36", + "false_next" : "node_104" }, { - "name" : "node_100", - "id" : 34, + "name" : "node_104", + "id" : 36, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 320, + "filename" : "include/int/int_transit.p4", + "line" : 383, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, @@ -14222,14 +17075,14 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_shim", - "false_next" : "node_102" + "true_next" : "tbl_act_37", + "false_next" : "node_106" }, { - "name" : "node_102", - "id" : 35, + "name" : "node_106", + "id" : 37, "source_info" : { - "filename" : "fabric.p4", + "filename" : "include/int/int_main.p4", "line" : 111, "column" : 20, "source_fragment" : "standard_metadata.instance_type == 1" @@ -14248,34 +17101,41 @@ } } }, - "true_next" : "FabricEgress.process_int_report.tb_generate_report", - "false_next" : "node_104" + "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", + "false_next" : "node_108" }, { - "name" : "node_104", - "id" : 36, + "name" : "node_108", + "id" : 38, "source_info" : { - "filename" : "fabric.p4", + "filename" : "include/int/int_main.p4", "line" : 115, "column" : 20, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" + "source_fragment" : "fabric_metadata.int_meta.sink == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "sink"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, "false_next" : null, - "true_next" : "tbl_process_int_sink_restore_header" + "true_next" : "tbl_process_int_main_process_int_sink_restore_header" } ] } diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index e9551596f4..5fcf0f6658 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -59,7 +59,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318787614 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -82,7 +82,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318770551 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -473,8 +473,8 @@ tables { } tables { preamble { - id: 33566961 - name: "FabricEgress.process_int_source.tb_int_source" + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" alias: "tb_int_source" } match_fields { @@ -502,37 +502,36 @@ tables { match_type: TERNARY } action_refs { - id: 16807851 + id: 16785857 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318776637 + direct_resource_ids: 318800047 size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33602084 - name: "FabricEgress.process_int_transit.tb_int_insert" + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } action_refs { - id: 16806530 + id: 16780783 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318794595 - size: 2 + size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33561642 - name: "FabricEgress.process_int_transit.tb_int_inst_0003" + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" alias: "tb_int_inst_0003" } match_fields { @@ -542,65 +541,65 @@ tables { match_type: EXACT } action_refs { - id: 16788439 + id: 16809886 } action_refs { - id: 16792702 + id: 16783130 } action_refs { - id: 16834796 + id: 16809096 } action_refs { - id: 16815381 + id: 16834117 } action_refs { - id: 16824457 + id: 16825314 } action_refs { - id: 16796364 + id: 16811436 } action_refs { - id: 16806322 + id: 16802199 } action_refs { - id: 16819063 + id: 16796779 } action_refs { - id: 16828306 + id: 16787676 } action_refs { - id: 16799786 + id: 16825351 } action_refs { - id: 16796975 + id: 16793999 } action_refs { - id: 16801652 + id: 16786714 } action_refs { - id: 16778440 + id: 16814203 } action_refs { - id: 16790887 + id: 16807054 } action_refs { - id: 16783849 + id: 16800064 } action_refs { - id: 16837726 + id: 16792997 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318777781 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33571998 - name: "FabricEgress.process_int_transit.tb_int_inst_0407" + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" alias: "tb_int_inst_0407" } match_fields { @@ -610,69 +609,69 @@ tables { match_type: EXACT } action_refs { - id: 16839298 + id: 16819022 } action_refs { - id: 16837018 + id: 16804144 } action_refs { - id: 16827414 + id: 16829117 } action_refs { - id: 16786021 + id: 16797781 } action_refs { - id: 16785131 + id: 16813543 } action_refs { - id: 16808652 + id: 16824974 } action_refs { - id: 16799296 + id: 16815362 } action_refs { - id: 16780668 + id: 16835399 } action_refs { - id: 16805625 + id: 16834505 } action_refs { - id: 16778495 + id: 16811493 } action_refs { - id: 16784981 + id: 16825476 } action_refs { - id: 16806353 + id: 16799777 } action_refs { - id: 16802140 + id: 16829592 } action_refs { - id: 16827601 + id: 16805877 } action_refs { - id: 16820295 + id: 16780182 } action_refs { - id: 16810955 + id: 16799476 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318818305 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33607792 - name: "FabricEgress.process_int_report.tb_generate_report" + id: 33618104 + name: "FabricEgress.process_int_main.process_int_report.tb_generate_report" alias: "tb_generate_report" } action_refs { - id: 16814383 + id: 16788620 } action_refs { id: 16800567 @@ -1160,8 +1159,8 @@ actions { } actions { preamble { - id: 16807851 - name: "FabricEgress.process_int_source.int_source_dscp" + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" alias: "int_source_dscp" } params { @@ -1187,16 +1186,9 @@ actions { } actions { preamble { - id: 16806280 - name: "FabricEgress.process_int_transit.int_update_total_hop_cnt" - alias: "int_update_total_hop_cnt" - } -} -actions { - preamble { - id: 16806530 - name: "FabricEgress.process_int_transit.int_transit" - alias: "int_transit" + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" } params { id: 1 @@ -1206,253 +1198,232 @@ actions { } actions { preamble { - id: 16788439 - name: "FabricEgress.process_int_transit.int_set_header_0003_i0" + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" alias: "int_set_header_0003_i0" } } actions { preamble { - id: 16792702 - name: "FabricEgress.process_int_transit.int_set_header_0003_i1" + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" alias: "int_set_header_0003_i1" } } actions { preamble { - id: 16834796 - name: "FabricEgress.process_int_transit.int_set_header_0003_i2" + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" alias: "int_set_header_0003_i2" } } actions { preamble { - id: 16815381 - name: "FabricEgress.process_int_transit.int_set_header_0003_i3" + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" alias: "int_set_header_0003_i3" } } actions { preamble { - id: 16824457 - name: "FabricEgress.process_int_transit.int_set_header_0003_i4" + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" alias: "int_set_header_0003_i4" } } actions { preamble { - id: 16796364 - name: "FabricEgress.process_int_transit.int_set_header_0003_i5" + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" alias: "int_set_header_0003_i5" } } actions { preamble { - id: 16806322 - name: "FabricEgress.process_int_transit.int_set_header_0003_i6" + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" alias: "int_set_header_0003_i6" } } actions { preamble { - id: 16819063 - name: "FabricEgress.process_int_transit.int_set_header_0003_i7" + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" alias: "int_set_header_0003_i7" } } actions { preamble { - id: 16828306 - name: "FabricEgress.process_int_transit.int_set_header_0003_i8" + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" alias: "int_set_header_0003_i8" } } actions { preamble { - id: 16799786 - name: "FabricEgress.process_int_transit.int_set_header_0003_i9" + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" alias: "int_set_header_0003_i9" } } actions { preamble { - id: 16796975 - name: "FabricEgress.process_int_transit.int_set_header_0003_i10" + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" alias: "int_set_header_0003_i10" } } actions { preamble { - id: 16801652 - name: "FabricEgress.process_int_transit.int_set_header_0003_i11" + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" alias: "int_set_header_0003_i11" } } actions { preamble { - id: 16778440 - name: "FabricEgress.process_int_transit.int_set_header_0003_i12" + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" alias: "int_set_header_0003_i12" } } actions { preamble { - id: 16790887 - name: "FabricEgress.process_int_transit.int_set_header_0003_i13" + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" alias: "int_set_header_0003_i13" } } actions { preamble { - id: 16783849 - name: "FabricEgress.process_int_transit.int_set_header_0003_i14" + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" alias: "int_set_header_0003_i14" } } actions { preamble { - id: 16837726 - name: "FabricEgress.process_int_transit.int_set_header_0003_i15" + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" alias: "int_set_header_0003_i15" } } actions { preamble { - id: 16839298 - name: "FabricEgress.process_int_transit.int_set_header_0407_i0" + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" alias: "int_set_header_0407_i0" } } actions { preamble { - id: 16837018 - name: "FabricEgress.process_int_transit.int_set_header_0407_i1" + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" alias: "int_set_header_0407_i1" } } actions { preamble { - id: 16827414 - name: "FabricEgress.process_int_transit.int_set_header_0407_i2" + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" alias: "int_set_header_0407_i2" } } actions { preamble { - id: 16786021 - name: "FabricEgress.process_int_transit.int_set_header_0407_i3" + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" alias: "int_set_header_0407_i3" } } actions { preamble { - id: 16785131 - name: "FabricEgress.process_int_transit.int_set_header_0407_i4" + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" alias: "int_set_header_0407_i4" } } actions { preamble { - id: 16808652 - name: "FabricEgress.process_int_transit.int_set_header_0407_i5" + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" alias: "int_set_header_0407_i5" } } actions { preamble { - id: 16799296 - name: "FabricEgress.process_int_transit.int_set_header_0407_i6" + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" alias: "int_set_header_0407_i6" } } actions { preamble { - id: 16780668 - name: "FabricEgress.process_int_transit.int_set_header_0407_i7" + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" alias: "int_set_header_0407_i7" } } actions { preamble { - id: 16805625 - name: "FabricEgress.process_int_transit.int_set_header_0407_i8" + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" alias: "int_set_header_0407_i8" } } actions { preamble { - id: 16778495 - name: "FabricEgress.process_int_transit.int_set_header_0407_i9" + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" alias: "int_set_header_0407_i9" } } actions { preamble { - id: 16784981 - name: "FabricEgress.process_int_transit.int_set_header_0407_i10" + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" alias: "int_set_header_0407_i10" } } actions { preamble { - id: 16806353 - name: "FabricEgress.process_int_transit.int_set_header_0407_i11" + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" alias: "int_set_header_0407_i11" } } actions { preamble { - id: 16802140 - name: "FabricEgress.process_int_transit.int_set_header_0407_i12" + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" alias: "int_set_header_0407_i12" } } actions { preamble { - id: 16827601 - name: "FabricEgress.process_int_transit.int_set_header_0407_i13" + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" alias: "int_set_header_0407_i13" } } actions { preamble { - id: 16820295 - name: "FabricEgress.process_int_transit.int_set_header_0407_i14" + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" alias: "int_set_header_0407_i14" } } actions { preamble { - id: 16810955 - name: "FabricEgress.process_int_transit.int_set_header_0407_i15" + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" alias: "int_set_header_0407_i15" } } actions { preamble { - id: 16816602 - name: "FabricEgress.process_int_outer_encap.int_update_ipv4" - alias: "int_update_ipv4" - } -} -actions { - preamble { - id: 16829666 - name: "FabricEgress.process_int_outer_encap.int_update_udp" - alias: "int_update_udp" - } -} -actions { - preamble { - id: 16826978 - name: "FabricEgress.process_int_outer_encap.int_update_shim" - alias: "int_update_shim" - } -} -actions { - preamble { - id: 16814383 - name: "FabricEgress.process_int_report.do_report_encapsulation" + id: 16788620 + name: "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" alias: "do_report_encapsulation" } params { @@ -1483,15 +1454,15 @@ actions { } actions { preamble { - id: 16810741 - name: "FabricEgress.process_int_sink.restore_header" + id: 16816369 + name: "FabricEgress.process_int_main.process_int_sink.restore_header" alias: "restore_header" } } actions { preamble { - id: 16787662 - name: "FabricEgress.process_int_sink.int_sink" + id: 16834566 + name: "FabricEgress.process_int_main.process_int_sink.int_sink" alias: "int_sink" } } @@ -1697,47 +1668,14 @@ direct_counters { } direct_counters { preamble { - id: 318776637 - name: "FabricEgress.process_int_source.counter_int_source" + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" alias: "counter_int_source" } spec { unit: BOTH } - direct_table_id: 33566961 -} -direct_counters { - preamble { - id: 318794595 - name: "FabricEgress.process_int_transit.counter_int_insert" - alias: "counter_int_insert" - } - spec { - unit: BOTH - } - direct_table_id: 33602084 -} -direct_counters { - preamble { - id: 318777781 - name: "FabricEgress.process_int_transit.counter_int_inst_0003" - alias: "counter_int_inst_0003" - } - spec { - unit: BOTH - } - direct_table_id: 33561642 -} -direct_counters { - preamble { - id: 318818305 - name: "FabricEgress.process_int_transit.counter_int_inst_0407" - alias: "counter_int_inst_0407" - } - spec { - unit: BOTH - } - direct_table_id: 33571998 + direct_table_id: 33612258 } direct_counters { preamble { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index f0917e4eb0..a179079ec7 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -4,17 +4,16 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["last_ipv4_dscp", 6, false], ["tmp", 4, false], - ["tmp_0", 1, false], - ["tmp_1", 1, false], - ["tmp_2", 32, false], - ["tmp_3", 32, false], - ["tmp_4", 32, false], + ["tmp_0", 32, false], + ["tmp_1", 32, false], ["filtering_tmp_0", 1, false], ["next_tmp_2", 1, false], ["next_tmp_3", 1, false], ["next_tmp_4", 1, false], ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], ["fabric_metadata_t.fwd_type", 3, false], ["fabric_metadata_t.next_id", 32, false], ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], @@ -24,8 +23,7 @@ ["fabric_metadata_t.ip_proto", 8, false], ["fabric_metadata_t.l4_src_port", 16, false], ["fabric_metadata_t.l4_dst_port", 16, false], - ["fabric_metadata_t.compute_checksum", 1, false], - ["_padding_1", 5, false] + ["_padding_1", 1, false] ] }, { @@ -169,58 +167,19 @@ ["_pad", 7, false] ] }, - { - "name" : "report_fixed_header_t", - "id" : 12, - "fields" : [ - ["ver", 4, false], - ["nproto", 4, false], - ["d", 1, false], - ["q", 1, false], - ["f", 1, false], - ["rsvd", 15, false], - ["hw_id", 6, false], - ["seq_no", 32, false], - ["ingress_tstamp", 32, false] - ] - }, - { - "name" : "drop_report_header_t", - "id" : 13, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["drop_reason", 8, false], - ["pad", 16, false] - ] - }, - { - "name" : "local_report_header_t", - "id" : 14, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["queue_occupancy", 24, false], - ["egress_tstamp", 32, false] - ] - }, { "name" : "intl4_shim_t", - "id" : 15, + "id" : 12, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], - ["len", 8, false], + ["len_words", 8, false], ["rsvd2", 8, false] ] }, { "name" : "int_header_t", - "id" : 16, + "id" : 13, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -237,24 +196,16 @@ ["rsvd2", 16, false] ] }, - { - "name" : "int_data_t", - "id" : 17, - "fields" : [ - ["data", "*"] - ], - "max_length" : 1004 - }, { "name" : "int_switch_id_t", - "id" : 18, + "id" : 14, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 19, + "id" : 15, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -262,14 +213,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 20, + "id" : 16, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 21, + "id" : 17, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -277,21 +228,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 22, + "id" : 18, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 23, + "id" : 19, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 24, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -299,32 +250,40 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 25, + "id" : 21, "fields" : [ ["egress_port_tx_util", 32, false] ] }, + { + "name" : "int_data_t", + "id" : 22, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, { "name" : "intl4_tail_t", - "id" : 26, + "id" : 23, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], - ["dscp", 8, false] + ["padding", 2, false], + ["dscp", 6, false] ] }, { "name" : "int_metadata_t", - "id" : 27, + "id" : 24, "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], ["switch_id", 32, false], - ["insert_byte_cnt", 16, false], - ["source", 1, false], - ["sink", 1, false], - ["mirror_id", 8, false], - ["flow_id", 16, false], - ["metadata_len", 8, false], - ["_padding_0", 6, false] + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_0", 5, false] ] } ], @@ -413,168 +372,103 @@ "metadata" : false, "pi_omit" : true }, - { - "name" : "report_ethernet", - "id" : 12, - "header_type" : "ethernet_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_ipv4", - "id" : 13, - "header_type" : "ipv4_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_udp", - "id" : 14, - "header_type" : "udp_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_fixed_header", - "id" : 15, - "header_type" : "report_fixed_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.drop_report_header", - "id" : 16, - "header_type" : "drop_report_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.local_report_header", - "id" : 17, - "header_type" : "local_report_header_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "intl4_shim", - "id" : 18, + "id" : 12, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 19, + "id" : 13, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, - { - "name" : "int_data", - "id" : 20, - "header_type" : "int_data_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "int_switch_id", - "id" : 21, + "id" : 14, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 22, + "id" : 15, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 23, + "id" : 16, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 24, + "id" : 17, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 25, + "id" : 18, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 26, + "id" : 19, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 27, + "id" : 20, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 28, + "id" : 21, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "int_data", + "id" : 22, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "intl4_tail", - "id" : 29, + "id" : 23, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true }, { "name" : "userMetadata.int_meta", - "id" : 30, + "id" : 24, "header_type" : "int_metadata_t", "metadata" : true, "pi_omit" : true } ], "header_stacks" : [], - "header_union_types" : [ - { - "name" : "local_report_t", - "id" : 0, - "headers" : [ - ["drop_report_header", "drop_report_header_t"], - ["local_report_header", "local_report_header_t"] - ] - } - ], - "header_unions" : [ - { - "name" : "report_local", - "id" : 0, - "union_type" : "local_report_t", - "header_ids" : [16, 17], - "pi_omit" : true - } - ], + "header_union_types" : [], + "header_unions" : [], "header_union_stacks" : [], - "field_lists" : [ - { - "id" : 1, - "name" : "fl", - "elements" : [] - } - ], + "field_lists" : [], "errors" : [], "enums" : [], "parsers" : [ @@ -800,6 +694,19 @@ } ], "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -895,94 +802,16 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], - "transition_key" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - } - ] + "transition_key" : [] }, { "name" : "parse_udp", @@ -1022,92 +851,19 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_1"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["udp", "dst_port"] } ] }, @@ -1135,8 +891,32 @@ "transition_key" : [] }, { - "name" : "parse_intl4_shim", + "name" : "parse_int", "id" : 10, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x01", + "mask" : "0x01", + "next_state" : "parse_intl4_shim" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + } + ] + }, + { + "name" : "parse_intl4_shim", + "id" : 11, "parser_ops" : [ { "parameters" : [ @@ -1155,48 +935,12 @@ } ], "op" : "extract" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ { "type" : "hexstr", - "value" : "0x00", + "value" : "0x04", "mask" : null, "next_state" : "parse_intl4_tail" }, @@ -1209,109 +953,26 @@ "transition_key" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] + "value" : ["intl4_shim", "len_words"] } ] }, { "name" : "parse_int_data", - "id" : 11, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_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" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x5" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "op" : "set" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_data" - }, - { - "type" : "expression", - "value" : { - "type" : "field", - "value" : ["scalars", "tmp_2"] - } - } - ], - "op" : "extract_VL" - } - ], + "id" : 12, + "parser_ops" : [], "transitions" : [ { "value" : "default", "mask" : null, - "next_state" : "parse_intl4_tail" + "next_state" : null } ], "transition_key" : [] }, { "name" : "parse_intl4_tail", - "id" : 12, + "id" : 13, "parser_ops" : [ { "parameters" : [ @@ -1342,11 +1003,11 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "report_ethernet", "report_ipv4", "report_udp", "report_fixed_header", "ethernet", "vlan_tag", "mpls", "arp", "ipv4", "tcp", "udp", "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", "ethernet", "vlan_tag", "mpls", "arp", "ipv4", "tcp", "udp", "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"] } ], "meter_arrays" : [], @@ -1357,75 +1018,69 @@ "is_direct" : true, "binding" : "FabricIngress.process_set_source_sink.tb_set_source" }, - { - "name" : "FabricIngress.process_set_source_sink.counter_set_sink", - "id" : 1, - "is_direct" : true, - "binding" : "FabricIngress.process_set_source_sink.tb_set_sink" - }, { "name" : "FabricIngress.filtering.ingress_port_vlan_counter", - "id" : 2, + "id" : 1, "is_direct" : true, "binding" : "FabricIngress.filtering.ingress_port_vlan" }, { "name" : "FabricIngress.filtering.fwd_classifier_counter", - "id" : 3, + "id" : 2, "is_direct" : true, "binding" : "FabricIngress.filtering.fwd_classifier" }, { "name" : "FabricIngress.forwarding.bridging_counter", - "id" : 4, + "id" : 3, "is_direct" : true, "binding" : "FabricIngress.forwarding.bridging" }, { "name" : "FabricIngress.forwarding.mpls_counter", - "id" : 5, + "id" : 4, "is_direct" : true, "binding" : "FabricIngress.forwarding.mpls" }, { "name" : "FabricIngress.forwarding.routing_v4_counter", - "id" : 6, + "id" : 5, "is_direct" : true, "binding" : "FabricIngress.forwarding.routing_v4" }, { "name" : "FabricIngress.forwarding.acl_counter", - "id" : 7, + "id" : 6, "is_direct" : true, "binding" : "FabricIngress.forwarding.acl" }, { "name" : "FabricIngress.next.vlan_meta_counter", - "id" : 8, + "id" : 7, "is_direct" : true, "binding" : "FabricIngress.next.vlan_meta" }, { "name" : "FabricIngress.next.simple_counter", - "id" : 9, + "id" : 8, "is_direct" : true, "binding" : "FabricIngress.next.simple" }, { "name" : "FabricIngress.next.hashed_counter", - "id" : 10, + "id" : 9, "is_direct" : true, "binding" : "FabricIngress.next.hashed" }, { "name" : "FabricIngress.next.multicast_counter", - "id" : 11, + "id" : 10, "is_direct" : true, "binding" : "FabricIngress.next.multicast" }, { "name" : "FabricIngress.port_counters_control.egress_port_counter", - "id" : 12, + "id" : 11, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 23, @@ -1437,7 +1092,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 13, + "id" : 12, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 24, @@ -1448,32 +1103,14 @@ "is_direct" : false }, { - "name" : "FabricEgress.process_int_source.counter_int_source", - "id" : 14, + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", + "id" : 13, "is_direct" : true, - "binding" : "FabricEgress.process_int_source.tb_int_source" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_insert", - "id" : 15, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_insert" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0003", - "id" : 16, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0003" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0407", - "id" : 17, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 18, + "id" : 14, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan" } @@ -1648,20 +1285,14 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 7, "runtime_data" : [], "primitives" : [] }, - { - "name" : "nop", - "id" : 8, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricIngress.process_set_source_sink.int_set_source", - "id" : 9, + "id" : 8, "runtime_data" : [], "primitives" : [ { @@ -1672,48 +1303,32 @@ "value" : ["userMetadata.int_meta", "source"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 42, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.source = 1" - } - } - ] - }, - { - "name" : "FabricIngress.process_set_source_sink.int_set_sink", - "id" : 10, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/int_source.p4", - "line" : 98, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.sink = 1" + "source_fragment" : "fabric_metadata.int_meta.source = true" } } ] }, { "name" : "FabricIngress.filtering.drop", - "id" : 11, + "id" : 9, "runtime_data" : [], "primitives" : [ { @@ -1730,7 +1345,7 @@ }, { "name" : "FabricIngress.filtering.set_vlan", - "id" : 12, + "id" : 10, "runtime_data" : [ { "name" : "new_vlan_id", @@ -1761,7 +1376,7 @@ }, { "name" : "FabricIngress.filtering.push_internal_vlan", - "id" : 13, + "id" : 11, "runtime_data" : [ { "name" : "new_vlan_id", @@ -1855,7 +1470,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -1912,13 +1527,13 @@ }, { "name" : "FabricIngress.filtering.nop_ingress_port_vlan", - "id" : 14, + "id" : 12, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.filtering.set_forwarding_type", - "id" : 15, + "id" : 13, "runtime_data" : [ { "name" : "fwd_type", @@ -1949,7 +1564,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_bridging", - "id" : 16, + "id" : 14, "runtime_data" : [ { "name" : "next_id", @@ -1980,7 +1595,7 @@ }, { "name" : "FabricIngress.forwarding.pop_mpls_and_next", - "id" : 17, + "id" : 15, "runtime_data" : [ { "name" : "next_id", @@ -2026,7 +1641,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v4", - "id" : 18, + "id" : 16, "runtime_data" : [ { "name" : "next_id", @@ -2057,13 +1672,13 @@ }, { "name" : "FabricIngress.forwarding.nop_routing_v4", - "id" : 19, + "id" : 17, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.forwarding.set_next_id_acl", - "id" : 20, + "id" : 18, "runtime_data" : [ { "name" : "next_id", @@ -2094,7 +1709,7 @@ }, { "name" : "FabricIngress.forwarding.punt_to_cpu", - "id" : 21, + "id" : 19, "runtime_data" : [], "primitives" : [ { @@ -2130,7 +1745,7 @@ }, { "name" : "FabricIngress.forwarding.clone_to_cpu", - "id" : 22, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -2166,7 +1781,7 @@ }, { "name" : "FabricIngress.forwarding.drop", - "id" : 23, + "id" : 21, "runtime_data" : [], "primitives" : [ { @@ -2183,13 +1798,13 @@ }, { "name" : "FabricIngress.forwarding.nop_acl", - "id" : 24, + "id" : 22, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.next.set_vlan", - "id" : 25, + "id" : 23, "runtime_data" : [ { "name" : "new_vlan_id", @@ -2220,7 +1835,7 @@ }, { "name" : "FabricIngress.next.output_simple", - "id" : 26, + "id" : 24, "runtime_data" : [ { "name" : "port_num", @@ -2251,7 +1866,7 @@ }, { "name" : "FabricIngress.next.set_vlan_output", - "id" : 27, + "id" : 25, "runtime_data" : [ { "name" : "new_vlan_id", @@ -2305,7 +1920,7 @@ }, { "name" : "FabricIngress.next.l3_routing_simple", - "id" : 28, + "id" : 26, "runtime_data" : [ { "name" : "port_num", @@ -2382,7 +1997,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v4_simple", - "id" : 29, + "id" : 27, "runtime_data" : [ { "name" : "port_num", @@ -2488,7 +2103,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2564,7 +2179,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2573,7 +2188,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v6_simple", - "id" : 30, + "id" : 28, "runtime_data" : [ { "name" : "port_num", @@ -2679,7 +2294,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2755,7 +2370,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2764,7 +2379,7 @@ }, { "name" : "FabricIngress.next.l3_routing_vlan", - "id" : 31, + "id" : 29, "runtime_data" : [ { "name" : "port_num", @@ -2864,7 +2479,7 @@ }, { "name" : "FabricIngress.next.l3_routing_hashed", - "id" : 32, + "id" : 30, "runtime_data" : [ { "name" : "port_num", @@ -2941,7 +2556,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v4_hashed", - "id" : 33, + "id" : 31, "runtime_data" : [ { "name" : "port_num", @@ -3047,7 +2662,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3123,7 +2738,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3132,7 +2747,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v6_hashed", - "id" : 34, + "id" : 32, "runtime_data" : [ { "name" : "port_num", @@ -3238,7 +2853,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3314,7 +2929,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3323,7 +2938,7 @@ }, { "name" : "FabricIngress.next.set_mcast_group", - "id" : 35, + "id" : 33, "runtime_data" : [ { "name" : "gid", @@ -3383,7 +2998,7 @@ }, { "name" : "act", - "id" : 36, + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -3453,7 +3068,7 @@ }, { "name" : "act_0", - "id" : 37, + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3483,7 +3098,7 @@ }, { "name" : "act_1", - "id" : 38, + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3513,7 +3128,7 @@ }, { "name" : "act_2", - "id" : 39, + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3530,7 +3145,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -3539,7 +3154,7 @@ }, { "name" : "act_3", - "id" : 40, + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -3556,7 +3171,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3565,7 +3180,7 @@ }, { "name" : "act_4", - "id" : 41, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -3595,7 +3210,7 @@ }, { "name" : "act_5", - "id" : 42, + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -3625,7 +3240,7 @@ }, { "name" : "act_6", - "id" : 43, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -3655,7 +3270,7 @@ }, { "name" : "act_7", - "id" : 44, + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -3685,7 +3300,7 @@ }, { "name" : "act_8", - "id" : 45, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -3715,7 +3330,7 @@ }, { "name" : "act_9", - "id" : 46, + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -3745,7 +3360,7 @@ }, { "name" : "act_10", - "id" : 47, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -3775,7 +3390,7 @@ }, { "name" : "act_11", - "id" : 48, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -3811,7 +3426,7 @@ }, { "name" : "act_12", - "id" : 49, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -3860,7 +3475,7 @@ }, { "name" : "act_13", - "id" : 50, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -3868,7 +3483,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -3904,7 +3519,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] } ], "source_info" : { @@ -3918,7 +3533,7 @@ }, { "name" : "act_14", - "id" : 51, + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -3926,7 +3541,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_1"] }, { "type" : "expression", @@ -3962,7 +3577,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_1"] } ], "source_info" : { @@ -3975,24 +3590,22 @@ ] }, { - "name" : "act_15", + "name" : "NoAction", + "id" : 50, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 51, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", "id" : 52, "runtime_data" : [], - "primitives" : [ - { - "op" : "clone_ingress_pkt_to_egress", - "parameters" : [ - { - "type" : "hexstr", - "value" : "0x000001f4" - }, - { - "type" : "hexstr", - "value" : "0x1" - } - ] - } - ] + "primitives" : [] }, { "name" : "NoAction", @@ -4001,92 +3614,68 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 54, "runtime_data" : [], "primitives" : [] }, { - "name" : "NoAction", + "name" : "drop_now", "id" : 55, "runtime_data" : [], - "primitives" : [] + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] }, { - "name" : "NoAction", + "name" : "drop_now", "id" : 56, "runtime_data" : [], - "primitives" : [] + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] }, { - "name" : "NoAction", + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", "id" : 57, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "nop", - "id" : 58, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "drop_now", - "id" : 59, - "runtime_data" : [], - "primitives" : [ - { - "op" : "drop", - "parameters" : [], - "source_info" : { - "filename" : "include/control/../action.p4", - "line" : 24, - "column" : 4, - "source_fragment" : "mark_to_drop()" - } - }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/../action.p4", - "line" : 25, - "column" : 4, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "drop_now", - "id" : 60, - "runtime_data" : [], - "primitives" : [ - { - "op" : "drop", - "parameters" : [], - "source_info" : { - "filename" : "include/control/../action.p4", - "line" : 24, - "column" : 4, - "source_fragment" : "mark_to_drop()" - } - }, - { - "op" : "exit", - "parameters" : [], - "source_info" : { - "filename" : "include/control/../action.p4", - "line" : 25, - "column" : 4, - "source_fragment" : "exit" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_source.int_source_dscp", - "id" : 61, "runtime_data" : [ { "name" : "max_hop", @@ -4115,7 +3704,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.intl4_shim.setValid()" @@ -4134,7 +3723,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 33, "column" : 8, "source_fragment" : "hdr.intl4_shim.int_type = 1" @@ -4145,7 +3734,7 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, { "type" : "hexstr", @@ -4154,8 +3743,8 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 127, - "column" : 35, + "line" : 131, + "column" : 36, "source_fragment" : "4; ..." } }, @@ -4168,8 +3757,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 37, + "filename" : "include/int/int_source.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setValid()" } @@ -4187,8 +3776,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 38, + "filename" : "include/int/int_source.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_header.ver = 0" } @@ -4206,8 +3795,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 39, + "filename" : "include/int/int_source.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.int_header.rep = 0" } @@ -4225,8 +3814,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 40, + "filename" : "include/int/int_source.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.int_header.c = 0" } @@ -4244,8 +3833,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 41, + "filename" : "include/int/int_source.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_header.e = 0" } @@ -4263,8 +3852,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 42, + "filename" : "include/int/int_source.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_header.rsvd1 = 0" } @@ -4282,8 +3871,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 43, + "filename" : "include/int/int_source.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } @@ -4301,8 +3890,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 44, + "filename" : "include/int/int_source.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } @@ -4320,8 +3909,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 45, + "filename" : "include/int/int_source.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = 0" } @@ -4339,8 +3928,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 46, + "filename" : "include/int/int_source.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } @@ -4358,8 +3947,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 47, + "filename" : "include/int/int_source.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } @@ -4377,8 +3966,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 48, + "filename" : "include/int/int_source.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } @@ -4396,8 +3985,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 49, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" } @@ -4411,8 +4000,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 52, + "filename" : "include/int/int_source.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.intl4_tail.setValid()" } @@ -4430,8 +4019,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 53, + "filename" : "include/int/int_source.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" } @@ -4449,8 +4038,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 52, "column" : 8, "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" } @@ -4463,28 +4052,15 @@ "value" : ["intl4_tail", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["ipv4", "dscp"] } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 53, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp" + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -4523,10 +4099,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 58, + "filename" : "include/int/int_source.p4", + "line" : 55, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + 16" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -4565,10 +4141,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 59, + "filename" : "include/int/int_source.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + 16" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -4585,7 +4161,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 127, "column" : 24, "source_fragment" : "0x1; ..." } @@ -4593,57 +4169,8 @@ ] }, { - "name" : "FabricEgress.process_int_transit.int_update_total_hop_cnt", - "id" : 62, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_header", "total_hop_cnt"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["int_header", "total_hop_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 30, - "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_transit", - "id" : 63, + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 58, "runtime_data" : [ { "name" : "switch_id", @@ -4656,4046 +4183,7 @@ "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.switch_id = switch_id" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i0", - "id" : 64, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i1", - "id" : 65, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i2", - "id" : 66, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i3", - "id" : 67, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i4", - "id" : 68, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i5", - "id" : 69, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i6", - "id" : 70, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i7", - "id" : 71, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i8", - "id" : 72, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i9", - "id" : 73, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i10", - "id" : 74, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i11", - "id" : 75, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i12", - "id" : 76, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i13", - "id" : 77, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i14", - "id" : 78, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i15", - "id" : 79, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "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_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "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_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "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_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "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_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i0", - "id" : 80, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i1", - "id" : 81, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i2", - "id" : 82, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i3", - "id" : 83, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i4", - "id" : 84, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i5", - "id" : 85, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i6", - "id" : 86, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i7", - "id" : 87, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i8", - "id" : 88, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i9", - "id" : 89, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i10", - "id" : 90, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i11", - "id" : 91, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i12", - "id" : 92, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i13", - "id" : 93, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i14", - "id" : 94, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i15", - "id" : 95, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/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_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "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_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "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_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "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_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_ipv4", - "id" : 96, - "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" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 304, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_udp", - "id" : 97, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 307, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_shim", - "id" : 98, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 310, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_report.do_report_encapsulation", - "id" : 99, - "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 - } - ], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_ethernet" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 50, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "dst_addr"] - }, - { - "type" : "runtime_data", - "value" : 1 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "src_addr"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "ether_type"] - }, - { - "type" : "hexstr", - "value" : "0x0800" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 92, - "column" : 31, - "source_fragment" : "0x0800; ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_ipv4" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 56, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "version"] - }, - { - "type" : "hexstr", - "value" : "0x04" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.version = 4w4" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ihl"] - }, - { - "type" : "hexstr", - "value" : "0x05" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ihl = 4w5" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "dscp"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 59, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.dscp = 6w0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ecn"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 60, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ecn = 2w0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "hexstr", - "value" : "0x0036" - }, - "right" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 62, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "identification"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.identification = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "flags"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.flags = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "frag_offset"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 67, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.frag_offset = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ttl"] - }, - { - "type" : "hexstr", - "value" : "0xff" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 68, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "protocol"] - }, - { - "type" : "hexstr", - "value" : "0x11" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 98, - "column" : 25, - "source_fragment" : "17; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "src_addr"] - }, - { - "type" : "runtime_data", - "value" : 2 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "dst_addr"] - }, - { - "type" : "runtime_data", - "value" : 3 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_udp" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.report_udp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_udp", "src_port"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.report_udp.src_port = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_udp", "dst_port"] - }, - { - "type" : "runtime_data", - "value" : 4 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 76, - "column" : 8, - "source_fragment" : "hdr.report_udp.dst_port = mon_port" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "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_report.p4", - "line" : 77, - "column" : 8, - "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t.compute_checksum"] + "value" : ["userMetadata.int_meta", "transit"] }, { "type" : "expression", @@ -8713,25 +4201,10 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 80, + "filename" : "include/int/int_transit.p4", + "line" : 26, "column" : 8, - "source_fragment" : "fabric_metadata.compute_checksum = true" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_fixed_header" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 30, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.setValid()" + "source_fragment" : "fmeta.int_meta.transit = true" } }, { @@ -8739,196 +4212,46 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "ver"] + "value" : ["userMetadata.int_meta", "switch_id"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_transit.p4", "line" : 31, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ver = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "nproto"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 132, - "column" : 31, - "source_fragment" : "0; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "d"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.d = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "q"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.q = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "f"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 36, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.f = 1" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "rsvd"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 37, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.rsvd = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "hw_id"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 136, - "column" : 21, - "source_fragment" : "1; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "seq_no"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.seq_no = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 43, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = ..." + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" } } ] }, { - "name" : "FabricEgress.process_int_sink.restore_header", - "id" : 100, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 59, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 60, "runtime_data" : [], "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["udp", "dst_port"] - }, - { - "type" : "field", - "value" : ["intl4_tail", "dest_port"] + "type" : "header", + "value" : "int_q_occupancy" } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 26, + "filename" : "include/int/int_transit.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.dst_port = hdr.intl4_tail.dest_port" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -8936,7 +4259,26 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "dscp"] + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] }, { "type" : "expression", @@ -8946,266 +4288,116 @@ "op" : "&", "left" : { "type" : "field", - "value" : ["intl4_tail", "dscp"] + "value" : ["standard_metadata", "deq_qdepth"] }, "right" : { "type" : "hexstr", - "value" : "0x3f" + "value" : "0xffffff" } } } } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 27, + "filename" : "include/int/int_transit.p4", + "line" : 59, "column" : 8, - "source_fragment" : "hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp" + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_sink.int_sink", - "id" : 101, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 61, "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" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 32, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2)" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "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"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 33, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2)" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_header" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "hdr.int_header.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_data" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 36, - "column" : 8, - "source_fragment" : "hdr.int_data.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_shim" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 37, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_tail" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 38, - "column" : 8, - "source_fragment" : "hdr.intl4_tail.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 39, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setInvalid()" - } - }, - { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9213,14 +4405,124 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 41, + "filename" : "include/int/int_transit.p4", + "line" : 51, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setInvalid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { - "op" : "remove_header", + "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" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9228,59 +4530,2792 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 42, + "filename" : "include/int/int_transit.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_ingress_tstamp" + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 43, + "filename" : "include/int/int_transit.p4", + "line" : 58, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_egress_tstamp" + "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_sink.p4", - "line" : 44, + "filename" : "include/int/int_transit.p4", + "line" : 59, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_hop_latency" } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", "line" : 45, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setInvalid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { - "op" : "remove_header", + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 64, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 66, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 67, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 70, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 71, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 72, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 73, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 75, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9288,17 +7323,2784 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 46, + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 77, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 78, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 79, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 82, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 83, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 84, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 85, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" } } ] }, { "name" : "FabricEgress.pkt_io_egress.pop_vlan", - "id" : 102, + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -9315,7 +10117,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -9330,7 +10132,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -9339,7 +10141,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 103, + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -9379,8 +10181,8 @@ ] }, { - "name" : "act_16", - "id" : 104, + "name" : "act_15", + "id" : 93, "runtime_data" : [], "primitives" : [ { @@ -9393,7 +10195,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -9412,12 +10214,274 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } } ] + }, + { + "name" : "act_16", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_17", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 370, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_18", + "id" : 96, + "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" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 378, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_19", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 375, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_20", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 381, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_21", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 384, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] } ], "pipelines" : [ @@ -9426,7 +10490,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 43, + "line" : 40, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -9442,14 +10506,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36], + "action_ids" : [34], "actions" : ["act"], "base_default_next" : null, "next_tables" : { "act" : null }, "default_entry" : { - "action_id" : 36, + "action_id" : 34, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9490,7 +10554,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [13, 12, 11, 14], + "action_ids" : [11, 10, 9, 12], "actions" : ["FabricIngress.filtering.push_internal_vlan", "FabricIngress.filtering.set_vlan", "FabricIngress.filtering.drop", "FabricIngress.filtering.nop_ingress_port_vlan"], "base_default_next" : null, "next_tables" : { @@ -9498,7 +10562,7 @@ "__MISS__" : "tbl_act_1" }, "default_entry" : { - "action_id" : 13, + "action_id" : 11, "action_const" : true, "action_data" : ["0xffe"], "action_entry_const" : true @@ -9514,14 +10578,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [37], + "action_ids" : [35], "actions" : ["act_0"], "base_default_next" : "node_7", "next_tables" : { "act_0" : "node_7" }, "default_entry" : { - "action_id" : 37, + "action_id" : 35, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9537,14 +10601,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], + "action_ids" : [36], "actions" : ["act_1"], "base_default_next" : "node_7", "next_tables" : { "act_1" : "node_7" }, "default_entry" : { - "action_id" : 38, + "action_id" : 36, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9585,14 +10649,14 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15], + "action_ids" : [13], "actions" : ["FabricIngress.filtering.set_forwarding_type"], "base_default_next" : "node_10", "next_tables" : { "FabricIngress.filtering.set_forwarding_type" : "node_10" }, "default_entry" : { - "action_id" : 15, + "action_id" : 13, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true @@ -9608,14 +10672,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39], + "action_ids" : [37], "actions" : ["act_2"], "base_default_next" : "node_10", "next_tables" : { "act_2" : "node_10" }, "default_entry" : { - "action_id" : 39, + "action_id" : 37, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9650,7 +10714,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [16, 2], + "action_ids" : [14, 1], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "NoAction"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { @@ -9658,7 +10722,7 @@ "NoAction" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 2, + "action_id" : 1, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9687,7 +10751,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [17, 3], + "action_ids" : [15, 2], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "NoAction"], "base_default_next" : "tbl_act_3", "next_tables" : { @@ -9695,7 +10759,7 @@ "NoAction" : "tbl_act_3" }, "default_entry" : { - "action_id" : 3, + "action_id" : 2, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9711,14 +10775,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], + "action_ids" : [38], "actions" : ["act_3"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { "act_3" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 40, + "action_id" : 38, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9747,7 +10811,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [18, 19, 4], + "action_ids" : [16, 17, 3], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "NoAction"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { @@ -9756,7 +10820,7 @@ "NoAction" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 4, + "action_id" : 3, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9851,7 +10915,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [20, 21, 22, 23, 24], + "action_ids" : [18, 19, 20, 21, 22], "actions" : ["FabricIngress.forwarding.set_next_id_acl", "FabricIngress.forwarding.punt_to_cpu", "FabricIngress.forwarding.clone_to_cpu", "FabricIngress.forwarding.drop", "FabricIngress.forwarding.nop_acl"], "base_default_next" : "tbl_act_4", "next_tables" : { @@ -9862,7 +10926,7 @@ "FabricIngress.forwarding.nop_acl" : "tbl_act_4" }, "default_entry" : { - "action_id" : 24, + "action_id" : 22, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9878,14 +10942,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], + "action_ids" : [39], "actions" : ["act_4"], "base_default_next" : "FabricIngress.next.vlan_meta", "next_tables" : { "act_4" : "FabricIngress.next.vlan_meta" }, "default_entry" : { - "action_id" : 41, + "action_id" : 39, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9914,7 +10978,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [25, 8], + "action_ids" : [23, 7], "actions" : ["FabricIngress.next.set_vlan", "nop"], "base_default_next" : "FabricIngress.next.simple", "next_tables" : { @@ -9922,7 +10986,7 @@ "nop" : "FabricIngress.next.simple" }, "default_entry" : { - "action_id" : 8, + "action_id" : 7, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9951,7 +11015,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [26, 27, 28, 29, 30, 31, 5], + "action_ids" : [24, 25, 26, 27, 28, 29, 4], "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.set_vlan_output", "FabricIngress.next.l3_routing_simple", "FabricIngress.next.mpls_routing_v4_simple", "FabricIngress.next.mpls_routing_v6_simple", "FabricIngress.next.l3_routing_vlan", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -9959,7 +11023,7 @@ "__MISS__" : "tbl_act_6" }, "default_entry" : { - "action_id" : 5, + "action_id" : 4, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9975,14 +11039,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [42], + "action_ids" : [40], "actions" : ["act_5"], "base_default_next" : "node_23", "next_tables" : { "act_5" : "node_23" }, "default_entry" : { - "action_id" : 42, + "action_id" : 40, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9998,14 +11062,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43], + "action_ids" : [41], "actions" : ["act_6"], "base_default_next" : "node_23", "next_tables" : { "act_6" : "node_23" }, "default_entry" : { - "action_id" : 43, + "action_id" : 41, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10035,7 +11099,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32, 33, 34, 6], + "action_ids" : [30, 31, 32, 5], "actions" : ["FabricIngress.next.l3_routing_hashed", "FabricIngress.next.mpls_routing_v4_hashed", "FabricIngress.next.mpls_routing_v6_hashed", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -10053,14 +11117,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [44], + "action_ids" : [42], "actions" : ["act_7"], "base_default_next" : "node_27", "next_tables" : { "act_7" : "node_27" }, "default_entry" : { - "action_id" : 44, + "action_id" : 42, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10076,14 +11140,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], + "action_ids" : [43], "actions" : ["act_8"], "base_default_next" : "node_27", "next_tables" : { "act_8" : "node_27" }, "default_entry" : { - "action_id" : 45, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10112,7 +11176,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [35, 7], + "action_ids" : [33, 6], "actions" : ["FabricIngress.next.set_mcast_group", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -10120,7 +11184,7 @@ "__MISS__" : "tbl_act_10" }, "default_entry" : { - "action_id" : 7, + "action_id" : 6, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -10136,14 +11200,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46], + "action_ids" : [44], "actions" : ["act_9"], "base_default_next" : "node_31", "next_tables" : { "act_9" : "node_31" }, "default_entry" : { - "action_id" : 46, + "action_id" : 44, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10159,14 +11223,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], + "action_ids" : [45], "actions" : ["act_10"], "base_default_next" : "node_31", "next_tables" : { "act_10" : "node_31" }, "default_entry" : { - "action_id" : 47, + "action_id" : 45, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10182,14 +11246,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], + "action_ids" : [46], "actions" : ["act_11"], "base_default_next" : "node_33", "next_tables" : { "act_11" : "node_33" }, "default_entry" : { - "action_id" : 48, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10205,14 +11269,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], + "action_ids" : [47], "actions" : ["act_12"], "base_default_next" : "node_37", "next_tables" : { "act_12" : "node_37" }, "default_entry" : { - "action_id" : 49, + "action_id" : 47, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10228,14 +11292,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], + "action_ids" : [48], "actions" : ["act_13"], "base_default_next" : "node_39", "next_tables" : { "act_13" : "node_39" }, "default_entry" : { - "action_id" : 50, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10251,14 +11315,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [49], "actions" : ["act_14"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { "act_14" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 51, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10268,8 +11332,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_source", "id" : 26, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 46, "column" : 10, "source_fragment" : "tb_set_source" }, @@ -10283,16 +11347,16 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [9, 0], + "action_ids" : [8, 0], "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "NoAction"], - "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_sink", + "base_default_next" : null, "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_source" : "FabricIngress.process_set_source_sink.tb_set_sink", - "NoAction" : "FabricIngress.process_set_source_sink.tb_set_sink" + "FabricIngress.process_set_source_sink.int_set_source" : null, + "NoAction" : null }, "default_entry" : { "action_id" : 0, @@ -10300,66 +11364,6 @@ "action_data" : [], "action_entry_const" : false } - }, - { - "name" : "FabricIngress.process_set_source_sink.tb_set_sink", - "id" : 27, - "source_info" : { - "filename" : "include/int_source.p4", - "line" : 111, - "column" : 10, - "source_fragment" : "tb_set_sink" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "standard_metadata.egress_spec", - "target" : ["standard_metadata", "egress_spec"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 256, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [10, 1], - "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "NoAction"], - "base_default_next" : "node_43", - "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_sink" : "node_43", - "NoAction" : "node_43" - }, - "default_entry" : { - "action_id" : 1, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "tbl_act_15", - "id" : 28, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [52], - "actions" : ["act_15"], - "base_default_next" : null, - "next_tables" : { - "act_15" : null - }, - "default_entry" : { - "action_id" : 52, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } } ], "action_profiles" : [ @@ -10731,32 +11735,6 @@ }, "true_next" : "tbl_act_14", "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" - }, - { - "name" : "node_43", - "id" : 13, - "source_info" : { - "filename" : "fabric.p4", - "line" : 77, - "column" : 11, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "false_next" : null, - "true_next" : "tbl_act_15" } ] }, @@ -10765,14 +11743,60 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 87, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_47", + "init_table" : "node_44", "tables" : [ { "name" : "tbl_pkt_io_egress_pop_vlan", + "id" : 27, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [91], + "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], + "base_default_next" : "node_48", + "next_tables" : { + "FabricEgress.pkt_io_egress.pop_vlan" : "node_48" + }, + "default_entry" : { + "action_id" : 91, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now", + "id" : 28, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [55], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_15", + "next_tables" : { + "drop_now" : "tbl_act_15" + }, + "default_entry" : { + "action_id" : 55, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_15", "id" : 29, "key" : [], "match_type" : "exact", @@ -10781,21 +11805,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], - "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], - "base_default_next" : "node_51", + "action_ids" : [93], + "actions" : ["act_15"], + "base_default_next" : null, "next_tables" : { - "FabricEgress.pkt_io_egress.pop_vlan" : "node_51" + "act_15" : null }, "default_entry" : { - "action_id" : 102, + "action_id" : 93, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_drop_now", + "name" : "tbl_drop_now_0", "id" : 30, "key" : [], "match_type" : "exact", @@ -10804,60 +11828,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59], - "actions" : ["drop_now"], - "base_default_next" : "tbl_act_16", - "next_tables" : { - "drop_now" : "tbl_act_16" - }, - "default_entry" : { - "action_id" : 59, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_16", - "id" : 31, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [104], - "actions" : ["act_16"], - "base_default_next" : null, - "next_tables" : { - "act_16" : null - }, - "default_entry" : { - "action_id" : 104, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_drop_now_0", - "id" : 32, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [60], + "action_ids" : [56], "actions" : ["drop_now"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "drop_now" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 60, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10865,7 +11843,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 33, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 258, @@ -10892,26 +11870,26 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 58], + "action_ids" : [92, 54], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : "node_57", + "base_default_next" : "node_54", "next_tables" : { - "FabricEgress.egress_next.pop_vlan" : "node_57", - "nop" : "node_57" + "FabricEgress.egress_next.pop_vlan" : "node_54", + "nop" : "node_54" }, "default_entry" : { - "action_id" : 58, + "action_id" : 54, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricEgress.process_int_source.tb_int_source", - "id" : 34, + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "id" : 32, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 66, + "filename" : "include/int/int_source.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_int_source" }, @@ -10947,56 +11925,102 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61, 53], - "actions" : ["FabricEgress.process_int_source.int_source_dscp", "NoAction"], - "base_default_next" : "node_60", + "action_ids" : [57, 50], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], + "base_default_next" : "node_57", "next_tables" : { - "FabricEgress.process_int_source.int_source_dscp" : "node_60", - "NoAction" : "node_60" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_57", + "NoAction" : "node_57" }, "default_entry" : { - "action_id" : 53, + "action_id" : 50, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricEgress.process_int_transit.tb_int_insert", - "id" : 35, + "name" : "tbl_act_16", + "id" : 33, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [94], + "actions" : ["act_16"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "next_tables" : { + "act_16" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + }, + "default_entry" : { + "action_id" : 94, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "id" : 34, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 227, + "filename" : "include/int/int_transit.p4", + "line" : 271, "column" : 10, "source_fragment" : "tb_int_insert" }, "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2, - "with_counters" : true, + "max_size" : 1024, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63, 54], - "actions" : ["FabricEgress.process_int_transit.int_transit", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "action_ids" : [58, 51], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "base_default_next" : "node_60", "next_tables" : { - "FabricEgress.process_int_transit.int_transit" : "FabricEgress.process_int_transit.tb_int_inst_0003", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0003" + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_60", + "NoAction" : "node_60" }, "default_entry" : { - "action_id" : 54, + "action_id" : 51, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "name" : "tbl_act_17", + "id" : 35, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [95], + "actions" : ["act_17"], + "base_default_next" : "node_62", + "next_tables" : { + "act_17" : "node_62" + }, + "default_entry" : { + "action_id" : 95, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", "id" : 36, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 237, + "filename" : "include/int/int_transit.p4", + "line" : 280, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -11011,44 +12035,254 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "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, 55], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_transit.int_set_header_0003_i15", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "action_ids" : [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 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" : { - "FabricEgress.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 55, + "action_id" : 52, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 59, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 60, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 61, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 62, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 63, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 64, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 65, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 66, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 67, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 68, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 69, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 70, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 71, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 72, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 73, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 74, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "id" : 37, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 264, + "filename" : "include/int/int_transit.p4", + "line" : 324, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -11063,40 +12297,250 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 56], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_process_int_transit_int_update_total_hop_cnt", + "action_ids" : [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 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_act_18", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0407_i0" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i1" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i2" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i3" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i4" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i5" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i6" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i7" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i8" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i9" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i10" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i11" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i12" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i13" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i14" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i15" : "tbl_process_int_transit_int_update_total_hop_cnt", - "NoAction" : "tbl_process_int_transit_int_update_total_hop_cnt" + "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" : 56, + "action_id" : 53, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 75, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 76, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 77, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 78, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 79, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 80, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 81, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 82, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 83, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 84, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 85, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "tbl_process_int_transit_int_update_total_hop_cnt", + "name" : "tbl_act_18", "id" : 38, "key" : [], "match_type" : "exact", @@ -11105,57 +12549,11 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], - "actions" : ["FabricEgress.process_int_transit.int_update_total_hop_cnt"], - "base_default_next" : "node_65", - "next_tables" : { - "FabricEgress.process_int_transit.int_update_total_hop_cnt" : "node_65" - }, - "default_entry" : { - "action_id" : 62, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_ipv4", - "id" : 39, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [96], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_ipv4"], - "base_default_next" : "node_67", - "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_ipv4" : "node_67" - }, - "default_entry" : { - "action_id" : 96, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_udp", - "id" : 40, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, "action_ids" : [97], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_udp"], - "base_default_next" : "node_69", + "actions" : ["act_19"], + "base_default_next" : "node_66", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_udp" : "node_69" + "act_19" : "node_66" }, "default_entry" : { "action_id" : 97, @@ -11165,8 +12563,31 @@ } }, { - "name" : "tbl_process_int_outer_encap_int_update_shim", - "id" : 41, + "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" : [96], + "actions" : ["act_18"], + "base_default_next" : "node_68", + "next_tables" : { + "act_18" : "node_68" + }, + "default_entry" : { + "action_id" : 96, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_20", + "id" : 40, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11175,10 +12596,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [98], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_shim"], - "base_default_next" : "node_71", + "actions" : ["act_20"], + "base_default_next" : "node_70", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_shim" : "node_71" + "act_20" : "node_70" }, "default_entry" : { "action_id" : 98, @@ -11188,14 +12609,8 @@ } }, { - "name" : "FabricEgress.process_int_report.tb_generate_report", - "id" : 42, - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 87, - "column" : 10, - "source_fragment" : "tb_generate_report" - }, + "name" : "tbl_act_21", + "id" : 41, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11203,61 +12618,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [99, 57], - "actions" : ["FabricEgress.process_int_report.do_report_encapsulation", "NoAction"], - "base_default_next" : "node_73", - "next_tables" : { - "FabricEgress.process_int_report.do_report_encapsulation" : "node_73", - "NoAction" : "node_73" - }, - "default_entry" : { - "action_id" : 57, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "tbl_process_int_sink_restore_header", - "id" : 43, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [100], - "actions" : ["FabricEgress.process_int_sink.restore_header"], - "base_default_next" : "tbl_process_int_sink_int_sink", - "next_tables" : { - "FabricEgress.process_int_sink.restore_header" : "tbl_process_int_sink_int_sink" - }, - "default_entry" : { - "action_id" : 100, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_sink_int_sink", - "id" : 44, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [101], - "actions" : ["FabricEgress.process_int_sink.int_sink"], + "action_ids" : [99], + "actions" : ["act_21"], "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_sink.int_sink" : null + "act_21" : null }, "default_entry" : { - "action_id" : 101, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11267,11 +12635,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_47", - "id" : 14, + "name" : "node_44", + "id" : 13, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -11297,14 +12665,14 @@ } }, "true_next" : null, - "false_next" : "node_48" + "false_next" : "node_45" }, { - "name" : "node_48", - "id" : 15, + "name" : "node_45", + "id" : 14, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -11322,15 +12690,15 @@ } } }, - "true_next" : "node_49", - "false_next" : "node_54" + "true_next" : "node_46", + "false_next" : "node_51" }, { - "name" : "node_49", - "id" : 16, + "name" : "node_46", + "id" : 15, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -11373,14 +12741,14 @@ } }, "true_next" : "tbl_pkt_io_egress_pop_vlan", - "false_next" : "node_51" + "false_next" : "node_48" }, { - "name" : "node_51", - "id" : 17, + "name" : "node_48", + "id" : 16, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, @@ -11433,11 +12801,11 @@ } }, "true_next" : "tbl_drop_now", - "false_next" : "tbl_act_16" + "false_next" : "tbl_act_15" }, { - "name" : "node_54", - "id" : 18, + "name" : "node_51", + "id" : 17, "source_info" : { "filename" : "include/control/next.p4", "line" : 272, @@ -11489,11 +12857,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_57", - "id" : 19, + "name" : "node_54", + "id" : 18, "source_info" : { - "filename" : "fabric.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 98, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -11566,40 +12934,47 @@ } }, "false_next" : null, - "true_next" : "node_58" + "true_next" : "node_55" }, { - "name" : "node_58", - "id" : 20, + "name" : "node_55", + "id" : 19, "source_info" : { - "filename" : "fabric.p4", - "line" : 104, + "filename" : "include/int/int_main.p4", + "line" : 102, "column" : 16, - "source_fragment" : "fabric_metadata.int_meta.source == 1" + "source_fragment" : "fabric_metadata.int_meta.source == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "source"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, - "true_next" : "FabricEgress.process_int_source.tb_int_source", - "false_next" : "node_60" + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "false_next" : "node_57" }, { - "name" : "node_60", - "id" : 21, + "name" : "node_57", + "id" : 20, "source_info" : { - "filename" : "fabric.p4", - "line" : 107, + "filename" : "include/int/int_main.p4", + "line" : 106, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -11615,14 +12990,71 @@ } }, "false_next" : null, - "true_next" : "FabricEgress.process_int_transit.tb_int_insert" + "true_next" : "tbl_act_16" }, { - "name" : "node_65", - "id" : 22, + "name" : "node_60", + "id" : 21, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 314, + "filename" : "include/int/int_transit.p4", + "line" : 369, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_17", + "false_next" : "node_62" + }, + { + "name" : "node_62", + "id" : 22, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "false_next" : null, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + }, + { + "name" : "node_66", + "id" : 23, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 377, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -11637,15 +13069,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_ipv4", - "false_next" : "node_67" + "true_next" : "tbl_act_19", + "false_next" : "node_68" }, { - "name" : "node_67", - "id" : 23, + "name" : "node_68", + "id" : 24, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 317, + "filename" : "include/int/int_transit.p4", + "line" : 380, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -11660,15 +13092,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_udp", - "false_next" : "node_69" + "true_next" : "tbl_act_20", + "false_next" : "node_70" }, { - "name" : "node_69", - "id" : 24, + "name" : "node_70", + "id" : 25, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 320, + "filename" : "include/int/int_transit.p4", + "line" : 383, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, @@ -11683,60 +13115,8 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_shim", - "false_next" : "node_71" - }, - { - "name" : "node_71", - "id" : 25, - "source_info" : { - "filename" : "fabric.p4", - "line" : 111, - "column" : 20, - "source_fragment" : "standard_metadata.instance_type == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "instance_type"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x00000001" - } - } - }, - "true_next" : "FabricEgress.process_int_report.tb_generate_report", - "false_next" : "node_73" - }, - { - "name" : "node_73", - "id" : 26, - "source_info" : { - "filename" : "fabric.p4", - "line" : 115, - "column" : 20, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, "false_next" : null, - "true_next" : "tbl_process_int_sink_restore_header" + "true_next" : "tbl_act_21" } ] } diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt index 545564cafe..cc19487c95 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt @@ -18,30 +18,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318787614 - size: 256 - idle_timeout_behavior: NO_TIMEOUT -} -tables { - preamble { - id: 33561619 - name: "FabricIngress.process_set_source_sink.tb_set_sink" - alias: "tb_set_sink" - } - match_fields { - id: 1 - name: "standard_metadata.egress_spec" - bitwidth: 9 - match_type: EXACT - } - action_refs { - id: 16788951 - } - action_refs { - id: 16800567 - annotations: "@defaultonly()" - } - direct_resource_ids: 318770551 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -409,8 +386,8 @@ tables { } tables { preamble { - id: 33566961 - name: "FabricEgress.process_int_source.tb_int_source" + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" alias: "tb_int_source" } match_fields { @@ -438,37 +415,36 @@ tables { match_type: TERNARY } action_refs { - id: 16807851 + id: 16785857 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318776637 + direct_resource_ids: 318800047 size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33602084 - name: "FabricEgress.process_int_transit.tb_int_insert" + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } action_refs { - id: 16806530 + id: 16780783 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318794595 - size: 2 + size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33561642 - name: "FabricEgress.process_int_transit.tb_int_inst_0003" + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" alias: "tb_int_inst_0003" } match_fields { @@ -478,65 +454,65 @@ tables { match_type: EXACT } action_refs { - id: 16788439 + id: 16809886 } action_refs { - id: 16792702 + id: 16783130 } action_refs { - id: 16834796 + id: 16809096 } action_refs { - id: 16815381 + id: 16834117 } action_refs { - id: 16824457 + id: 16825314 } action_refs { - id: 16796364 + id: 16811436 } action_refs { - id: 16806322 + id: 16802199 } action_refs { - id: 16819063 + id: 16796779 } action_refs { - id: 16828306 + id: 16787676 } action_refs { - id: 16799786 + id: 16825351 } action_refs { - id: 16796975 + id: 16793999 } action_refs { - id: 16801652 + id: 16786714 } action_refs { - id: 16778440 + id: 16814203 } action_refs { - id: 16790887 + id: 16807054 } action_refs { - id: 16783849 + id: 16800064 } action_refs { - id: 16837726 + id: 16792997 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318777781 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33571998 - name: "FabricEgress.process_int_transit.tb_int_inst_0407" + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" alias: "tb_int_inst_0407" } match_fields { @@ -546,76 +522,60 @@ tables { match_type: EXACT } action_refs { - id: 16839298 + id: 16819022 } action_refs { - id: 16837018 + id: 16804144 } action_refs { - id: 16827414 + id: 16829117 } action_refs { - id: 16786021 + id: 16797781 } action_refs { - id: 16785131 + id: 16813543 } action_refs { - id: 16808652 + id: 16824974 } action_refs { - id: 16799296 + id: 16815362 } action_refs { - id: 16780668 + id: 16835399 } action_refs { - id: 16805625 + id: 16834505 } action_refs { - id: 16778495 + id: 16811493 } action_refs { - id: 16784981 + id: 16825476 } action_refs { - id: 16806353 + id: 16799777 } action_refs { - id: 16802140 + id: 16829592 } action_refs { - id: 16827601 + id: 16805877 } action_refs { - id: 16820295 + id: 16780182 } action_refs { - id: 16810955 + id: 16799476 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318818305 size: 16 idle_timeout_behavior: NO_TIMEOUT -} -tables { - preamble { - id: 33607792 - name: "FabricEgress.process_int_report.tb_generate_report" - alias: "tb_generate_report" - } - action_refs { - id: 16814383 - } - action_refs { - id: 16800567 - annotations: "@defaultonly()" - } - size: 1024 - idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { @@ -667,13 +627,6 @@ actions { alias: "int_set_source" } } -actions { - preamble { - id: 16788951 - name: "FabricIngress.process_set_source_sink.int_set_sink" - alias: "int_set_sink" - } -} actions { preamble { id: 16798734 @@ -1048,8 +1001,8 @@ actions { } actions { preamble { - id: 16807851 - name: "FabricEgress.process_int_source.int_source_dscp" + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" alias: "int_source_dscp" } params { @@ -1075,16 +1028,9 @@ actions { } actions { preamble { - id: 16806280 - name: "FabricEgress.process_int_transit.int_update_total_hop_cnt" - alias: "int_update_total_hop_cnt" - } -} -actions { - preamble { - id: 16806530 - name: "FabricEgress.process_int_transit.int_transit" - alias: "int_transit" + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" } params { id: 1 @@ -1094,295 +1040,228 @@ actions { } actions { preamble { - id: 16788439 - name: "FabricEgress.process_int_transit.int_set_header_0003_i0" + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" alias: "int_set_header_0003_i0" } } actions { preamble { - id: 16792702 - name: "FabricEgress.process_int_transit.int_set_header_0003_i1" + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" alias: "int_set_header_0003_i1" } } actions { preamble { - id: 16834796 - name: "FabricEgress.process_int_transit.int_set_header_0003_i2" + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" alias: "int_set_header_0003_i2" } } actions { preamble { - id: 16815381 - name: "FabricEgress.process_int_transit.int_set_header_0003_i3" + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" alias: "int_set_header_0003_i3" } } actions { preamble { - id: 16824457 - name: "FabricEgress.process_int_transit.int_set_header_0003_i4" + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" alias: "int_set_header_0003_i4" } } actions { preamble { - id: 16796364 - name: "FabricEgress.process_int_transit.int_set_header_0003_i5" + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" alias: "int_set_header_0003_i5" } } actions { preamble { - id: 16806322 - name: "FabricEgress.process_int_transit.int_set_header_0003_i6" + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" alias: "int_set_header_0003_i6" } } actions { preamble { - id: 16819063 - name: "FabricEgress.process_int_transit.int_set_header_0003_i7" + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" alias: "int_set_header_0003_i7" } } actions { preamble { - id: 16828306 - name: "FabricEgress.process_int_transit.int_set_header_0003_i8" + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" alias: "int_set_header_0003_i8" } } actions { preamble { - id: 16799786 - name: "FabricEgress.process_int_transit.int_set_header_0003_i9" + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" alias: "int_set_header_0003_i9" } } actions { preamble { - id: 16796975 - name: "FabricEgress.process_int_transit.int_set_header_0003_i10" + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" alias: "int_set_header_0003_i10" } } actions { preamble { - id: 16801652 - name: "FabricEgress.process_int_transit.int_set_header_0003_i11" + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" alias: "int_set_header_0003_i11" } } actions { preamble { - id: 16778440 - name: "FabricEgress.process_int_transit.int_set_header_0003_i12" + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" alias: "int_set_header_0003_i12" } } actions { preamble { - id: 16790887 - name: "FabricEgress.process_int_transit.int_set_header_0003_i13" + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" alias: "int_set_header_0003_i13" } } actions { preamble { - id: 16783849 - name: "FabricEgress.process_int_transit.int_set_header_0003_i14" + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" alias: "int_set_header_0003_i14" } } actions { preamble { - id: 16837726 - name: "FabricEgress.process_int_transit.int_set_header_0003_i15" + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" alias: "int_set_header_0003_i15" } } actions { preamble { - id: 16839298 - name: "FabricEgress.process_int_transit.int_set_header_0407_i0" + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" alias: "int_set_header_0407_i0" } } actions { preamble { - id: 16837018 - name: "FabricEgress.process_int_transit.int_set_header_0407_i1" + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" alias: "int_set_header_0407_i1" } } actions { preamble { - id: 16827414 - name: "FabricEgress.process_int_transit.int_set_header_0407_i2" + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" alias: "int_set_header_0407_i2" } } actions { preamble { - id: 16786021 - name: "FabricEgress.process_int_transit.int_set_header_0407_i3" + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" alias: "int_set_header_0407_i3" } } actions { preamble { - id: 16785131 - name: "FabricEgress.process_int_transit.int_set_header_0407_i4" + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" alias: "int_set_header_0407_i4" } } actions { preamble { - id: 16808652 - name: "FabricEgress.process_int_transit.int_set_header_0407_i5" + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" alias: "int_set_header_0407_i5" } } actions { preamble { - id: 16799296 - name: "FabricEgress.process_int_transit.int_set_header_0407_i6" + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" alias: "int_set_header_0407_i6" } } actions { preamble { - id: 16780668 - name: "FabricEgress.process_int_transit.int_set_header_0407_i7" + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" alias: "int_set_header_0407_i7" } } actions { preamble { - id: 16805625 - name: "FabricEgress.process_int_transit.int_set_header_0407_i8" + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" alias: "int_set_header_0407_i8" } } actions { preamble { - id: 16778495 - name: "FabricEgress.process_int_transit.int_set_header_0407_i9" + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" alias: "int_set_header_0407_i9" } } actions { preamble { - id: 16784981 - name: "FabricEgress.process_int_transit.int_set_header_0407_i10" + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" alias: "int_set_header_0407_i10" } } actions { preamble { - id: 16806353 - name: "FabricEgress.process_int_transit.int_set_header_0407_i11" + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" alias: "int_set_header_0407_i11" } } actions { preamble { - id: 16802140 - name: "FabricEgress.process_int_transit.int_set_header_0407_i12" + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" alias: "int_set_header_0407_i12" } } actions { preamble { - id: 16827601 - name: "FabricEgress.process_int_transit.int_set_header_0407_i13" + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" alias: "int_set_header_0407_i13" } } actions { preamble { - id: 16820295 - name: "FabricEgress.process_int_transit.int_set_header_0407_i14" + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" alias: "int_set_header_0407_i14" } } actions { preamble { - id: 16810955 - name: "FabricEgress.process_int_transit.int_set_header_0407_i15" + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" alias: "int_set_header_0407_i15" } } -actions { - preamble { - id: 16816602 - name: "FabricEgress.process_int_outer_encap.int_update_ipv4" - alias: "int_update_ipv4" - } -} -actions { - preamble { - id: 16829666 - name: "FabricEgress.process_int_outer_encap.int_update_udp" - alias: "int_update_udp" - } -} -actions { - preamble { - id: 16826978 - name: "FabricEgress.process_int_outer_encap.int_update_shim" - alias: "int_update_shim" - } -} -actions { - preamble { - id: 16814383 - name: "FabricEgress.process_int_report.do_report_encapsulation" - alias: "do_report_encapsulation" - } - params { - id: 1 - name: "src_mac" - bitwidth: 48 - } - params { - id: 2 - name: "mon_mac" - bitwidth: 48 - } - params { - id: 3 - name: "src_ip" - bitwidth: 32 - } - params { - id: 4 - name: "mon_ip" - bitwidth: 32 - } - params { - id: 5 - name: "mon_port" - bitwidth: 16 - } -} -actions { - preamble { - id: 16810741 - name: "FabricEgress.process_int_sink.restore_header" - alias: "restore_header" - } -} -actions { - preamble { - id: 16787662 - name: "FabricEgress.process_int_sink.int_sink" - alias: "int_sink" - } -} actions { preamble { id: 16801047 @@ -1440,17 +1319,6 @@ direct_counters { } direct_table_id: 33581620 } -direct_counters { - preamble { - id: 318770551 - name: "FabricIngress.process_set_source_sink.counter_set_sink" - alias: "counter_set_sink" - } - spec { - unit: BOTH - } - direct_table_id: 33561619 -} direct_counters { preamble { id: 318815501 @@ -1563,47 +1431,14 @@ direct_counters { } direct_counters { preamble { - id: 318776637 - name: "FabricEgress.process_int_source.counter_int_source" + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" alias: "counter_int_source" } spec { unit: BOTH } - direct_table_id: 33566961 -} -direct_counters { - preamble { - id: 318794595 - name: "FabricEgress.process_int_transit.counter_int_insert" - alias: "counter_int_insert" - } - spec { - unit: BOTH - } - direct_table_id: 33602084 -} -direct_counters { - preamble { - id: 318777781 - name: "FabricEgress.process_int_transit.counter_int_inst_0003" - alias: "counter_int_inst_0003" - } - spec { - unit: BOTH - } - direct_table_id: 33561642 -} -direct_counters { - preamble { - id: 318818305 - name: "FabricEgress.process_int_transit.counter_int_inst_0407" - alias: "counter_int_inst_0407" - } - spec { - unit: BOTH - } - direct_table_id: 33571998 + direct_table_id: 33612258 } direct_counters { preamble { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index 160814c9fb..2d9749836e 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -930,7 +930,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1578,7 +1578,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -2211,7 +2211,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2287,7 +2287,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2402,7 +2402,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2478,7 +2478,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2770,7 +2770,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2846,7 +2846,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2961,7 +2961,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3037,7 +3037,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3155,7 +3155,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 57, + "line" : 54, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -3170,7 +3170,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 57, + "line" : 54, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -3461,7 +3461,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 121, "column" : 36, "source_fragment" : "2w1; ..." } @@ -3547,7 +3547,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 120, + "line" : 122, "column" : 38, "source_fragment" : "2w2; ..." } @@ -3573,7 +3573,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 118, + "line" : 120, "column" : 37, "source_fragment" : "2w0; ..." } @@ -3744,7 +3744,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -3770,7 +3770,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4301,7 +4301,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 101, + "line" : 103, "column" : 28, "source_fragment" : "5; ..." } @@ -4457,7 +4457,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 114, + "line" : 116, "column" : 32, "source_fragment" : "64; ..." } @@ -4476,7 +4476,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -4859,7 +4859,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -4874,7 +4874,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -4937,7 +4937,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -4956,7 +4956,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } @@ -4970,7 +4970,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 43, + "line" : 40, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -6799,7 +6799,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 87, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -6971,7 +6971,7 @@ "id" : 20, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -7004,7 +7004,7 @@ "id" : 21, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -7030,7 +7030,7 @@ "id" : 22, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -7080,7 +7080,7 @@ "id" : 23, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index e7c2981e29..0623d6cb2c 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -634,7 +634,12 @@ "next_state" : null } ], - "transition_key" : [] + "transition_key" : [ + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ] }, { "name" : "parse_icmp", @@ -669,7 +674,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1082,7 +1087,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -1715,7 +1720,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -1791,7 +1796,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -1906,7 +1911,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -1982,7 +1987,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2274,7 +2279,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2350,7 +2355,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2465,7 +2470,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2541,7 +2546,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2757,7 +2762,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -2783,7 +2788,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3280,7 +3285,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -3295,7 +3300,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -3358,7 +3363,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -3377,7 +3382,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } @@ -3391,7 +3396,7 @@ "id" : 0, "source_info" : { "filename" : "fabric.p4", - "line" : 43, + "line" : 40, "column" : 8, "source_fragment" : "FabricIngress" }, @@ -4607,7 +4612,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 87, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -4756,7 +4761,7 @@ "id" : 13, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -4789,7 +4794,7 @@ "id" : 14, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -4815,7 +4820,7 @@ "id" : 15, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -4865,7 +4870,7 @@ "id" : 16, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, From 055e9b2c4ef4d4b36c572dd56dbfde80a4a1319a Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 10 Sep 2018 01:59:15 -0700 Subject: [PATCH 10/19] More robust handling of multicast groups in P4Runtime Since we cannot read the device state, try to delete and re-insert if insert or modify operation fails. Change-Id: I35733c7e0af509317e92f991978c0a4ef36b9bc8 --- .../p4runtime/P4RuntimeGroupProgrammable.java | 100 +++++++++++++----- 1 file changed, 76 insertions(+), 24 deletions(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java index 0dd5f21504..1cfe079667 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java @@ -265,30 +265,31 @@ public class P4RuntimeGroupProgrammable PiMulticastGroupEntry groupToApply, PiMulticastGroupEntry groupOnDevice, Group pdGroup, GroupOperation.Type opType) { - if (opType == GroupOperation.Type.DELETE) { - if (writeMcGroupOnDevice(groupToApply, DELETE)) { - mcGroupMirror.remove(handle); - mcGroupTranslator.forget(handle); - } - return; - } - - final P4RuntimeClient.WriteOperationType p4OpType = - opType == GroupOperation.Type.ADD ? INSERT : MODIFY; - - if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, - DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - && p4OpType == MODIFY - && groupOnDevice != null - && groupOnDevice.equals(groupToApply)) { - // Ignore. - return; - } - - if (writeMcGroupOnDevice(groupToApply, p4OpType)) { - mcGroupMirror.put(handle, groupToApply); - mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); + switch (opType) { + case ADD: + robustMcGroupAdd(handle, groupToApply, pdGroup); + return; + case MODIFY: + // Since reading multicast groups is not supported yet on + // PI/Stratum, we cannot trust groupOnDevic) as we don't have a + // mechanism to enforce consistency of the mirror with the + // device state. + // if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, + // DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) + // && p4OpType == MODIFY + // && groupOnDevice != null + // && groupOnDevice.equals(groupToApply)) { + // // Ignore. + // return; + // } + robustMcGroupModify(handle, groupToApply, pdGroup); + return; + case DELETE: + mcGroupApply(handle, groupToApply, pdGroup, DELETE); + return; + default: + log.error("Unknown group operation type {}, " + + "cannot process multicast group", opType); } } @@ -299,6 +300,57 @@ public class P4RuntimeGroupProgrammable "performing multicast group " + opType, false); } + private boolean mcGroupApply(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup, + P4RuntimeClient.WriteOperationType opType) { + switch (opType) { + case DELETE: + if (writeMcGroupOnDevice(piGroup, DELETE)) { + mcGroupMirror.remove(handle); + mcGroupTranslator.forget(handle); + return true; + } else { + return false; + } + case INSERT: + case MODIFY: + if (writeMcGroupOnDevice(piGroup, opType)) { + mcGroupMirror.put(handle, piGroup); + mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, piGroup, handle)); + return true; + } else { + return false; + } + default: + log.warn("Unknown operation type {}, cannot apply group", opType); + return false; + } + } + + private void robustMcGroupAdd(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, INSERT)) { + return; + } + // Try to delete (perhaps it already exists) and re-add... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + + private void robustMcGroupModify(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, MODIFY)) { + return; + } + // Not sure for which reason it cannot be modified, so try to delete and insert instead... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + private boolean modifyGroupFromDevice(PiActionGroup groupToApply, PiActionGroup groupOnDevice) { PiActionProfileId groupProfileId = groupToApply.actionProfileId(); Collection membersToRemove = Sets.newHashSet(groupOnDevice.members()); From c7639fb240fb4fece29c29de876fbb671f5f3a76 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 10 Sep 2018 01:59:49 -0700 Subject: [PATCH 11/19] Flush device mirror in P4Runtime driver when pipeline status is unknown Change-Id: Ida5874adc68a5d6ba5f1b5063880ac31c0a2ee9b --- .../AbstractDistributedP4RuntimeMirror.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) 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 dd3ea16e06..b2da5fc7e6 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 @@ -23,9 +23,13 @@ import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onlab.util.KryoNamespace; +import org.onlab.util.SharedExecutors; import org.onosproject.net.DeviceId; import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiHandle; +import org.onosproject.net.pi.service.PiPipeconfWatchdogEvent; +import org.onosproject.net.pi.service.PiPipeconfWatchdogListener; +import org.onosproject.net.pi.service.PiPipeconfWatchdogService; import org.onosproject.store.service.EventuallyConsistentMap; import org.onosproject.store.service.StorageService; import org.onosproject.store.service.WallClockTimestamp; @@ -36,6 +40,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.net.pi.service.PiPipeconfWatchdogService.PipelineStatus.READY; import static org.slf4j.LoggerFactory.getLogger; /** @@ -56,8 +61,14 @@ public abstract class AbstractDistributedP4RuntimeMirror @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private StorageService storageService; + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private PiPipeconfWatchdogService pipeconfWatchdogService; + private EventuallyConsistentMap> mirrorMap; + private final PiPipeconfWatchdogListener pipeconfListener = + new InternalPipeconfWatchdogListener(); + @Activate public void activate() { mirrorMap = storageService @@ -66,6 +77,7 @@ public abstract class AbstractDistributedP4RuntimeMirror .withSerializer(storeSerializer()) .withTimestampProvider((k, v) -> new WallClockTimestamp()) .build(); + pipeconfWatchdogService.addListener(pipeconfListener); log.info("Started"); } @@ -75,6 +87,7 @@ public abstract class AbstractDistributedP4RuntimeMirror @Deactivate public void deactivate() { + pipeconfWatchdogService.removeListener(pipeconfListener); mirrorMap.destroy(); mirrorMap = null; log.info("Stopped"); @@ -99,6 +112,14 @@ public abstract class AbstractDistributedP4RuntimeMirror public void put(H handle, E entry) { checkNotNull(handle); checkNotNull(entry); + final PiPipeconfWatchdogService.PipelineStatus status = + pipeconfWatchdogService.getStatus(handle.deviceId()); + if (!status.equals(READY)) { + log.info("Ignoring device mirror update because pipeline " + + "status of {} is {}: {}", + handle.deviceId(), status, entry); + return; + } final long now = new WallClockTimestamp().unixTimestamp(); final TimedEntry timedEntry = new TimedEntry<>(now, entry); mirrorMap.put(handle, timedEntry); @@ -110,4 +131,26 @@ public abstract class AbstractDistributedP4RuntimeMirror mirrorMap.remove(handle); } + private void removeAll(DeviceId deviceId) { + checkNotNull(deviceId); + Collection handles = mirrorMap.keySet().stream() + .filter(h -> h.deviceId().equals(deviceId)) + .collect(Collectors.toList()); + handles.forEach(mirrorMap::remove); + } + + public class InternalPipeconfWatchdogListener implements PiPipeconfWatchdogListener { + @Override + public void event(PiPipeconfWatchdogEvent event) { + log.debug("Flushing mirror for {}, pipeline status is {}", + event.subject(), event.type()); + SharedExecutors.getPoolThreadExecutor().execute( + () -> removeAll(event.subject())); + } + + @Override + public boolean isRelevant(PiPipeconfWatchdogEvent event) { + return event.type().equals(PiPipeconfWatchdogEvent.Type.PIPELINE_UNKNOWN); + } + } } From 26600970b0357fc1f4b791c28fec8ff6e2e8a177 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 10 Sep 2018 00:23:20 -0700 Subject: [PATCH 12/19] Keep P4Runtime device groups in sync with translator/mirror state Change-Id: I7257c2ab5f3d4118f30ecf3ae3820d95e5afa4c8 --- .../P4RuntimeFlowRuleProgrammable.java | 17 +- .../p4runtime/P4RuntimeGroupProgrammable.java | 192 ++++++++++++------ 2 files changed, 141 insertions(+), 68 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 5e3e155776..4175489381 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 @@ -41,6 +41,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -188,12 +189,12 @@ public class P4RuntimeFlowRuleProgrammable final TimedEntry timedEntry = tableMirror.get(handle); if (!translatedEntity.isPresent()) { - log.debug("Handle not found in store: {}", handle); + log.warn("Table entry handle not found in translation store: {}", handle); return null; } if (timedEntry == null) { - log.debug("Handle not found in device mirror: {}", handle); + log.warn("Table entry handle not found in device mirror: {}", handle); return null; } @@ -211,16 +212,22 @@ public class P4RuntimeFlowRuleProgrammable return tableMirror.getAll(deviceId).stream() .map(timedEntry -> forgeFlowEntry( timedEntry.entry(), null)) + .filter(Objects::nonNull) .collect(Collectors.toList()); } private void cleanUpInconsistentEntries(Collection piEntries) { - log.warn("Found {} entries from {} not on translation store, removing them...", + log.warn("Found {} inconsistent table entries on {}, removing them...", piEntries.size(), deviceId); piEntries.forEach(entry -> { log.debug(entry.toString()); - applyEntry(PiTableEntryHandle.of(deviceId, entry), - entry, null, REMOVE); + final PiTableEntryHandle handle = PiTableEntryHandle.of(deviceId, entry); + ENTRY_LOCKS.get(handle).lock(); + try { + applyEntry(handle, entry, null, REMOVE); + } finally { + ENTRY_LOCKS.get(handle).unlock(); + } }); } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java index 1cfe079667..e6f0a0477d 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java @@ -17,8 +17,10 @@ package org.onosproject.drivers.p4runtime; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Striped; +import org.onlab.util.SharedExecutors; import org.onosproject.drivers.p4runtime.mirror.P4RuntimeGroupMirror; import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMulticastGroupMirror; import org.onosproject.drivers.p4runtime.mirror.TimedEntry; @@ -47,12 +49,15 @@ import org.slf4j.Logger; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.google.common.base.Preconditions.checkArgument; import static java.lang.String.format; import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; @@ -85,8 +90,8 @@ public class P4RuntimeGroupProgrammable // If true, we avoid querying the device and return what's already known by // the ONOS store. - private static final String IGNORE_DEVICE_WHEN_GET = "ignoreDeviceWhenGet"; - private static final boolean DEFAULT_IGNORE_DEVICE_WHEN_GET = false; + private static final String READ_ACTION_GROUPS_FROM_MIRROR = "actionGroupReadFromMirror"; + private static final boolean DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR = false; protected GroupStore groupStore; private P4RuntimeGroupMirror groupMirror; @@ -116,6 +121,11 @@ public class P4RuntimeGroupProgrammable if (!setupBehaviour()) { return; } + + // TODO: fix GroupProgrammable API, passing the device ID is ambiguous + checkArgument(deviceId.equals(this.deviceId), + "passed deviceId must be the same assigned to this behavior"); + groupOps.operations().forEach(op -> { // ONOS-7785 We need app cookie (action profile id) from the group Group groupOnStore = groupStore.getGroup(deviceId, op.groupId()); @@ -127,10 +137,10 @@ public class P4RuntimeGroupProgrammable groupOnStore.appId()); DefaultGroup groupToApply = new DefaultGroup(op.groupId(), groupDesc); if (op.groupType().equals(GroupDescription.Type.ALL)) { - processMcGroupOp(deviceId, groupToApply, op.opType()); + processMcGroupOp(groupToApply, op.opType()); } else { - processGroupOp(deviceId, groupToApply, op.opType()); + processGroupOp(groupToApply, op.opType()); } }); } @@ -140,32 +150,91 @@ public class P4RuntimeGroupProgrammable if (!setupBehaviour()) { return Collections.emptyList(); } - final ImmutableList.Builder groups = ImmutableList.builder(); - - if (!driverBoolProperty(IGNORE_DEVICE_WHEN_GET, DEFAULT_IGNORE_DEVICE_WHEN_GET)) { - groups.addAll(pipeconf.pipelineModel().actionProfiles().stream() - .map(PiActionProfileModel::id) - .flatMap(this::streamGroupsFromDevice) - .iterator()); - // FIXME: enable reading MC groups from device once reading from - // PRE is supported in PI - // groups.addAll(getMcGroupsFromDevice()); - } else { - groups.addAll(groupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeGroupEntry) - .iterator()); - } - // FIXME: same as before.. - groups.addAll(mcGroupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeMcGroupEntry) - .iterator()); - - return groups.build(); + return new ImmutableList.Builder() + .addAll(getActionGroups()) + .addAll(getMcGroups()).build(); } - private void processGroupOp(DeviceId deviceId, Group pdGroup, GroupOperation.Type opType) { + private Collection getActionGroups() { + + if (driverBoolProperty(READ_ACTION_GROUPS_FROM_MIRROR, + DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR)) { + return getActionGroupsFromMirror(); + } + + final Collection piGroups = pipeconf.pipelineModel() + .actionProfiles() + .stream() + .map(PiActionProfileModel::id) + .flatMap(this::streamPiGroupsFromDevice) + .collect(Collectors.toList()); + + if (piGroups.isEmpty()) { + return Collections.emptyList(); + } + + final List result = Lists.newArrayList(); + final List inconsistentGroups = Lists.newArrayList(); + + for (PiActionGroup piGroupOnDevice : piGroups) { + final Group group = forgeGroupEntry(piGroupOnDevice); + if (group == null) { + // Entry is on device but unknown to translation service or + // device mirror. Inconsistent. Mark for removal. + inconsistentGroups.add(piGroupOnDevice); + } else { + result.add(group); + } + } + // Trigger clean up of inconsistent entries (is any). + // TODO: make this behaviour configurable, in some cases it's fine for + // the device to have groups that were not installed by us. + if (!inconsistentGroups.isEmpty()) { + SharedExecutors.getSingleThreadExecutor().execute( + () -> cleanUpInconsistentGroups(inconsistentGroups)); + } + return result; + } + + private Collection getActionGroupsFromMirror() { + return groupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void cleanUpInconsistentGroups(Collection piGroups) { + log.warn("Found {} inconsistent groups on {}, removing them...", + piGroups.size(), deviceId); + piGroups.forEach(piGroup -> { + log.debug(piGroup.toString()); + // Per-piGroup lock. + final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); + STRIPED_LOCKS.get(handle).lock(); + try { + processPiGroup(handle, piGroup, piGroup, null, + GroupOperation.Type.DELETE); + } finally { + STRIPED_LOCKS.get(handle).unlock(); + } + }); + } + + private Collection getMcGroups() { + // TODO: missing support for reading multicast groups is ready in PI/Stratum. + return getMcGroupsFromMirror(); + } + + private Collection getMcGroupsFromMirror() { + return mcGroupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeMcGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void processGroupOp(Group pdGroup, GroupOperation.Type opType) { final PiActionGroup piGroup; try { piGroup = groupTranslator.translate(pdGroup, pipeconf); @@ -175,11 +244,9 @@ public class P4RuntimeGroupProgrammable return; } final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - final PiActionGroup groupOnDevice = groupMirror.get(handle) == null - ? null - : groupMirror.get(handle).entry(); - + ? null : groupMirror.get(handle).entry(); + // Per-piGroup lock. final Lock lock = STRIPED_LOCKS.get(handle); lock.lock(); try { @@ -190,7 +257,7 @@ public class P4RuntimeGroupProgrammable } } - private void processMcGroupOp(DeviceId deviceId, Group pdGroup, GroupOperation.Type opType) { + private void processMcGroupOp(Group pdGroup, GroupOperation.Type opType) { final PiMulticastGroupEntry mcGroup; try { mcGroup = mcGroupTranslator.translate(pdGroup, pipeconf); @@ -429,52 +496,51 @@ public class P4RuntimeGroupProgrammable completableFuture, format("performing %s %s", action, topic), false); } - private Stream streamGroupsFromDevice(PiActionProfileId actProfId) { + private Stream streamPiGroupsFromDevice(PiActionProfileId actProfId) { // Read PI groups and return original PD one. - Collection groups = getFutureWithDeadline( + // TODO: implement P4Runtime client call to read all groups with one call + // Good is pipeline has multiple action profiles. + final Collection groups = getFutureWithDeadline( client.dumpGroups(actProfId, pipeconf), "dumping groups", Collections.emptyList()); - return groups.stream() - .map(this::forgeGroupEntry) - .filter(Objects::nonNull); - } - - private Collection getMcGroupsFromDevice() { - Collection groups = getFutureWithDeadline( - client.readAllMulticastGroupEntries(), - "dumping multicast groups", Collections.emptyList()); - return groups.stream() - .map(this::forgeMcGroupEntry) - .filter(Objects::nonNull) - .collect(Collectors.toList()); + return groups.stream(); } private Group forgeGroupEntry(PiActionGroup piGroup) { final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - if (!groupTranslator.lookup(handle).isPresent()) { - log.warn("Missing PI group from translation store: {} - {}:{}", - pipeconf.id(), piGroup.actionProfileId(), - piGroup.id()); + final Optional> + translatedEntity = groupTranslator.lookup(handle); + final TimedEntry timedEntry = groupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Group handle not found in translation store: {}", handle); return null; } - final long life = groupMirror.get(handle) != null - ? groupMirror.get(handle).lifeSec() : 0; - final Group original = groupTranslator.lookup(handle).get().original(); - return addedGroup(original, life); + if (timedEntry == null) { + // Don't bother logging more than debug, most probably it's the EC + // map backing the store that has not received all the updates yet. + log.debug("Group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); } private Group forgeMcGroupEntry(PiMulticastGroupEntry mcGroup) { final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( deviceId, mcGroup); - if (!mcGroupTranslator.lookup(handle).isPresent()) { - log.warn("Missing PI multicast group {} from translation store", - mcGroup.groupId()); + final Optional> + translatedEntity = mcGroupTranslator.lookup(handle); + final TimedEntry timedEntry = mcGroupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Multicast group handle not found in translation store: {}", handle); return null; } - final long life = mcGroupMirror.get(handle) != null - ? mcGroupMirror.get(handle).lifeSec() : 0; - final Group original = mcGroupTranslator.lookup(handle).get().original(); - return addedGroup(original, life); + if (timedEntry == null) { + log.warn("Multicast group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); } private Group addedGroup(Group original, long life) { From c1fa8f2f0bc5ffb42c48156f04c04394dfa5cfad Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Mon, 10 Sep 2018 15:59:03 -0700 Subject: [PATCH 13/19] More permissive group operations in P4RuntimeGroupProgrammable Change-Id: Ib5d0bdaad88536727d27b39252cc55ccf1ac183c --- .../p4runtime/P4RuntimeGroupProgrammable.java | 106 ++++++++++-------- 1 file changed, 58 insertions(+), 48 deletions(-) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java index e6f0a0477d..f53dca82ca 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java @@ -140,7 +140,7 @@ public class P4RuntimeGroupProgrammable processMcGroupOp(groupToApply, op.opType()); } else { - processGroupOp(groupToApply, op.opType()); + processActionGroupOp(groupToApply, op.opType()); } }); } @@ -213,8 +213,8 @@ public class P4RuntimeGroupProgrammable final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); STRIPED_LOCKS.get(handle).lock(); try { - processPiGroup(handle, piGroup, piGroup, null, - GroupOperation.Type.DELETE); + processActionGroup(handle, piGroup, null, null, + GroupOperation.Type.DELETE); } finally { STRIPED_LOCKS.get(handle).unlock(); } @@ -234,7 +234,7 @@ public class P4RuntimeGroupProgrammable .collect(Collectors.toList()); } - private void processGroupOp(Group pdGroup, GroupOperation.Type opType) { + private void processActionGroupOp(Group pdGroup, GroupOperation.Type opType) { final PiActionGroup piGroup; try { piGroup = groupTranslator.translate(pdGroup, pipeconf); @@ -250,8 +250,8 @@ public class P4RuntimeGroupProgrammable final Lock lock = STRIPED_LOCKS.get(handle); lock.lock(); try { - processPiGroup(handle, piGroup, - groupOnDevice, pdGroup, opType); + processActionGroup(handle, piGroup, + groupOnDevice, pdGroup, opType); } finally { lock.unlock(); } @@ -281,50 +281,60 @@ public class P4RuntimeGroupProgrammable } } - private void processPiGroup(PiActionGroupHandle handle, - PiActionGroup groupToApply, - PiActionGroup groupOnDevice, - Group pdGroup, GroupOperation.Type operationType) { - if (operationType == GroupOperation.Type.ADD) { - if (groupOnDevice != null) { - log.warn("Unable to add group {} since group already on device {}", - groupToApply.id(), deviceId); - log.debug("To apply: {}", groupToApply); - log.debug("On device: {}", groupOnDevice); + private void processActionGroup(PiActionGroupHandle handle, + PiActionGroup groupToApply, + PiActionGroup groupOnDevice, + Group pdGroup, GroupOperation.Type operationType) { + switch (operationType) { + case ADD: + if (groupOnDevice != null) { + log.warn("Requested to ADD group {} on {}, but a group " + + "with the same ID already exists, will " + + "MODIFY instead", + groupToApply.id(), deviceId); + log.debug("To apply: {}", groupToApply); + log.debug("On device: {}", groupOnDevice); + processActionGroup(handle, groupToApply, groupOnDevice, + pdGroup, GroupOperation.Type.MODIFY); + return; + } + if (writeGroupToDevice(groupToApply)) { + groupMirror.put(handle, groupToApply); + groupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, groupToApply, handle)); + } return; - } - - if (writeGroupToDevice(groupToApply)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); - } - } else if (operationType == GroupOperation.Type.MODIFY) { - if (groupOnDevice == null) { - log.warn("Group {} does not exists on device {}, can not modify it", - groupToApply.id(), deviceId); + case MODIFY: + if (groupOnDevice == null) { + log.warn("Requested to MODIFY group {} on {}, but no " + + "such group exists on the device, " + + "will ADD instead", + groupToApply.id(), deviceId); + processActionGroup(handle, groupToApply, null, + pdGroup, GroupOperation.Type.ADD); + return; + } + if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, + DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) + && groupOnDevice.equals(groupToApply)) { + // Group on device has the same members, ignore operation. + return; + } + if (modifyGroupFromDevice(groupToApply, groupOnDevice)) { + groupMirror.put(handle, groupToApply); + groupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, groupToApply, handle)); + } return; - } - if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - && groupOnDevice.equals(groupToApply)) { - // Group on device has the same members, ignore operation. - return; - } - if (modifyGroupFromDevice(groupToApply, groupOnDevice)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, - new PiTranslatedEntity<>(pdGroup, groupToApply, handle)); - } - } else { - if (groupOnDevice == null) { - log.warn("Unable to remove group {} from device {} since it does" + - "not exists on device.", groupToApply.id(), deviceId); - return; - } - if (deleteGroupFromDevice(groupOnDevice)) { - groupMirror.remove(handle); - groupTranslator.forget(handle); - } + case DELETE: + if (deleteGroupFromDevice(groupToApply)) { + groupMirror.remove(handle); + groupTranslator.forget(handle); + } + break; + default: + log.error("Unknwon group operation type {}, cannot process group", operationType); + break; } } From 50d195ffb372d3108e9a4611b699e5eb92a8cd7c Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Tue, 11 Sep 2018 13:26:38 -0700 Subject: [PATCH 14/19] Do not insert or delete default action entries in P4Runtime Spec says: the default entry for a table is always set. It can be set at compile-time by the P4 programmer - or defaults to NoAction (which is a no-op) otherwise - and assuming it is not declared as const, can be modified by the P4Runtime client. Because the default entry is always set, we do not allow INSERT and DELETE updates on the default entry and the P4Runtime server must return an INVALID_ARGUMENT error code if the client attempts one. With this patch we convert insert or delete operations into modify ones (unless specified by a driver property, to support non-compliant devices). For delete, we use the interpreter to suggest a default action that is the same as the one when the pipeline was originally deployed. Also, we introduce the capability of synchronizing the device mirror with the device state. Change-Id: I3758fc11780eb0f1cf4ed5a295bd98b54b182e29 --- .../net/pi/model/PiPipelineInterpreter.java | 12 ++ .../net/pi/model/PiTableModel.java | 25 +-- .../net/pi/runtime/PiTableEntry.java | 54 +++++- .../P4RuntimeFlowRuleProgrammable.java | 165 +++++++++++++----- .../AbstractDistributedP4RuntimeMirror.java | 44 ++++- .../p4runtime/mirror/P4RuntimeMirror.java | 9 + .../pipelines/fabric/FabricInterpreter.java | 13 ++ .../p4runtime/api/P4RuntimeClient.java | 13 +- .../p4runtime/ctl/P4RuntimeClientImpl.java | 68 +++++--- .../p4runtime/ctl/TableEntryEncoder.java | 4 +- .../p4runtime/model/P4TableModel.java | 14 +- .../p4runtime/model/P4InfoParserTest.java | 2 +- 12 files changed, 319 insertions(+), 104 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 4414931a62..9206f5c793 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 @@ -125,6 +125,18 @@ public interface PiPipelineInterpreter extends HandlerBehaviour { return Optional.empty(); } + /** + * If the given table allows for mutable default actions, this method + * returns an action instance to be used when ONOS tries to remove a + * different default action previously set. + * + * @param tableId table ID + * @return optional default action + */ + default Optional getOriginalDefaultAction(PiTableId tableId) { + return Optional.empty(); + } + /** * Signals that an error was encountered while executing the interpreter. */ diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java index ba66c10467..f7ba1bd38b 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java @@ -42,8 +42,9 @@ public interface PiTableModel { PiTableType tableType(); /** - * Returns the model of the action profile that implements this table. Meaningful if this table is of type {@link - * PiTableType#INDIRECT}, otherwise returns null. + * Returns the model of the action profile that implements this table. + * Meaningful if this table is of type {@link PiTableType#INDIRECT}, + * otherwise returns null. * * @return action profile ID */ @@ -92,16 +93,19 @@ public interface PiTableModel { Collection actions(); /** - * Returns the model of the default action associated with this table, if any. + * Returns the model of the constant default action associated with this + * table, if any. * * @return optional default action model */ - Optional defaultAction(); + Optional constDefaultAction(); /** - * Returns true if the default action has mutable parameters that can be changed at runtime, false otherwise. + * Returns true if the default action has mutable parameters that can be + * changed at runtime, false otherwise. * - * @return true if the default action has mutable parameters, false otherwise + * @return true if the default action has mutable parameters, false + * otherwise */ boolean hasDefaultMutableParams(); @@ -114,8 +118,8 @@ public interface PiTableModel { boolean isConstantTable(); /** - * Returns the action model associated with the given ID, if present. If not present, it means that this table does - * not support such an action. + * Returns the action model associated with the given ID, if present. If not + * present, it means that this table does not support such an action. * * @param actionId action ID * @return optional action model @@ -123,8 +127,9 @@ public interface PiTableModel { Optional action(PiActionId actionId); /** - * Returns the match field model associated with the given ID, if present. If not present, it means that this table - * does not support such a match field. + * Returns the match field model associated with the given ID, if present. + * If not present, it means that this table does not support such a match + * field. * * @param matchFieldId match field ID * @return optional match field model diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java index 7b8797ac90..04b2528ef4 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java @@ -38,15 +38,18 @@ public final class PiTableEntry implements PiEntity { private final PiTableId tableId; private final PiMatchKey matchKey; private final PiTableAction tableAction; + private final boolean isDefaultAction; private final long cookie; private final int priority; private final double timeout; private PiTableEntry(PiTableId tableId, PiMatchKey matchKey, - PiTableAction tableAction, long cookie, int priority, double timeout) { + PiTableAction tableAction, boolean isDefaultAction, + long cookie, int priority, double timeout) { this.tableId = tableId; this.matchKey = matchKey; this.tableAction = tableAction; + this.isDefaultAction = isDefaultAction; this.cookie = cookie; this.priority = priority; this.timeout = timeout; @@ -63,6 +66,9 @@ public final class PiTableEntry implements PiEntity { /** * Returns the match key of this table entry. + *

+ * If {@link #isDefaultAction()} is {@code true} this method returns the + * empty match key ({@link PiMatchKey#EMPTY}). * * @return match key */ @@ -79,6 +85,16 @@ public final class PiTableEntry implements PiEntity { return tableAction; } + /** + * Returns true if this table entry contains the default action for this + * table, a.k.a. table-miss entry, false otherwise. + * + * @return boolean + */ + public boolean isDefaultAction() { + return isDefaultAction; + } + /** * Returns the cookie of this table entry. * @@ -89,8 +105,8 @@ public final class PiTableEntry implements PiEntity { } /** - * Returns the priority of this table entry, if present. If the priority value is not present, then this table entry - * has no explicit priority. + * Returns the priority of this table entry, if present. If the priority + * value is not present, then this table entry has no explicit priority. * * @return optional priority */ @@ -99,8 +115,9 @@ public final class PiTableEntry implements PiEntity { } /** - * Returns the timeout in seconds of this table entry, if present. If the timeout value is not present, then this - * table entry is meant to be permanent. + * Returns the timeout in seconds of this table entry, if present. If the + * timeout value is not present, then this table entry is meant to be + * permanent. * * @return optional timeout value in seconds */ @@ -121,25 +138,42 @@ public final class PiTableEntry implements PiEntity { Double.compare(that.timeout, timeout) == 0 && Objects.equal(tableId, that.tableId) && Objects.equal(matchKey, that.matchKey) && + Objects.equal(isDefaultAction, that.isDefaultAction) && Objects.equal(tableAction, that.tableAction); } @Override public int hashCode() { - return Objects.hashCode(tableId, matchKey, tableAction, priority, timeout); + return Objects.hashCode(tableId, matchKey, isDefaultAction, tableAction, + priority, timeout); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("tableId", tableId) - .add("matchKey", matchKey) - .add("tableAction", tableAction) + .add("matchKey", isDefaultAction ? "DEFAULT-ACTION" : matchKey) + .add("tableAction", tableActionToString(tableAction)) .add("priority", priority == NO_PRIORITY ? "N/A" : String.valueOf(priority)) .add("timeout", timeout == NO_TIMEOUT ? "PERMANENT" : String.valueOf(timeout)) .toString(); } + private String tableActionToString(PiTableAction tableAction) { + if (tableAction == null) { + return "null"; + } + switch (tableAction.type()) { + case ACTION_GROUP_ID: + return "GROUP:" + ((PiActionGroupId) tableAction).id(); + case GROUP_MEMBER_ID: + return "GROUP_MEMBER:" + ((PiActionGroupMemberId) tableAction).id(); + case ACTION: + default: + return tableAction.toString(); + } + } + /** * Returns a table entry builder. * @@ -244,7 +278,9 @@ public final class PiTableEntry implements PiEntity { public PiTableEntry build() { checkNotNull(tableId); checkNotNull(matchKey); - return new PiTableEntry(tableId, matchKey, tableAction, cookie, priority, timeout); + final boolean isDefaultAction = matchKey.equals(PiMatchKey.EMPTY); + return new PiTableEntry(tableId, matchKey, tableAction, + isDefaultAction, cookie, priority, timeout); } } } 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 4175489381..85a87fe99a 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 @@ -18,6 +18,7 @@ package org.onosproject.drivers.p4runtime; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.util.concurrent.Striped; import org.onlab.util.SharedExecutors; import org.onosproject.drivers.p4runtime.mirror.P4RuntimeTableMirror; @@ -26,8 +27,10 @@ import org.onosproject.net.flow.DefaultFlowEntry; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleProgrammable; +import org.onosproject.net.pi.model.PiPipelineInterpreter; import org.onosproject.net.pi.model.PiPipelineModel; import org.onosproject.net.pi.model.PiTableId; +import org.onosproject.net.pi.model.PiTableModel; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; import org.onosproject.net.pi.runtime.PiTableEntry; @@ -47,6 +50,7 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.google.common.collect.Lists.newArrayList; import static org.onosproject.drivers.p4runtime.P4RuntimeFlowRuleProgrammable.Operation.APPLY; @@ -91,6 +95,12 @@ public class P4RuntimeFlowRuleProgrammable // FIXME: set to true as soon as the feature is implemented in P4Runtime. private static final boolean DEFAULT_READ_ALL_DIRECT_COUNTERS = false; + // For default entries, P4Runtime mandates that only MODIFY messages are + // allowed. If true, treats default entries as normal table entries, + // e.g. inserting them first. + private static final String TABLE_DEFAULT_AS_ENTRY = "tableDefaultAsEntry"; + private static final boolean DEFAULT_TABLE_DEFAULT_AS_ENTRY = false; + // Needed to synchronize operations over the same table entry. private static final Striped ENTRY_LOCKS = Striped.lock(30); @@ -125,37 +135,36 @@ public class P4RuntimeFlowRuleProgrammable final ImmutableList.Builder result = ImmutableList.builder(); final List inconsistentEntries = Lists.newArrayList(); - // Read table entries. - // TODO: ONOS-7596 read counters with table entries - final Collection installedEntries = getFutureWithDeadline( - client.dumpAllTables(pipeconf), "dumping all tables", - Collections.emptyList()) - // Filter out entries from constant table. - .stream() + // Read table entries, including default ones. + final Collection deviceEntries = Stream.concat( + streamEntries(), streamDefaultEntries()) + // Ignore entries from constant tables. .filter(e -> !tableIsConstant(e.table())) .collect(Collectors.toList()); - if (installedEntries.isEmpty()) { + if (deviceEntries.isEmpty()) { return Collections.emptyList(); } - // Read table direct counters (if any). + // Synchronize mirror with the device state. + syncMirror(deviceEntries); + // Read table direct counters for non default-entries (if any). + // TODO: ONOS-7596 read counters with table entries final Map counterCellMap = - readEntryCounters(installedEntries); - + readEntryCounters(deviceEntries); // Forge flow entries with counter values. - for (PiTableEntry installedEntry : installedEntries) { - + for (PiTableEntry entry : deviceEntries) { final FlowEntry flowEntry = forgeFlowEntry( - installedEntry, counterCellMap.get(installedEntry)); - + entry, counterCellMap.get(entry)); if (flowEntry == null) { // Entry is on device but unknown to translation service or // device mirror. Inconsistent. Mark for removal. // TODO: make this behaviour configurable // In some cases it's fine for the device to have rules - // that were not installed by us. - inconsistentEntries.add(installedEntry); + // that were not installed by us, e.g. original default entry. + if (!isOriginalDefaultEntry(entry)) { + inconsistentEntries.add(entry); + } } else { result.add(flowEntry); } @@ -170,6 +179,34 @@ public class P4RuntimeFlowRuleProgrammable return result.build(); } + private Stream streamEntries() { + return getFutureWithDeadline( + client.dumpAllTables(pipeconf), "dumping all tables", + Collections.emptyList()) + .stream(); + } + + private Stream streamDefaultEntries() { + // Ignore tables with constant default action. + final Set defaultTables = pipelineModel.tables() + .stream() + .filter(table -> !table.constDefaultAction().isPresent()) + .map(PiTableModel::id) + .collect(Collectors.toSet()); + return defaultTables.isEmpty() ? Stream.empty() + : getFutureWithDeadline( + client.dumpTables(defaultTables, true, pipeconf), + "dumping default table entries", + Collections.emptyList()) + .stream(); + } + + private void syncMirror(Collection entries) { + Map handleMap = Maps.newHashMap(); + entries.forEach(e -> handleMap.put(PiTableEntryHandle.of(deviceId, e), e)); + tableMirror.sync(deviceId, handleMap); + } + @Override public Collection applyFlowRules(Collection rules) { return processFlowRules(rules, APPLY); @@ -234,7 +271,7 @@ public class P4RuntimeFlowRuleProgrammable private Collection processFlowRules(Collection rules, Operation driverOperation) { - if (!setupBehaviour()) { + if (!setupBehaviour() || rules.isEmpty()) { return Collections.emptyList(); } @@ -277,43 +314,66 @@ public class P4RuntimeFlowRuleProgrammable * Applies the given entry to the device, and returns true if the operation * was successful, false otherwise. */ - private boolean applyEntry(PiTableEntryHandle handle, + private boolean applyEntry(final PiTableEntryHandle handle, PiTableEntry piEntryToApply, - FlowRule ruleToApply, - Operation driverOperation) { + final FlowRule ruleToApply, + final Operation driverOperation) { // Depending on the driver operation, and if a matching rule exists on // the device, decide which P4 Runtime write operation to perform for // this entry. final TimedEntry piEntryOnDevice = tableMirror.get(handle); final WriteOperationType p4Operation; + final WriteOperationType storeOperation; + + final boolean defaultAsEntry = driverBoolProperty( + TABLE_DEFAULT_AS_ENTRY, DEFAULT_TABLE_DEFAULT_AS_ENTRY); + final boolean ignoreSameEntryUpdate = driverBoolProperty( + IGNORE_SAME_ENTRY_UPDATE, DEFAULT_IGNORE_SAME_ENTRY_UPDATE); + final boolean deleteBeforeUpdate = driverBoolProperty( + DELETE_BEFORE_UPDATE, DEFAULT_DELETE_BEFORE_UPDATE); if (driverOperation == APPLY) { if (piEntryOnDevice == null) { - // Entry is first-timer. - p4Operation = INSERT; + // Entry is first-timer, INSERT or MODIFY if default action. + p4Operation = !piEntryToApply.isDefaultAction() || defaultAsEntry + ? INSERT : MODIFY; + storeOperation = p4Operation; } else { - if (driverBoolProperty(IGNORE_SAME_ENTRY_UPDATE, - DEFAULT_IGNORE_SAME_ENTRY_UPDATE) - && piEntryToApply.action().equals(piEntryOnDevice.entry().action())) { + if (ignoreSameEntryUpdate && + piEntryToApply.action().equals(piEntryOnDevice.entry().action())) { log.debug("Ignoring re-apply of existing entry: {}", piEntryToApply); p4Operation = null; - } else if (driverBoolProperty(DELETE_BEFORE_UPDATE, - DEFAULT_DELETE_BEFORE_UPDATE)) { + } else if (deleteBeforeUpdate && !piEntryToApply.isDefaultAction()) { // Some devices return error when updating existing // entries. If requested, remove entry before - // re-inserting the modified one. + // re-inserting the modified one, except the default action + // entry, that cannot be removed. applyEntry(handle, piEntryOnDevice.entry(), null, REMOVE); p4Operation = INSERT; } else { p4Operation = MODIFY; } + storeOperation = p4Operation; } } else { - p4Operation = DELETE; + if (piEntryToApply.isDefaultAction()) { + // Cannot remove default action. Instead we should use the + // original defined by the interpreter (if any). + piEntryToApply = getOriginalDefaultEntry(piEntryToApply.table()); + if (piEntryToApply == null) { + return false; + } + p4Operation = MODIFY; + } else { + p4Operation = DELETE; + } + // Still want to delete the default entry from the mirror and + // translation store. + storeOperation = DELETE; } if (p4Operation != null) { if (writeEntry(piEntryToApply, p4Operation)) { - updateStores(handle, piEntryToApply, ruleToApply, p4Operation); + updateStores(handle, piEntryToApply, ruleToApply, storeOperation); return true; } else { return false; @@ -324,6 +384,34 @@ public class P4RuntimeFlowRuleProgrammable } } + private PiTableEntry getOriginalDefaultEntry(PiTableId tableId) { + final PiPipelineInterpreter interpreter = getInterpreter(); + if (interpreter == null) { + log.warn("Missing interpreter for {}, cannot get default action", + deviceId); + return null; + } + if (!interpreter.getOriginalDefaultAction(tableId).isPresent()) { + log.warn("Interpreter of {} doesn't define a default action for " + + "table {}, cannot produce default action entry", + deviceId, tableId); + return null; + } + return PiTableEntry.builder() + .forTable(tableId) + .withAction(interpreter.getOriginalDefaultAction(tableId).get()) + .build(); + } + + private boolean isOriginalDefaultEntry(PiTableEntry entry) { + if (!entry.isDefaultAction()) { + return false; + } + final PiTableEntry originalDefaultEntry = getOriginalDefaultEntry(entry.table()); + return originalDefaultEntry != null && + originalDefaultEntry.action().equals(entry.action()); + } + /** * Performs a write operation on the device. */ @@ -331,17 +419,9 @@ public class P4RuntimeFlowRuleProgrammable WriteOperationType p4Operation) { final CompletableFuture future = client.writeTableEntries( newArrayList(entry), p4Operation, pipeconf); - final Boolean success = getFutureWithDeadline( - future, "performing table " + p4Operation.name(), null); - if (success == null) { - // Error logged by getFutureWithDeadline(); - return false; - } - if (!success) { - log.warn("Unable to {} table entry in {}: {}", - p4Operation.name(), deviceId, entry); - } - return success; + // If false, errors logged by internal calls. + return getFutureWithDeadline( + future, "performing table " + p4Operation.name(), false); } private void updateStores(PiTableEntryHandle handle, @@ -380,6 +460,7 @@ public class P4RuntimeFlowRuleProgrammable cellDatas = Collections.emptyList(); } else { Set cellIds = tableEntries.stream() + .filter(e -> !e.isDefaultAction()) .filter(e -> tableHasCounter(e.table())) .map(PiCounterCellId::ofDirect) .collect(Collectors.toSet()); 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 b2da5fc7e6..c5eb4c0d10 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 @@ -37,6 +37,8 @@ import org.slf4j.Logger; import java.util.Collection; import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; @@ -131,11 +133,49 @@ public abstract class AbstractDistributedP4RuntimeMirror mirrorMap.remove(handle); } - private void removeAll(DeviceId deviceId) { + @Override + public void sync(DeviceId deviceId, Map deviceState) { checkNotNull(deviceId); - Collection handles = mirrorMap.keySet().stream() + Set>> localEntries = getEntriesForDevice(deviceId); + final AtomicInteger removeCount = new AtomicInteger(0); + final AtomicInteger updateCount = new AtomicInteger(0); + localEntries.forEach(e -> { + final H handle = e.getKey(); + final E storedValue = e.getValue().entry(); + if (!deviceState.containsKey(handle)) { + log.debug("Removing mirror entry for {}: {}", deviceId, storedValue); + removeCount.incrementAndGet(); + } else { + final E deviceValue = deviceState.get(handle); + if (!deviceValue.equals(storedValue)) { + log.debug("Updating mirror entry for {}: {}-->{}", + deviceId, storedValue, deviceValue); + put(handle, deviceValue); + updateCount.incrementAndGet(); + } + } + }); + if (removeCount.get() + updateCount.get() > 0) { + log.info("Synchronized mirror entries for {}: {} removed, {} updated", + deviceId, removeCount, updateCount); + } + } + + private Collection getHandlesForDevice(DeviceId deviceId) { + return mirrorMap.keySet().stream() .filter(h -> h.deviceId().equals(deviceId)) .collect(Collectors.toList()); + } + + private Set>> getEntriesForDevice(DeviceId deviceId) { + return mirrorMap.entrySet().stream() + .filter(e -> e.getKey().deviceId().equals(deviceId)) + .collect(Collectors.toSet()); + } + + private void removeAll(DeviceId deviceId) { + checkNotNull(deviceId); + Collection handles = getHandlesForDevice(deviceId); handles.forEach(mirrorMap::remove); } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java index ab18c9d5ab..d1c9cddcff 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java @@ -22,6 +22,7 @@ import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiHandle; import java.util.Collection; +import java.util.Map; /** * Service to keep track of the device state for a given class of PI entities. @@ -71,4 +72,12 @@ public interface P4RuntimeMirror * @param handle handle */ void remove(H handle); + + /** + * Synchronizes the state of the given device ID with the given handle map. + * + * @param deviceId device ID + * @param handleMap handle map + */ + void sync(DeviceId deviceId, Map handleMap); } diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java index 3115584cca..2d5b2802af 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java @@ -147,6 +147,14 @@ public class FabricInterpreter extends AbstractHandlerBehaviour .put(FabricConstants.HDR_ICMP_ICMP_CODE, Criterion.Type.ICMPV6_CODE) .build(); + private static final PiAction NOACTION = PiAction.builder().withId( + FabricConstants.NO_ACTION).build(); + + private static final ImmutableMap DEFAULT_ACTIONS = + ImmutableMap.builder() + .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, NOACTION) + .build(); + @Override public Optional mapCriterionType(Criterion.Type type) { return Optional.ofNullable(CRITERION_MAP.get(type)); @@ -276,6 +284,11 @@ public class FabricInterpreter extends AbstractHandlerBehaviour } } + @Override + public Optional getOriginalDefaultAction(PiTableId tableId) { + return Optional.ofNullable(DEFAULT_ACTIONS.get(tableId)); + } + @Override public Optional mapLogicalPortNumber(PortNumber port) { if (!port.equals(CONTROLLER)) { diff --git a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java index 886a39df08..562f0ae335 100644 --- a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java +++ b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java @@ -136,15 +136,18 @@ public interface P4RuntimeClient { PiPipeconf pipeconf); /** - * Dumps all entries currently installed in the given table, for the given - * pipeconf. + * Dumps all entries currently installed in the given tables, for the given + * pipeconf. If defaultEntries is set to true only the default action + * entries will be returned, otherwise non-default entries will be + * considered. * - * @param tableId table identifier + * @param tableIds table identifiers + * @param defaultEntries true to read default entries, false for non-default * @param pipeconf pipeconf currently deployed on the device * @return completable future of a collection of table entries */ - CompletableFuture> dumpTable( - PiTableId tableId, PiPipeconf pipeconf); + CompletableFuture> dumpTables( + Set tableIds, boolean defaultEntries, PiPipeconf pipeconf); /** * Dumps entries from all tables, for the given pipeconf. diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java index 0bd45d3e0b..e020ed5245 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java @@ -20,6 +20,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.Context; @@ -264,13 +265,15 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture> dumpTable(PiTableId piTableId, PiPipeconf pipeconf) { - return supplyInContext(() -> doDumpTable(piTableId, pipeconf), "dumpTable-" + piTableId); + public CompletableFuture> dumpTables( + Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { + return supplyInContext(() -> doDumpTables(piTableIds, defaultEntries, pipeconf), + "dumpTables-" + piTableIds.hashCode()); } @Override public CompletableFuture> dumpAllTables(PiPipeconf pipeconf) { - return supplyInContext(() -> doDumpTable(null, pipeconf), "dumpAllTables"); + return supplyInContext(() -> doDumpTables(null, false, pipeconf), "dumpAllTables"); } @Override @@ -515,43 +518,53 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, piTableEntries, opType, "table entry"); } - private Collection doDumpTable(PiTableId piTableId, PiPipeconf pipeconf) { + private Collection doDumpTables( + Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { - log.debug("Dumping table {} from {} (pipeconf {})...", piTableId, deviceId, pipeconf.id()); + log.debug("Dumping tables {} from {} (pipeconf {})...", + piTableIds, deviceId, pipeconf.id()); - int tableId; - if (piTableId == null) { + Set tableIds = Sets.newHashSet(); + if (piTableIds == null) { // Dump all tables. - tableId = 0; + tableIds.add(0); } else { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { log.warn("Unable to get a P4Info browser for pipeconf {}", pipeconf); return Collections.emptyList(); } - try { - tableId = browser.tables().getByName(piTableId.id()).getPreamble().getId(); - } catch (P4InfoBrowser.NotFoundException e) { - log.warn("Unable to dump table: {}", e.getMessage()); - return Collections.emptyList(); - } + piTableIds.forEach(piTableId -> { + try { + tableIds.add(browser.tables().getByName(piTableId.id()).getPreamble().getId()); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to dump table {}: {}", piTableId, e.getMessage()); + } + }); } - ReadRequest requestMsg = ReadRequest.newBuilder() - .setDeviceId(p4DeviceId) - .addEntities(Entity.newBuilder() - .setTableEntry(TableEntry.newBuilder() - .setTableId(tableId) - .build()) - .build()) - .build(); + if (tableIds.isEmpty()) { + return Collections.emptyList(); + } + + ReadRequest.Builder requestMsgBuilder = ReadRequest.newBuilder() + .setDeviceId(p4DeviceId); + tableIds.forEach(tableId -> requestMsgBuilder.addEntities( + Entity.newBuilder() + .setTableEntry( + TableEntry.newBuilder() + .setTableId(tableId) + .setIsDefaultAction(defaultEntries) + .build()) + .build()) + .build()); Iterator responses; try { - responses = blockingStub.read(requestMsg); + responses = blockingStub.read(requestMsgBuilder.build()); } catch (StatusRuntimeException e) { checkGrpcException(e); - log.warn("Unable to dump table {} from {}: {}", piTableId, deviceId, e.getMessage()); + log.warn("Unable to dump tables from {}: {}", deviceId, e.getMessage()); return Collections.emptyList(); } @@ -564,7 +577,8 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .map(Entity::getTableEntry) .collect(Collectors.toList()); - log.debug("Retrieved {} entries from table {} on {}...", tableEntryMsgs.size(), piTableId, deviceId); + log.debug("Retrieved {} entries from {} tables on {}...", + tableEntryMsgs.size(), tableIds.size(), deviceId); return TableEntryEncoder.decode(tableEntryMsgs, pipeconf); } @@ -1034,8 +1048,8 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { if (errors.isEmpty()) { final String description = ex.getStatus().getDescription(); log.warn("Unable to {} {} {}(s) on {}: {}", - opType.name(), writeEntities.size(), entryType, deviceId, - ex.getStatus().getCode().name(), + opType.name(), writeEntities.size(), entryType, deviceId, + ex.getStatus().getCode().name(), description == null ? "" : " - " + description); return; } diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java index 505b4cbdb9..53fcf2aba8 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java @@ -263,7 +263,9 @@ final class TableEntryEncoder { piTableEntryBuilder.forTable(PiTableId.of(tableInfo.getPreamble().getName())); // Priority. - piTableEntryBuilder.withPriority(tableEntryMsg.getPriority()); + if (tableEntryMsg.getPriority() > 0) { + piTableEntryBuilder.withPriority(tableEntryMsg.getPriority()); + } // Controller metadata (cookie) piTableEntryBuilder.withCookie(tableEntryMsg.getControllerMetadata()); 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 77f55ec399..5afad85b63 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 @@ -48,7 +48,7 @@ final class P4TableModel implements PiTableModel { private final boolean supportAging; private final ImmutableMap matchFields; private final ImmutableMap actions; - private final PiActionModel defaultAction; + private final PiActionModel constDefaultAction; private final boolean hasDefaultMutableParams; private final boolean isConstTable; @@ -58,7 +58,7 @@ final class P4TableModel implements PiTableModel { ImmutableMap meters, boolean supportAging, ImmutableMap matchFields, ImmutableMap actions, - PiActionModel defaultAction, boolean hasDefaultMutableParams, + PiActionModel constDefaultAction, boolean hasDefaultMutableParams, boolean isConstTable) { this.id = id; this.tableType = tableType; @@ -69,7 +69,7 @@ final class P4TableModel implements PiTableModel { this.supportAging = supportAging; this.matchFields = matchFields; this.actions = actions; - this.defaultAction = defaultAction; + this.constDefaultAction = constDefaultAction; this.hasDefaultMutableParams = hasDefaultMutableParams; this.isConstTable = isConstTable; } @@ -120,8 +120,8 @@ final class P4TableModel implements PiTableModel { } @Override - public Optional defaultAction() { - return Optional.ofNullable(defaultAction); + public Optional constDefaultAction() { + return Optional.ofNullable(constDefaultAction); } @Override @@ -148,7 +148,7 @@ final class P4TableModel implements PiTableModel { public int hashCode() { return Objects.hash(id, tableType, actionProfile, maxSize, counters, meters, supportAging, matchFields, actions, - defaultAction, hasDefaultMutableParams); + constDefaultAction, hasDefaultMutableParams); } @Override @@ -169,7 +169,7 @@ final class P4TableModel implements PiTableModel { && Objects.equals(this.supportAging, other.supportAging) && Objects.equals(this.matchFields, other.matchFields) && Objects.equals(this.actions, other.actions) - && Objects.equals(this.defaultAction, other.defaultAction) + && Objects.equals(this.constDefaultAction, other.constDefaultAction) && Objects.equals(this.hasDefaultMutableParams, other.hasDefaultMutableParams); } } 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 e23a49cfe0..3a803d43cd 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 @@ -193,7 +193,7 @@ public class P4InfoParserTest { wcmpTableModel.actions(), IsIterableContainingInAnyOrder.containsInAnyOrder( setEgressPortAction, noAction)); - PiActionModel table0DefaultAction = table0Model.defaultAction().orElse(null); + PiActionModel table0DefaultAction = table0Model.constDefaultAction().orElse(null); new EqualsTester().addEqualityGroup(table0DefaultAction, dropAction).testEquals(); From 5a8a650896a2c4c2a1d8b29becfe3246507ea62b Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Sun, 16 Sep 2018 13:52:45 -0700 Subject: [PATCH 15/19] Added fabric.p4 profile with both SPGW and INT support Change-Id: I738e47cc6dbb49d7b3f9b82b44f0f863ff0d0e9d --- pipelines/fabric/src/main/resources/Makefile | 5 +- .../fabric-spgw-int/bmv2/default/bmv2.json | 15481 ++++++++++++++++ .../fabric-spgw-int/bmv2/default/cpu_port.txt | 1 + .../fabric-spgw-int/bmv2/default/p4info.txt | 1577 ++ 4 files changed, 17063 insertions(+), 1 deletion(-) create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt create mode 100644 pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt diff --git a/pipelines/fabric/src/main/resources/Makefile b/pipelines/fabric/src/main/resources/Makefile index a83bc0f2da..81617a13b0 100644 --- a/pipelines/fabric/src/main/resources/Makefile +++ b/pipelines/fabric/src/main/resources/Makefile @@ -1,4 +1,4 @@ -all: fabric fabric-spgw fabric-int fabric-full constants +all: fabric fabric-spgw fabric-int fabric-spgw-int fabric-full constants fabric: @./bmv2-compile.sh "fabric" "" @@ -9,6 +9,9 @@ fabric-spgw: fabric-int: @./bmv2-compile.sh "fabric-int" "-DWITH_INT_SOURCE -DWITH_INT_TRANSIT" +fabric-spgw-int: + @./bmv2-compile.sh "fabric-spgw-int" "-DWITH_SPGW -DWITH_INT_SOURCE -DWITH_INT_TRANSIT" + fabric-full: @./bmv2-compile.sh "fabric-full" "-DWITH_MULTICAST -DWITH_IPV6 -DWITH_SPGW \ -DWITH_INT_SOURCE -DWITH_INT_TRANSIT -DWITH_INT_SINK" diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json new file mode 100644 index 0000000000..c4f0634c7b --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -0,0 +1,15481 @@ +{ + "header_types" : [ + { + "name" : "scalars_0", + "id" : 0, + "fields" : [ + ["last_ipv4_dscp", 6, false], + ["tmp", 4, false], + ["tmp_0", 8, false], + ["tmp_1", 32, false], + ["tmp_2", 32, false], + ["spgw_ingress_tmp_1", 1, false], + ["spgw_ingress_tmp_2", 1, false], + ["filtering_tmp_0", 1, false], + ["next_tmp_2", 1, false], + ["next_tmp_3", 1, false], + ["next_tmp_4", 1, false], + ["spgw_normalizer_hasReturned_0", 1, false], + ["spgw_ingress_hasReturned_0", 1, false], + ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], + ["fabric_metadata_t.fwd_type", 3, false], + ["fabric_metadata_t.next_id", 32, false], + ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], + ["fabric_metadata_t.is_multicast", 1, false], + ["fabric_metadata_t.is_controller_packet_out", 1, false], + ["fabric_metadata_t.clone_to_cpu", 1, false], + ["fabric_metadata_t.ip_proto", 8, false], + ["fabric_metadata_t.l4_src_port", 16, false], + ["fabric_metadata_t.l4_dst_port", 16, false], + ["_padding_2", 5, false] + ] + }, + { + "name" : "standard_metadata", + "id" : 1, + "fields" : [ + ["ingress_port", 9, false], + ["egress_spec", 9, false], + ["egress_port", 9, false], + ["clone_spec", 32, false], + ["instance_type", 32, false], + ["drop", 1, false], + ["recirculate_port", 16, false], + ["packet_length", 32, false], + ["enq_timestamp", 32, false], + ["enq_qdepth", 19, false], + ["deq_timedelta", 32, false], + ["deq_qdepth", 19, false], + ["ingress_global_timestamp", 48, false], + ["egress_global_timestamp", 48, false], + ["lf_field_list", 32, false], + ["mcast_grp", 16, false], + ["resubmit_flag", 32, false], + ["egress_rid", 16, false], + ["checksum_error", 1, false], + ["recirculate_flag", 32, false], + ["_padding", 5, false] + ] + }, + { + "name" : "ethernet_t", + "id" : 2, + "fields" : [ + ["dst_addr", 48, false], + ["src_addr", 48, false], + ["ether_type", 16, false] + ] + }, + { + "name" : "vlan_tag_t", + "id" : 3, + "fields" : [ + ["pri", 3, false], + ["cfi", 1, false], + ["vlan_id", 12, false], + ["ether_type", 16, false] + ] + }, + { + "name" : "mpls_t", + "id" : 4, + "fields" : [ + ["label", 20, false], + ["tc", 3, false], + ["bos", 1, false], + ["ttl", 8, false] + ] + }, + { + "name" : "ipv4_t", + "id" : 5, + "fields" : [ + ["version", 4, false], + ["ihl", 4, false], + ["dscp", 6, false], + ["ecn", 2, false], + ["total_len", 16, false], + ["identification", 16, false], + ["flags", 3, false], + ["frag_offset", 13, false], + ["ttl", 8, false], + ["protocol", 8, false], + ["hdr_checksum", 16, false], + ["src_addr", 32, false], + ["dst_addr", 32, false] + ] + }, + { + "name" : "udp_t", + "id" : 6, + "fields" : [ + ["src_port", 16, false], + ["dst_port", 16, false], + ["len", 16, false], + ["checksum", 16, false] + ] + }, + { + "name" : "gtpu_t", + "id" : 7, + "fields" : [ + ["version", 3, false], + ["pt", 1, false], + ["spare", 1, false], + ["ex_flag", 1, false], + ["seq_flag", 1, false], + ["npdu_flag", 1, false], + ["msgtype", 8, false], + ["msglen", 16, false], + ["teid", 32, false] + ] + }, + { + "name" : "arp_t", + "id" : 8, + "fields" : [ + ["hw_type", 16, false], + ["proto_type", 16, false], + ["hw_addr_len", 8, false], + ["proto_addr_len", 8, false], + ["opcode", 16, false] + ] + }, + { + "name" : "tcp_t", + "id" : 9, + "fields" : [ + ["src_port", 16, false], + ["dst_port", 16, false], + ["seq_no", 32, false], + ["ack_no", 32, false], + ["data_offset", 4, false], + ["res", 3, false], + ["ecn", 3, false], + ["ctrl", 6, false], + ["window", 16, false], + ["checksum", 16, false], + ["urgent_ptr", 16, false] + ] + }, + { + "name" : "icmp_t", + "id" : 10, + "fields" : [ + ["icmp_type", 8, false], + ["icmp_code", 8, false], + ["checksum", 16, false], + ["identifier", 16, false], + ["sequence_number", 16, false], + ["timestamp", 64, false] + ] + }, + { + "name" : "packet_out_header_t", + "id" : 11, + "fields" : [ + ["egress_port", 9, false], + ["_pad", 7, false] + ] + }, + { + "name" : "packet_in_header_t", + "id" : 12, + "fields" : [ + ["ingress_port", 9, false], + ["_pad", 7, false] + ] + }, + { + "name" : "intl4_shim_t", + "id" : 13, + "fields" : [ + ["int_type", 8, false], + ["rsvd1", 8, false], + ["len_words", 8, false], + ["rsvd2", 8, false] + ] + }, + { + "name" : "int_header_t", + "id" : 14, + "fields" : [ + ["ver", 2, false], + ["rep", 2, false], + ["c", 1, false], + ["e", 1, false], + ["rsvd1", 5, false], + ["ins_cnt", 5, false], + ["max_hop_cnt", 8, false], + ["total_hop_cnt", 8, false], + ["instruction_mask_0003", 4, false], + ["instruction_mask_0407", 4, false], + ["instruction_mask_0811", 4, false], + ["instruction_mask_1215", 4, false], + ["rsvd2", 16, false] + ] + }, + { + "name" : "int_switch_id_t", + "id" : 15, + "fields" : [ + ["switch_id", 32, false] + ] + }, + { + "name" : "int_port_ids_t", + "id" : 16, + "fields" : [ + ["ingress_port_id", 16, false], + ["egress_port_id", 16, false] + ] + }, + { + "name" : "int_hop_latency_t", + "id" : 17, + "fields" : [ + ["hop_latency", 32, false] + ] + }, + { + "name" : "int_q_occupancy_t", + "id" : 18, + "fields" : [ + ["q_id", 8, false], + ["q_occupancy", 24, false] + ] + }, + { + "name" : "int_ingress_tstamp_t", + "id" : 19, + "fields" : [ + ["ingress_tstamp", 32, false] + ] + }, + { + "name" : "int_egress_tstamp_t", + "id" : 20, + "fields" : [ + ["egress_tstamp", 32, false] + ] + }, + { + "name" : "int_q_congestion_t", + "id" : 21, + "fields" : [ + ["q_id", 8, false], + ["q_congestion", 24, false] + ] + }, + { + "name" : "int_egress_port_tx_util_t", + "id" : 22, + "fields" : [ + ["egress_port_tx_util", 32, false] + ] + }, + { + "name" : "int_data_t", + "id" : 23, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, + { + "name" : "intl4_tail_t", + "id" : 24, + "fields" : [ + ["next_proto", 8, false], + ["dest_port", 16, false], + ["padding", 2, false], + ["dscp", 6, false] + ] + }, + { + "name" : "spgw_meta_t", + "id" : 25, + "fields" : [ + ["direction", 2, false], + ["ipv4_len", 16, false], + ["teid", 32, false], + ["s1u_enb_addr", 32, false], + ["s1u_sgw_addr", 32, false], + ["_padding_0", 6, false] + ] + }, + { + "name" : "int_metadata_t", + "id" : 26, + "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], + ["switch_id", 32, false], + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_1", 5, false] + ] + } + ], + "headers" : [ + { + "name" : "scalars", + "id" : 0, + "header_type" : "scalars_0", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "standard_metadata", + "id" : 1, + "header_type" : "standard_metadata", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "ethernet", + "id" : 2, + "header_type" : "ethernet_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "vlan_tag", + "id" : 3, + "header_type" : "vlan_tag_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "mpls", + "id" : 4, + "header_type" : "mpls_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ipv4", + "id" : 5, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_udp", + "id" : 6, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu", + "id" : 7, + "header_type" : "gtpu_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_ipv4", + "id" : 8, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_udp", + "id" : 9, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "ipv4", + "id" : 10, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "arp", + "id" : 11, + "header_type" : "arp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "tcp", + "id" : 12, + "header_type" : "tcp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "udp", + "id" : 13, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "icmp", + "id" : 14, + "header_type" : "icmp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "packet_out", + "id" : 15, + "header_type" : "packet_out_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "packet_in", + "id" : 16, + "header_type" : "packet_in_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "intl4_shim", + "id" : 17, + "header_type" : "intl4_shim_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_header", + "id" : 18, + "header_type" : "int_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_switch_id", + "id" : 19, + "header_type" : "int_switch_id_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_port_ids", + "id" : 20, + "header_type" : "int_port_ids_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_hop_latency", + "id" : 21, + "header_type" : "int_hop_latency_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_q_occupancy", + "id" : 22, + "header_type" : "int_q_occupancy_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_ingress_tstamp", + "id" : 23, + "header_type" : "int_ingress_tstamp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_egress_tstamp", + "id" : 24, + "header_type" : "int_egress_tstamp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_q_congestion", + "id" : 25, + "header_type" : "int_q_congestion_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_egress_tx_util", + "id" : 26, + "header_type" : "int_egress_port_tx_util_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_data", + "id" : 27, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "intl4_tail", + "id" : 28, + "header_type" : "intl4_tail_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "userMetadata.spgw", + "id" : 29, + "header_type" : "spgw_meta_t", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "userMetadata.int_meta", + "id" : 30, + "header_type" : "int_metadata_t", + "metadata" : true, + "pi_omit" : true + } + ], + "header_stacks" : [], + "header_union_types" : [], + "header_unions" : [], + "header_union_stacks" : [], + "field_lists" : [], + "errors" : [], + "enums" : [], + "parsers" : [ + { + "name" : "parser", + "id" : 0, + "init_state" : "start", + "parse_states" : [ + { + "name" : "start", + "id" : 0, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x00ff", + "mask" : null, + "next_state" : "parse_packet_out" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ] + }, + { + "name" : "parse_packet_out", + "id" : 1, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "packet_out" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_ethernet", + "id" : 2, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "ethernet" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x8100", + "mask" : null, + "next_state" : "parse_vlan_tag" + }, + { + "type" : "hexstr", + "value" : "0x8847", + "mask" : null, + "next_state" : "parse_mpls" + }, + { + "type" : "hexstr", + "value" : "0x0806", + "mask" : null, + "next_state" : "parse_arp" + }, + { + "type" : "hexstr", + "value" : "0x0800", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + } + ] + }, + { + "name" : "parse_vlan_tag", + "id" : 3, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "vlan_tag" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x0806", + "mask" : null, + "next_state" : "parse_arp" + }, + { + "type" : "hexstr", + "value" : "0x0800", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "type" : "hexstr", + "value" : "0x8847", + "mask" : null, + "next_state" : "parse_mpls" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ] + }, + { + "name" : "parse_mpls", + "id" : 4, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "mpls" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + }, + { + "type" : "lookahead", + "value" : [0, 4] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + } + ] + }, + { + "name" : "parse_ipv4", + "id" : 5, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "ipv4" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.ip_proto"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x06", + "mask" : null, + "next_state" : "parse_tcp" + }, + { + "type" : "hexstr", + "value" : "0x11", + "mask" : null, + "next_state" : "parse_udp" + }, + { + "type" : "hexstr", + "value" : "0x01", + "mask" : null, + "next_state" : "parse_icmp" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ] + }, + { + "name" : "parse_arp", + "id" : 6, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "arp" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_tcp", + "id" : 7, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "tcp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["tcp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["tcp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_udp", + "id" : 8, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "udp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["udp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x0868", + "mask" : null, + "next_state" : "parse_gtpu" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ] + }, + { + "name" : "parse_icmp", + "id" : 9, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "icmp" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_gtpu", + "id" : 10, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x18" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x8c", + "mask" : null, + "next_state" : "do_parse_gtpu" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_0"] + } + ] + }, + { + "name" : "do_parse_gtpu", + "id" : 11, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "inner_ipv4" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x06", + "mask" : null, + "next_state" : "parse_tcp" + }, + { + "type" : "hexstr", + "value" : "0x11", + "mask" : null, + "next_state" : "parse_inner_udp" + }, + { + "type" : "hexstr", + "value" : "0x01", + "mask" : null, + "next_state" : "parse_icmp" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ] + }, + { + "name" : "parse_inner_udp", + "id" : 12, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "inner_udp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["inner_udp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["inner_udp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_int", + "id" : 13, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x01", + "mask" : "0x01", + "next_state" : "parse_intl4_shim" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + } + ] + }, + { + "name" : "parse_intl4_shim", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_shim" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_header" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_intl4_tail" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int_data" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + } + ] + }, + { + "name" : "parse_int_data", + "id" : 15, + "parser_ops" : [], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_intl4_tail", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_tail" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + } + ] + } + ], + "parse_vsets" : [], + "deparsers" : [ + { + "name" : "deparser", + "id" : 0, + "source_info" : { + "filename" : "include/parser.p4", + "line" : 228, + "column" : 8, + "source_fragment" : "FabricDeparser" + }, + "order" : ["packet_in", "ethernet", "vlan_tag", "mpls", "arp", "gtpu_ipv4", "gtpu_udp", "gtpu", "ipv4", "tcp", "udp", "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"] + } + ], + "meter_arrays" : [], + "counter_arrays" : [ + { + "name" : "FabricIngress.spgw_ingress.ue_counter", + "id" : 0, + "is_direct" : true, + "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup" + }, + { + "name" : "FabricIngress.process_set_source_sink.counter_set_source", + "id" : 1, + "is_direct" : true, + "binding" : "FabricIngress.process_set_source_sink.tb_set_source" + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan_counter", + "id" : 2, + "is_direct" : true, + "binding" : "FabricIngress.filtering.ingress_port_vlan" + }, + { + "name" : "FabricIngress.filtering.fwd_classifier_counter", + "id" : 3, + "is_direct" : true, + "binding" : "FabricIngress.filtering.fwd_classifier" + }, + { + "name" : "FabricIngress.forwarding.bridging_counter", + "id" : 4, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.bridging" + }, + { + "name" : "FabricIngress.forwarding.mpls_counter", + "id" : 5, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.mpls" + }, + { + "name" : "FabricIngress.forwarding.routing_v4_counter", + "id" : 6, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.routing_v4" + }, + { + "name" : "FabricIngress.forwarding.acl_counter", + "id" : 7, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.acl" + }, + { + "name" : "FabricIngress.next.vlan_meta_counter", + "id" : 8, + "is_direct" : true, + "binding" : "FabricIngress.next.vlan_meta" + }, + { + "name" : "FabricIngress.next.simple_counter", + "id" : 9, + "is_direct" : true, + "binding" : "FabricIngress.next.simple" + }, + { + "name" : "FabricIngress.next.hashed_counter", + "id" : 10, + "is_direct" : true, + "binding" : "FabricIngress.next.hashed" + }, + { + "name" : "FabricIngress.next.multicast_counter", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.next.multicast" + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 12, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 23, + "column" : 48, + "source_fragment" : "egress_port_counter" + }, + "size" : 511, + "is_direct" : false + }, + { + "name" : "FabricIngress.port_counters_control.ingress_port_counter", + "id" : 13, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 24, + "column" : 48, + "source_fragment" : "ingress_port_counter" + }, + "size" : 511, + "is_direct" : false + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", + "id" : 14, + "is_direct" : true, + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" + }, + { + "name" : "FabricEgress.egress_next.egress_vlan_counter", + "id" : 15, + "is_direct" : true, + "binding" : "FabricEgress.egress_next.egress_vlan" + } + ], + "register_arrays" : [], + "calculations" : [ + { + "name" : "calc", + "id" : 0, + "source_info" : { + "filename" : "include/checksum.p4", + "line" : 28, + "column" : 8, + "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "version"] + }, + { + "type" : "field", + "value" : ["ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + } + ] + }, + { + "name" : "calc_0", + "id" : 1, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 237, + "column" : 8, + "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + } + ] + }, + { + "name" : "calc_1", + "id" : 2, + "source_info" : { + "filename" : "include/checksum.p4", + "line" : 57, + "column" : 8, + "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "version"] + }, + { + "type" : "field", + "value" : ["ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + } + ] + } + ], + "learn_lists" : [], + "actions" : [ + { + "name" : "NoAction", + "id" : 0, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 1, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 2, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 3, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 4, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 5, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 6, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 7, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 8, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 9, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "drop_now", + "id" : 10, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.spgw_ingress.gtpu_decap", + "id" : 11, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "gtpu_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "gtpu_udp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "gtpu.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw_ingress.set_dl_sess_info", + "id" : 12, + "runtime_data" : [ + { + "name" : "teid", + "bitwidth" : 32 + }, + { + "name" : "s1u_enb_addr", + "bitwidth" : 32 + }, + { + "name" : "s1u_sgw_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "teid"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 62, + "column" : 8, + "source_fragment" : "spgw_meta.teid = teid" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_enb_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "spgw_meta.s1u_enb_addr = s1u_enb_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_sgw_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "spgw_meta.s1u_sgw_addr = s1u_sgw_addr" + } + } + ] + }, + { + "name" : "FabricIngress.process_set_source_sink.int_set_source", + "id" : 13, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "fabric_metadata.int_meta.source = true" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.drop", + "id" : 14, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "mark_to_drop()" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.set_vlan", + "id" : 15, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.push_internal_vlan", + "id" : 16, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.cfi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.pri = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.ether_type = hdr.ethernet.ether_type" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 91, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 57, + "column" : 8, + "source_fragment" : "fabric_metadata.pop_vlan_when_packet_in = true" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.nop_ingress_port_vlan", + "id" : 17, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.filtering.set_forwarding_type", + "id" : 18, + "runtime_data" : [ + { + "name" : "fwd_type", + "bitwidth" : 3 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fabric_metadata.fwd_type = fwd_type" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_bridging", + "id" : 19, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.pop_mpls_and_next", + "id" : 20, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.mpls.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_routing_v4", + "id" : 21, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 83, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_routing_v4", + "id" : 22, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_acl", + "id" : 23, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 110, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.punt_to_cpu", + "id" : 24, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "hexstr", + "value" : "0x00ff" + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 116, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = 255" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 118, + "column" : 8, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.clone_to_cpu", + "id" : 25, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.clone_to_cpu"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 123, + "column" : 8, + "source_fragment" : "fabric_metadata.clone_to_cpu = true" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.drop", + "id" : 26, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 128, + "column" : 8, + "source_fragment" : "mark_to_drop()" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_acl", + "id" : 27, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.next.set_vlan", + "id" : 28, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + } + ] + }, + { + "name" : "FabricIngress.next.output_simple", + "id" : 29, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num" + } + } + ] + }, + { + "name" : "FabricIngress.next.set_vlan_output", + "id" : 30, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + }, + { + "name" : "port_num", + "bitwidth" : 9 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 90, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_simple", + "id" : 31, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v4_simple", + "id" : 32, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v6_simple", + "id" : 33, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_vlan", + "id" : 34, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 90, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_hashed", + "id" : 35, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v4_hashed", + "id" : 36, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v6_hashed", + "id" : 37, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.set_mcast_group", + "id" : 38, + "runtime_data" : [ + { + "name" : "gid", + "bitwidth" : 16 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "mcast_grp"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 202, + "column" : 8, + "source_fragment" : "standard_metadata.mcast_grp = gid" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 203, + "column" : 8, + "source_fragment" : "fabric_metadata.is_multicast = true" + } + } + ] + }, + { + "name" : "act", + "id" : 39, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 30, + "column" : 32, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_0", + "id" : 40, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "fabric.p4", + "line" : 54, + "column" : 50, + "source_fragment" : "hdr.gtpu_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "fabric.p4", + "line" : 54, + "column" : 65, + "source_fragment" : "hdr.gtpu_udp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_1", + "id" : 41, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + }, + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 35, + "column" : 16, + "source_fragment" : "= inner_udp; ..." + } + } + ] + }, + { + "name" : "act_2", + "id" : 42, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 37, + "column" : 12, + "source_fragment" : "udp.setInvalid()" + } + } + ] + }, + { + "name" : "act_3", + "id" : 43, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + }, + { + "type" : "header", + "value" : "ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 31, + "column" : 18, + "source_fragment" : "= ipv4; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 32, + "column" : 13, + "source_fragment" : "= inner_ipv4; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + }, + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 33, + "column" : 17, + "source_fragment" : "= udp; ..." + } + } + ] + }, + { + "name" : "act_4", + "id" : 44, + "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" : 26, + "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" : 27, + "column" : 12, + "source_fragment" : "hdr.packet_out.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "fabric_metadata.is_controller_packet_out = true" + } + } + ] + }, + { + "name" : "act_5", + "id" : 45, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_6", + "id" : 46, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_7", + "id" : 47, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 121, + "column" : 36, + "source_fragment" : "2w1; ..." + } + } + ] + }, + { + "name" : "act_8", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_9", + "id" : 49, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_10", + "id" : 50, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 122, + "column" : 38, + "source_fragment" : "2w2; ..." + } + } + ] + }, + { + "name" : "act_11", + "id" : 51, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 120, + "column" : 37, + "source_fragment" : "2w0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 153, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_12", + "id" : 52, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_13", + "id" : 53, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "ipv4_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 170, + "column" : 8, + "source_fragment" : "spgw_meta.ipv4_len = ipv4.total_len" + } + } + ] + }, + { + "name" : "act_14", + "id" : 54, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_15", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_16", + "id" : 56, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + { + "type" : "hexstr", + "value" : "0x07" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 111, + "column" : 31, + "source_fragment" : "7; ..." + } + } + ] + }, + { + "name" : "act_17", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 94, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + } + ] + }, + { + "name" : "act_18", + "id" : 58, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_19", + "id" : 59, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_20", + "id" : 60, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_21", + "id" : 61, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_22", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_23", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_24", + "id" : 64, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_25", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 223, + "column" : 20, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_26", + "id" : 66, + "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" : 230, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "act_27", + "id" : 67, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_1"] + }, + { + "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" : 28, + "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_1"] + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + } + } + ] + }, + { + "name" : "act_28", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_2"] + }, + { + "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" : 31, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_2"] + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + } + } + ] + }, + { + "name" : "NoAction", + "id" : 69, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 70, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 71, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 72, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 73, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "drop_now", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "drop_now", + "id" : 75, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricEgress.spgw_egress.gtpu_encap", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 185, + "column" : 8, + "source_fragment" : "gtpu_ipv4.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 186, + "column" : 8, + "source_fragment" : "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" : 103, + "column" : 28, + "source_fragment" : "5; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 188, + "column" : 8, + "source_fragment" : "gtpu_ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 189, + "column" : 8, + "source_fragment" : "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/spgw.p4", + "line" : 190, + "column" : 8, + "source_fragment" : "gtpu_ipv4.total_len = ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 192, + "column" : 8, + "source_fragment" : "gtpu_ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 193, + "column" : 8, + "source_fragment" : "gtpu_ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 194, + "column" : 8, + "source_fragment" : "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" : 116, + "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" : 100, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_enb_addr"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 197, + "column" : 8, + "source_fragment" : "gtpu_ipv4.dst_addr = spgw_meta.s1u_enb_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_sgw_addr"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 198, + "column" : 8, + "source_fragment" : "gtpu_ipv4.src_addr = spgw_meta.s1u_sgw_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 199, + "column" : 8, + "source_fragment" : "gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 201, + "column" : 8, + "source_fragment" : "gtpu_udp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "src_port"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 202, + "column" : 8, + "source_fragment" : "gtpu_udp.src_port = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dst_port"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 203, + "column" : 8, + "source_fragment" : "gtpu_udp.dst_port = 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" : ["userMetadata.spgw", "ipv4_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 204, + "column" : 8, + "source_fragment" : "gtpu_udp.len = spgw_meta.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 206, + "column" : 8, + "source_fragment" : "gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 208, + "column" : 8, + "source_fragment" : "gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 209, + "column" : 8, + "source_fragment" : "gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 210, + "column" : 8, + "source_fragment" : "gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 211, + "column" : 8, + "source_fragment" : "gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 212, + "column" : 8, + "source_fragment" : "gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 213, + "column" : 8, + "source_fragment" : "gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 214, + "column" : 8, + "source_fragment" : "gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 215, + "column" : 8, + "source_fragment" : "gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "ipv4_len"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 216, + "column" : 8, + "source_fragment" : "gtpu.msglen = spgw_meta.ipv4_len" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "teid"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 217, + "column" : 8, + "source_fragment" : "gtpu.teid = spgw_meta.teid" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", + "id" : 77, + "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" : 31, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "int_type"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 33, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.int_type = 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 131, + "column" : 36, + "source_fragment" : "4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_header" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 36, + "column" : 8, + "source_fragment" : "hdr.int_header.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "ver"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.int_header.ver = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "rep"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 38, + "column" : 8, + "source_fragment" : "hdr.int_header.rep = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "c"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 39, + "column" : 8, + "source_fragment" : "hdr.int_header.c = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "e"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_header.e = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "rsvd1"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_header.rsvd1 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "ins_cnt"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 42, + "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" : 43, + "column" : 8, + "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0003"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0407"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 46, + "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", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_1215"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 48, + "column" : 8, + "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" : 50, + "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" : 51, + "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", "fabric_metadata_t.l4_dst_port"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 53, + "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" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "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" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 127, + "column" : 24, + "source_fragment" : "0x1; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 78, + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 26, + "column" : 8, + "source_fragment" : "fmeta.int_meta.transit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 31, + "column" : 8, + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 79, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 82, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 83, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 84, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 85, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "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" : 59, + "column" : 8, + "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" : 51, + "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" : 52, + "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" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "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" : 46, + "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" : 47, + "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" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 95, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 102, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 105, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 106, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 107, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 108, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 109, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 110, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "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" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "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" : 75, + "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" : 76, + "column" : 8, + "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" : 68, + "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" : 69, + "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" : 63, + "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" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.pkt_io_egress.pop_vlan", + "id" : 111, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 112, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 253, + "column" : 8, + "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 254, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "act_29", + "id" : 113, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 57, + "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" : 58, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + } + ] + }, + { + "name" : "act_30", + "id" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_31", + "id" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 370, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_32", + "id" : 116, + "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" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 378, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_33", + "id" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 375, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_34", + "id" : 118, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 381, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_35", + "id" : 119, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 384, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] + } + ], + "pipelines" : [ + { + "name" : "ingress", + "id" : 0, + "source_info" : { + "filename" : "fabric.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "FabricIngress" + }, + "init_table" : "tbl_act", + "tables" : [ + { + "name" : "tbl_act", + "id" : 0, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [40], + "actions" : ["act_0"], + "base_default_next" : "node_3", + "next_tables" : { + "act_0" : "node_3" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_0", + "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"], + "base_default_next" : "node_5", + "next_tables" : { + "act" : "node_5" + }, + "default_entry" : { + "action_id" : 39, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_1", + "id" : 2, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [43], + "actions" : ["act_3"], + "base_default_next" : "node_7", + "next_tables" : { + "act_3" : "node_7" + }, + "default_entry" : { + "action_id" : 43, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_2", + "id" : 3, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [41], + "actions" : ["act_1"], + "base_default_next" : "node_10", + "next_tables" : { + "act_1" : "node_10" + }, + "default_entry" : { + "action_id" : 41, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_3", + "id" : 4, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [42], + "actions" : ["act_2"], + "base_default_next" : "node_10", + "next_tables" : { + "act_2" : "node_10" + }, + "default_entry" : { + "action_id" : 42, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_4", + "id" : 5, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [44], + "actions" : ["act_4"], + "base_default_next" : null, + "next_tables" : { + "act_4" : null + }, + "default_entry" : { + "action_id" : 44, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_5", + "id" : 6, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [52], + "actions" : ["act_12"], + "base_default_next" : "node_13", + "next_tables" : { + "act_12" : "node_13" + }, + "default_entry" : { + "action_id" : 52, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw_ingress.s1u_filter_table", + "id" : 7, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 79, + "column" : 10, + "source_fragment" : "s1u_filter_table" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "gtpu_ipv4.dst_addr", + "target" : ["gtpu_ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [1], + "actions" : ["NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_6", + "__MISS__" : "tbl_act_7" + }, + "default_entry" : { + "action_id" : 1, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_6", + "id" : 8, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45], + "actions" : ["act_5"], + "base_default_next" : "node_17", + "next_tables" : { + "act_5" : "node_17" + }, + "default_entry" : { + "action_id" : 45, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_7", + "id" : 9, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [46], + "actions" : ["act_6"], + "base_default_next" : "node_17", + "next_tables" : { + "act_6" : "node_17" + }, + "default_entry" : { + "action_id" : 46, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now", + "id" : 10, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [10], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_8", + "next_tables" : { + "drop_now" : "tbl_act_8" + }, + "default_entry" : { + "action_id" : 10, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_8", + "id" : 11, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [47], + "actions" : ["act_7"], + "base_default_next" : "tbl_spgw_ingress_gtpu_decap", + "next_tables" : { + "act_7" : "tbl_spgw_ingress_gtpu_decap" + }, + "default_entry" : { + "action_id" : 47, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_spgw_ingress_gtpu_decap", + "id" : 12, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [11], + "actions" : ["FabricIngress.spgw_ingress.gtpu_decap"], + "base_default_next" : "node_27", + "next_tables" : { + "FabricIngress.spgw_ingress.gtpu_decap" : "node_27" + }, + "default_entry" : { + "action_id" : 11, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw_ingress.dl_sess_lookup", + "id" : 13, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 68, + "column" : 10, + "source_fragment" : "dl_sess_lookup" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [12, 0], + "actions" : ["FabricIngress.spgw_ingress.set_dl_sess_info", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_9", + "__MISS__" : "tbl_act_10" + }, + "default_entry" : { + "action_id" : 0, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_9", + "id" : 14, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [48], + "actions" : ["act_8"], + "base_default_next" : "node_24", + "next_tables" : { + "act_8" : "node_24" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_10", + "id" : 15, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [49], + "actions" : ["act_9"], + "base_default_next" : "node_24", + "next_tables" : { + "act_9" : "node_24" + }, + "default_entry" : { + "action_id" : 49, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_11", + "id" : 16, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [50], + "actions" : ["act_10"], + "base_default_next" : "node_27", + "next_tables" : { + "act_10" : "node_27" + }, + "default_entry" : { + "action_id" : 50, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_12", + "id" : 17, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [51], + "actions" : ["act_11"], + "base_default_next" : "node_27", + "next_tables" : { + "act_11" : "node_27" + }, + "default_entry" : { + "action_id" : 51, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_13", + "id" : 18, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [53], + "actions" : ["act_13"], + "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", + "next_tables" : { + "act_13" : "FabricIngress.filtering.ingress_port_vlan" + }, + "default_entry" : { + "action_id" : 53, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan", + "id" : 19, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 66, + "column" : 10, + "source_fragment" : "ingress_port_vlan" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.is_valid", + "target" : ["vlan_tag", "$valid$"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [16, 15, 14, 17], + "actions" : ["FabricIngress.filtering.push_internal_vlan", "FabricIngress.filtering.set_vlan", "FabricIngress.filtering.drop", "FabricIngress.filtering.nop_ingress_port_vlan"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_14", + "__MISS__" : "tbl_act_15" + }, + "default_entry" : { + "action_id" : 16, + "action_const" : true, + "action_data" : ["0xffe"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_14", + "id" : 20, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [54], + "actions" : ["act_14"], + "base_default_next" : "node_32", + "next_tables" : { + "act_14" : "node_32" + }, + "default_entry" : { + "action_id" : 54, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_15", + "id" : 21, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [55], + "actions" : ["act_15"], + "base_default_next" : "node_32", + "next_tables" : { + "act_15" : "node_32" + }, + "default_entry" : { + "action_id" : 55, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.fwd_classifier", + "id" : 22, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 103, + "column" : 10, + "source_fragment" : "fwd_classifier" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "target" : ["ethernet", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.ether_type", + "target" : ["vlan_tag", "ether_type"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [18], + "actions" : ["FabricIngress.filtering.set_forwarding_type"], + "base_default_next" : "node_35", + "next_tables" : { + "FabricIngress.filtering.set_forwarding_type" : "node_35" + }, + "default_entry" : { + "action_id" : 18, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_16", + "id" : 23, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [56], + "actions" : ["act_16"], + "base_default_next" : "node_35", + "next_tables" : { + "act_16" : "node_35" + }, + "default_entry" : { + "action_id" : 56, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.bridging", + "id" : 24, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 41, + "column" : 10, + "source_fragment" : "bridging" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "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" : [19, 3], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "NoAction"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.forwarding.acl", + "NoAction" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 3, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.mpls", + "id" : 25, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "mpls" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.mpls.label", + "target" : ["mpls", "label"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [20, 4], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "NoAction"], + "base_default_next" : "tbl_act_17", + "next_tables" : { + "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_act_17", + "NoAction" : "tbl_act_17" + }, + "default_entry" : { + "action_id" : 4, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_17", + "id" : 26, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [57], + "actions" : ["act_17"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "act_17" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 57, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 27, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 91, + "column" : 10, + "source_fragment" : "routing_v4" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [21, 22, 5], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "NoAction"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.forwarding.acl", + "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.forwarding.acl", + "NoAction" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 5, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.acl", + "id" : 28, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 136, + "column" : 10, + "source_fragment" : "acl" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.ip_proto", + "target" : ["scalars", "fabric_metadata_t.ip_proto"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_src_port", + "target" : ["scalars", "fabric_metadata_t.l4_src_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_dst_port", + "target" : ["scalars", "fabric_metadata_t.l4_dst_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "target" : ["ethernet", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.src_addr", + "target" : ["ethernet", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.ether_type", + "target" : ["vlan_tag", "ether_type"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.src_addr", + "target" : ["ipv4", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.icmp.icmp_type", + "target" : ["icmp", "icmp_type"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.icmp.icmp_code", + "target" : ["icmp", "icmp_code"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [23, 24, 25, 26, 27], + "actions" : ["FabricIngress.forwarding.set_next_id_acl", "FabricIngress.forwarding.punt_to_cpu", "FabricIngress.forwarding.clone_to_cpu", "FabricIngress.forwarding.drop", "FabricIngress.forwarding.nop_acl"], + "base_default_next" : "tbl_act_18", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_acl" : "tbl_act_18", + "FabricIngress.forwarding.punt_to_cpu" : "tbl_act_18", + "FabricIngress.forwarding.clone_to_cpu" : "tbl_act_18", + "FabricIngress.forwarding.drop" : "tbl_act_18", + "FabricIngress.forwarding.nop_acl" : "tbl_act_18" + }, + "default_entry" : { + "action_id" : 27, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_18", + "id" : 29, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [58], + "actions" : ["act_18"], + "base_default_next" : "FabricIngress.next.vlan_meta", + "next_tables" : { + "act_18" : "FabricIngress.next.vlan_meta" + }, + "default_entry" : { + "action_id" : 58, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.vlan_meta", + "id" : 30, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "vlan_meta" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [28, 9], + "actions" : ["FabricIngress.next.set_vlan", "nop"], + "base_default_next" : "FabricIngress.next.simple", + "next_tables" : { + "FabricIngress.next.set_vlan" : "FabricIngress.next.simple", + "nop" : "FabricIngress.next.simple" + }, + "default_entry" : { + "action_id" : 9, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.next.simple", + "id" : 31, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 122, + "column" : 10, + "source_fragment" : "simple" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [29, 30, 31, 32, 33, 34, 6], + "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.set_vlan_output", "FabricIngress.next.l3_routing_simple", "FabricIngress.next.mpls_routing_v4_simple", "FabricIngress.next.mpls_routing_v6_simple", "FabricIngress.next.l3_routing_vlan", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_19", + "__MISS__" : "tbl_act_20" + }, + "default_entry" : { + "action_id" : 6, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_19", + "id" : 32, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [59], + "actions" : ["act_19"], + "base_default_next" : "node_48", + "next_tables" : { + "act_19" : "node_48" + }, + "default_entry" : { + "action_id" : 59, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_20", + "id" : 33, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [60], + "actions" : ["act_20"], + "base_default_next" : "node_48", + "next_tables" : { + "act_20" : "node_48" + }, + "default_entry" : { + "action_id" : 60, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.hashed", + "id" : 34, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 175, + "column" : 10, + "source_fragment" : "hashed" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "indirect_ws", + "action_profile" : "FabricIngress.next.ecmp_selector", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [35, 36, 37, 7], + "actions" : ["FabricIngress.next.l3_routing_hashed", "FabricIngress.next.mpls_routing_v4_hashed", "FabricIngress.next.mpls_routing_v6_hashed", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_21", + "__MISS__" : "tbl_act_22" + } + }, + { + "name" : "tbl_act_21", + "id" : 35, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [61], + "actions" : ["act_21"], + "base_default_next" : "node_52", + "next_tables" : { + "act_21" : "node_52" + }, + "default_entry" : { + "action_id" : 61, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_22", + "id" : 36, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62], + "actions" : ["act_22"], + "base_default_next" : "node_52", + "next_tables" : { + "act_22" : "node_52" + }, + "default_entry" : { + "action_id" : 62, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.multicast", + "id" : 37, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 207, + "column" : 10, + "source_fragment" : "multicast" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [38, 8], + "actions" : ["FabricIngress.next.set_mcast_group", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_23", + "__MISS__" : "tbl_act_24" + }, + "default_entry" : { + "action_id" : 8, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_23", + "id" : 38, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [63], + "actions" : ["act_23"], + "base_default_next" : "node_56", + "next_tables" : { + "act_23" : "node_56" + }, + "default_entry" : { + "action_id" : 63, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_24", + "id" : 39, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [64], + "actions" : ["act_24"], + "base_default_next" : "node_56", + "next_tables" : { + "act_24" : "node_56" + }, + "default_entry" : { + "action_id" : 64, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_25", + "id" : 40, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [65], + "actions" : ["act_25"], + "base_default_next" : "node_58", + "next_tables" : { + "act_25" : "node_58" + }, + "default_entry" : { + "action_id" : 65, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_26", + "id" : 41, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [66], + "actions" : ["act_26"], + "base_default_next" : "node_62", + "next_tables" : { + "act_26" : "node_62" + }, + "default_entry" : { + "action_id" : 66, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_27", + "id" : 42, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [67], + "actions" : ["act_27"], + "base_default_next" : "node_64", + "next_tables" : { + "act_27" : "node_64" + }, + "default_entry" : { + "action_id" : 67, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_28", + "id" : 43, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [68], + "actions" : ["act_28"], + "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", + "next_tables" : { + "act_28" : "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" : 44, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "tb_set_source" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_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" : [13, 2], + "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "FabricIngress.process_set_source_sink.int_set_source" : null, + "NoAction" : null + }, + "default_entry" : { + "action_id" : 2, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + } + ], + "action_profiles" : [ + { + "name" : "FabricIngress.next.ecmp_selector", + "id" : 0, + "max_size" : 64, + "selector" : { + "algo" : "crc16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + } + ] + } + } + ], + "conditionals" : [ + { + "name" : "node_3", + "id" : 0, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 30, + "column" : 12, + "source_fragment" : "! is_gtpu_encapped" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu", "$valid$"] + } + } + } + } + }, + "true_next" : "tbl_act_0", + "false_next" : "node_5" + }, + { + "name" : "node_5", + "id" : 1, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + } + } + } + } + }, + "true_next" : "tbl_act_1", + "false_next" : "node_10" + }, + { + "name" : "node_7", + "id" : 2, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "inner_udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_udp", "$valid$"] + } + } + }, + "true_next" : "tbl_act_2", + "false_next" : "tbl_act_3" + }, + { + "name" : "node_10", + "id" : 3, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "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_act_4", + "false_next" : "tbl_act_5" + }, + { + "name" : "node_13", + "id" : 4, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 139, + "column" : 12, + "source_fragment" : "gtpu.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu", "$valid$"] + } + } + }, + "true_next" : "FabricIngress.spgw_ingress.s1u_filter_table", + "false_next" : "FabricIngress.spgw_ingress.dl_sess_lookup" + }, + { + "name" : "node_17", + "id" : 5, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 143, + "column" : 16, + "source_fragment" : "!s1u_filter_table.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + } + } + } + } + }, + "true_next" : "tbl_drop_now", + "false_next" : "tbl_act_8" + }, + { + "name" : "node_24", + "id" : 6, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + } + } + }, + "true_next" : "tbl_act_11", + "false_next" : "tbl_act_12" + }, + { + "name" : "node_27", + "id" : 7, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + } + } + } + } + }, + "true_next" : "tbl_act_13", + "false_next" : "FabricIngress.filtering.ingress_port_vlan" + }, + { + "name" : "node_32", + "id" : 8, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + } + } + }, + "true_next" : "FabricIngress.filtering.fwd_classifier", + "false_next" : "tbl_act_16" + }, + { + "name" : "node_35", + "id" : 9, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 191, + "column" : 11, + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_37" + }, + { + "name" : "node_37", + "id" : 10, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 192, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_40" + }, + { + "name" : "node_40", + "id" : 11, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 198, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "FabricIngress.forwarding.acl" + }, + { + "name" : "node_48", + "id" : 12, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 219, + "column" : 12, + "source_fragment" : "!simple.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + } + } + } + } + }, + "true_next" : "FabricIngress.next.hashed", + "false_next" : "node_58" + }, + { + "name" : "node_52", + "id" : 13, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 220, + "column" : 16, + "source_fragment" : "!hashed.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + } + } + } + } + }, + "true_next" : "FabricIngress.next.multicast", + "false_next" : "node_58" + }, + { + "name" : "node_56", + "id" : 14, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 221, + "column" : 20, + "source_fragment" : "!multicast.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + } + } + } + } + }, + "true_next" : "tbl_act_25", + "false_next" : "node_58" + }, + { + "name" : "node_58", + "id" : 15, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + } + } + } + } + }, + "true_next" : "node_59", + "false_next" : "node_62" + }, + { + "name" : "node_59", + "id" : 16, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 228, + "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" : "node_60", + "false_next" : "node_62" + }, + { + "name" : "node_60", + "id" : 17, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 229, + "column" : 15, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_act_26", + "false_next" : "node_62" + }, + { + "name" : "node_62", + "id" : 18, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 27, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec < 511" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "<", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01ff" + } + } + }, + "true_next" : "tbl_act_27", + "false_next" : "node_64" + }, + { + "name" : "node_64", + "id" : 19, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 30, + "column" : 12, + "source_fragment" : "standard_metadata.ingress_port < 511" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "<", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01ff" + } + } + }, + "true_next" : "tbl_act_28", + "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" + } + ] + }, + { + "name" : "egress", + "id" : 1, + "source_info" : { + "filename" : "fabric.p4", + "line" : 79, + "column" : 8, + "source_fragment" : "FabricEgress" + }, + "init_table" : "node_69", + "tables" : [ + { + "name" : "tbl_pkt_io_egress_pop_vlan", + "id" : 45, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [111], + "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], + "base_default_next" : "node_73", + "next_tables" : { + "FabricEgress.pkt_io_egress.pop_vlan" : "node_73" + }, + "default_entry" : { + "action_id" : 111, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now_0", + "id" : 46, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [74], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_29", + "next_tables" : { + "drop_now" : "tbl_act_29" + }, + "default_entry" : { + "action_id" : 74, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_29", + "id" : 47, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [113], + "actions" : ["act_29"], + "base_default_next" : null, + "next_tables" : { + "act_29" : null + }, + "default_entry" : { + "action_id" : 113, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now_1", + "id" : 48, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [75], + "actions" : ["drop_now"], + "base_default_next" : "FabricEgress.egress_next.egress_vlan", + "next_tables" : { + "drop_now" : "FabricEgress.egress_next.egress_vlan" + }, + "default_entry" : { + "action_id" : 75, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.egress_next.egress_vlan", + "id" : 49, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 258, + "column" : 10, + "source_fragment" : "egress_vlan" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "standard_metadata.egress_port", + "target" : ["standard_metadata", "egress_port"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [112, 73], + "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], + "base_default_next" : "node_79", + "next_tables" : { + "FabricEgress.egress_next.pop_vlan" : "node_79", + "nop" : "node_79" + }, + "default_entry" : { + "action_id" : 73, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_spgw_egress_gtpu_encap", + "id" : 50, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [76], + "actions" : ["FabricEgress.spgw_egress.gtpu_encap"], + "base_default_next" : "node_81", + "next_tables" : { + "FabricEgress.spgw_egress.gtpu_encap" : "node_81" + }, + "default_entry" : { + "action_id" : 76, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "id" : 51, + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "tb_int_source" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "hdr.ipv4.src_addr", + "target" : ["ipv4", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_src_port", + "target" : ["scalars", "fabric_metadata_t.l4_src_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_dst_port", + "target" : ["scalars", "fabric_metadata_t.l4_dst_port"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [77, 69], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], + "base_default_next" : "node_84", + "next_tables" : { + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_84", + "NoAction" : "node_84" + }, + "default_entry" : { + "action_id" : 69, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_30", + "id" : 52, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [114], + "actions" : ["act_30"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "next_tables" : { + "act_30" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + }, + "default_entry" : { + "action_id" : 114, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "id" : 53, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 271, + "column" : 10, + "source_fragment" : "tb_int_insert" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [78, 70], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "base_default_next" : "node_87", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_87", + "NoAction" : "node_87" + }, + "default_entry" : { + "action_id" : 70, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_31", + "id" : 54, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [115], + "actions" : ["act_31"], + "base_default_next" : "node_89", + "next_tables" : { + "act_31" : "node_89" + }, + "default_entry" : { + "action_id" : 115, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "id" : 55, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 280, + "column" : 10, + "source_fragment" : "tb_int_inst_0003" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.instruction_mask_0003", + "target" : ["int_header", "instruction_mask_0003"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 16, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 71], + "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" : { + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" + }, + "default_entry" : { + "action_id" : 71, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 79, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 80, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 81, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 82, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 83, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 84, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 85, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 91, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 92, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 93, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 94, + "action_data" : [] + }, + "priority" : 16 + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "id" : 56, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 324, + "column" : 10, + "source_fragment" : "tb_int_inst_0407" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.instruction_mask_0407", + "target" : ["int_header", "instruction_mask_0407"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 16, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 72], + "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_32", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_32", + "NoAction" : "tbl_act_32" + }, + "default_entry" : { + "action_id" : 72, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 95, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 96, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 97, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 98, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 99, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 100, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 101, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 102, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 103, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 104, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 105, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 106, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 107, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 108, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 109, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 110, + "action_data" : [] + }, + "priority" : 16 + } + ] + }, + { + "name" : "tbl_act_32", + "id" : 57, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [117], + "actions" : ["act_33"], + "base_default_next" : "node_93", + "next_tables" : { + "act_33" : "node_93" + }, + "default_entry" : { + "action_id" : 117, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_33", + "id" : 58, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [116], + "actions" : ["act_32"], + "base_default_next" : "node_95", + "next_tables" : { + "act_32" : "node_95" + }, + "default_entry" : { + "action_id" : 116, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_34", + "id" : 59, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [118], + "actions" : ["act_34"], + "base_default_next" : "node_97", + "next_tables" : { + "act_34" : "node_97" + }, + "default_entry" : { + "action_id" : 118, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_35", + "id" : 60, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [119], + "actions" : ["act_35"], + "base_default_next" : null, + "next_tables" : { + "act_35" : null + }, + "default_entry" : { + "action_id" : 119, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [], + "conditionals" : [ + { + "name" : "node_69", + "id" : 20, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "fabric_metadata.is_controller_packet_out == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "true_next" : null, + "false_next" : "node_70" + }, + { + "name" : "node_70", + "id" : 21, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 48, + "column" : 12, + "source_fragment" : "standard_metadata.egress_port == 255" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + }, + "true_next" : "node_71", + "false_next" : "node_76" + }, + { + "name" : "node_71", + "id" : 22, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 49, + "column" : 16, + "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["vlan_tag", "$valid$"] + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + }, + "true_next" : "tbl_pkt_io_egress_pop_vlan", + "false_next" : "node_73" + }, + { + "name" : "node_73", + "id" : 23, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 52, + "column" : 16, + "source_fragment" : "fabric_metadata.is_multicast == true && ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.clone_to_cpu"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + }, + "true_next" : "tbl_drop_now_0", + "false_next" : "tbl_act_29" + }, + { + "name" : "node_76", + "id" : 24, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 272, + "column" : 12, + "source_fragment" : "fabric_metadata.is_multicast == true ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + } + } + } + } + }, + "true_next" : "tbl_drop_now_1", + "false_next" : "FabricEgress.egress_next.egress_vlan" + }, + { + "name" : "node_79", + "id" : 25, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 221, + "column" : 12, + "source_fragment" : "spgw_meta.direction == SPGW_DIR_DOWNLINK" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "true_next" : "tbl_spgw_egress_gtpu_encap", + "false_next" : "node_81" + }, + { + "name" : "node_81", + "id" : 26, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 98, + "column" : 12, + "source_fragment" : "standard_metadata.ingress_port != 255 && ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "or", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + } + } + } + } + } + } + }, + "false_next" : null, + "true_next" : "node_82" + }, + { + "name" : "node_82", + "id" : 27, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 102, + "column" : 16, + "source_fragment" : "fabric_metadata.int_meta.source == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "false_next" : "node_84" + }, + { + "name" : "node_84", + "id" : 28, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 106, + "column" : 15, + "source_fragment" : "hdr.int_header.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["int_header", "$valid$"] + } + } + }, + "false_next" : null, + "true_next" : "tbl_act_30" + }, + { + "name" : "node_87", + "id" : 29, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 369, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_31", + "false_next" : "node_89" + }, + { + "name" : "node_89", + "id" : 30, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "false_next" : null, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + }, + { + "name" : "node_93", + "id" : 31, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 377, + "column" : 12, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_act_33", + "false_next" : "node_95" + }, + { + "name" : "node_95", + "id" : 32, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 380, + "column" : 12, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "true_next" : "tbl_act_34", + "false_next" : "node_97" + }, + { + "name" : "node_97", + "id" : 33, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 383, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["intl4_shim", "$valid$"] + } + } + }, + "false_next" : null, + "true_next" : "tbl_act_35" + } + ] + } + ], + "checksums" : [ + { + "name" : "cksum", + "id" : 0, + "target" : ["ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + } + }, + { + "name" : "cksum_0", + "id" : 1, + "target" : ["gtpu_ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc_0", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu_ipv4", "$valid$"] + } + } + } + }, + { + "name" : "cksum_1", + "id" : 2, + "target" : ["ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc_1", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + } + } + ], + "force_arith" : [], + "extern_instances" : [], + "field_aliases" : [ + [ + "queueing_metadata.enq_timestamp", + ["standard_metadata", "enq_timestamp"] + ], + [ + "queueing_metadata.enq_qdepth", + ["standard_metadata", "enq_qdepth"] + ], + [ + "queueing_metadata.deq_timedelta", + ["standard_metadata", "deq_timedelta"] + ], + [ + "queueing_metadata.deq_qdepth", + ["standard_metadata", "deq_qdepth"] + ], + [ + "intrinsic_metadata.ingress_global_timestamp", + ["standard_metadata", "ingress_global_timestamp"] + ], + [ + "intrinsic_metadata.egress_global_timestamp", + ["standard_metadata", "egress_global_timestamp"] + ], + [ + "intrinsic_metadata.lf_field_list", + ["standard_metadata", "lf_field_list"] + ], + [ + "intrinsic_metadata.mcast_grp", + ["standard_metadata", "mcast_grp"] + ], + [ + "intrinsic_metadata.resubmit_flag", + ["standard_metadata", "resubmit_flag"] + ], + [ + "intrinsic_metadata.egress_rid", + ["standard_metadata", "egress_rid"] + ], + [ + "intrinsic_metadata.recirculate_flag", + ["standard_metadata", "recirculate_flag"] + ] + ], + "program" : "fabric.p4", + "__meta__" : { + "version" : [2, 18], + "compiler" : "https://github.com/p4lang/p4c" + } +} \ No newline at end of file diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt new file mode 100644 index 0000000000..f9bc88d2b4 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -0,0 +1,1577 @@ +tables { + preamble { + id: 33582731 + name: "FabricIngress.spgw_ingress.dl_sess_lookup" + alias: "dl_sess_lookup" + } + match_fields { + id: 1 + name: "ipv4.dst_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16804065 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318781522 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33615906 + name: "FabricIngress.spgw_ingress.s1u_filter_table" + alias: "s1u_filter_table" + } + match_fields { + id: 1 + name: "gtpu_ipv4.dst_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16800567 + } + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33581620 + name: "FabricIngress.process_set_source_sink.tb_set_source" + alias: "tb_set_source" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 16778827 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318787614 + size: 511 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33611649 + name: "FabricIngress.filtering.ingress_port_vlan" + alias: "ingress_port_vlan" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.vlan_tag.is_valid" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: TERNARY + } + action_refs { + id: 16835546 + } + action_refs { + id: 16793253 + } + action_refs { + id: 16798734 + } + action_refs { + id: 16833700 + } + const_default_action_id: 16835546 + direct_resource_ids: 318815501 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33596298 + name: "FabricIngress.filtering.fwd_classifier" + alias: "fwd_classifier" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 3 + name: "hdr.vlan_tag.ether_type" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 16840921 + } + const_default_action_id: 16840921 + direct_resource_ids: 318827326 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33596749 + name: "FabricIngress.forwarding.bridging" + alias: "bridging" + } + match_fields { + id: 1 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + action_refs { + id: 16811012 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318770289 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33574274 + name: "FabricIngress.forwarding.mpls" + alias: "mpls" + } + match_fields { + id: 1 + name: "hdr.mpls.label" + bitwidth: 20 + match_type: EXACT + } + action_refs { + id: 16827758 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318830507 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33562650 + name: "FabricIngress.forwarding.routing_v4" + alias: "routing_v4" + } + match_fields { + id: 1 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: LPM + } + action_refs { + id: 16777434 + } + action_refs { + id: 16804187 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318811107 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33574876 + name: "FabricIngress.forwarding.acl" + alias: "acl" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: TERNARY + } + match_fields { + id: 2 + name: "fabric_metadata.ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 3 + name: "fabric_metadata.l4_src_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 4 + name: "fabric_metadata.l4_dst_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 5 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 6 + name: "hdr.ethernet.src_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 7 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: TERNARY + } + match_fields { + id: 8 + name: "hdr.vlan_tag.ether_type" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 9 + name: "hdr.ipv4.src_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 10 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 11 + name: "hdr.icmp.icmp_type" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 12 + name: "hdr.icmp.icmp_code" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 16785374 + } + action_refs { + id: 16801806 + } + action_refs { + id: 16784835 + } + action_refs { + id: 16833260 + } + action_refs { + id: 16842570 + } + const_default_action_id: 16842570 + direct_resource_ids: 318772272 + size: 128 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33562709 + name: "FabricIngress.next.vlan_meta" + alias: "vlan_meta" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16790685 + } + action_refs { + id: 16819938 + annotations: "@defaultonly()" + } + direct_resource_ids: 318785328 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33571723 + name: "FabricIngress.next.simple" + alias: "simple" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16802668 + } + action_refs { + id: 16808391 + } + action_refs { + id: 16780007 + } + action_refs { + id: 16806134 + } + action_refs { + id: 16795970 + } + action_refs { + id: 16791579 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318769096 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33608588 + name: "FabricIngress.next.hashed" + alias: "hashed" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16800211 + } + action_refs { + id: 16779239 + } + action_refs { + id: 16819349 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + implementation_id: 285233747 + direct_resource_ids: 318800532 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33606828 + name: "FabricIngress.next.multicast" + alias: "multicast" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16789575 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318801752 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" + alias: "tb_int_source" + } + match_fields { + id: 1 + name: "hdr.ipv4.src_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 3 + name: "fabric_metadata.l4_src_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 4 + name: "fabric_metadata.l4_dst_port" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 16785857 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318800047 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + alias: "tb_int_insert" + } + action_refs { + id: 16780783 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + alias: "tb_int_inst_0003" + } + match_fields { + id: 1 + name: "hdr.int_header.instruction_mask_0003" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 16809886 + } + action_refs { + id: 16783130 + } + action_refs { + id: 16809096 + } + action_refs { + id: 16834117 + } + action_refs { + id: 16825314 + } + action_refs { + id: 16811436 + } + action_refs { + id: 16802199 + } + action_refs { + id: 16796779 + } + action_refs { + id: 16787676 + } + action_refs { + id: 16825351 + } + action_refs { + id: 16793999 + } + action_refs { + id: 16786714 + } + action_refs { + id: 16814203 + } + action_refs { + id: 16807054 + } + action_refs { + id: 16800064 + } + action_refs { + id: 16792997 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + size: 16 + idle_timeout_behavior: NO_TIMEOUT + is_const_table: true +} +tables { + preamble { + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" + alias: "tb_int_inst_0407" + } + match_fields { + id: 1 + name: "hdr.int_header.instruction_mask_0407" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 16819022 + } + action_refs { + id: 16804144 + } + action_refs { + id: 16829117 + } + action_refs { + id: 16797781 + } + action_refs { + id: 16813543 + } + action_refs { + id: 16824974 + } + action_refs { + id: 16815362 + } + action_refs { + id: 16835399 + } + action_refs { + id: 16834505 + } + action_refs { + id: 16811493 + } + action_refs { + id: 16825476 + } + action_refs { + id: 16799777 + } + action_refs { + id: 16829592 + } + action_refs { + id: 16805877 + } + action_refs { + id: 16780182 + } + action_refs { + id: 16799476 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + size: 16 + idle_timeout_behavior: NO_TIMEOUT + is_const_table: true +} +tables { + preamble { + id: 33599342 + name: "FabricEgress.egress_next.egress_vlan" + alias: "egress_vlan" + } + match_fields { + id: 1 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: EXACT + } + match_fields { + id: 2 + name: "standard_metadata.egress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 16790030 + } + action_refs { + id: 16819938 + annotations: "@defaultonly()" + } + direct_resource_ids: 318827144 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +actions { + preamble { + id: 16800567 + name: "NoAction" + alias: "NoAction" + } +} +actions { + preamble { + id: 16819938 + name: "nop" + alias: "nop" + } +} +actions { + preamble { + id: 16823970 + name: "drop_now" + alias: "drop_now" + } +} +actions { + preamble { + id: 16819909 + name: "FabricIngress.spgw_ingress.gtpu_decap" + alias: "gtpu_decap" + } +} +actions { + preamble { + id: 16804065 + name: "FabricIngress.spgw_ingress.set_dl_sess_info" + alias: "set_dl_sess_info" + } + params { + id: 1 + name: "teid" + bitwidth: 32 + } + params { + id: 2 + name: "s1u_enb_addr" + bitwidth: 32 + } + params { + id: 3 + name: "s1u_sgw_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 16778827 + name: "FabricIngress.process_set_source_sink.int_set_source" + alias: "int_set_source" + } +} +actions { + preamble { + id: 16798734 + name: "FabricIngress.filtering.drop" + alias: "filtering.drop" + } +} +actions { + preamble { + id: 16793253 + name: "FabricIngress.filtering.set_vlan" + alias: "filtering.set_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16835546 + name: "FabricIngress.filtering.push_internal_vlan" + alias: "push_internal_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16833700 + name: "FabricIngress.filtering.nop_ingress_port_vlan" + alias: "nop_ingress_port_vlan" + } +} +actions { + preamble { + id: 16840921 + name: "FabricIngress.filtering.set_forwarding_type" + alias: "set_forwarding_type" + } + params { + id: 1 + name: "fwd_type" + bitwidth: 3 + } +} +actions { + preamble { + id: 16811012 + name: "FabricIngress.forwarding.set_next_id_bridging" + alias: "set_next_id_bridging" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16827758 + name: "FabricIngress.forwarding.pop_mpls_and_next" + alias: "pop_mpls_and_next" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16777434 + name: "FabricIngress.forwarding.set_next_id_routing_v4" + alias: "set_next_id_routing_v4" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16804187 + name: "FabricIngress.forwarding.nop_routing_v4" + alias: "nop_routing_v4" + } +} +actions { + preamble { + id: 16785374 + name: "FabricIngress.forwarding.set_next_id_acl" + alias: "set_next_id_acl" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16801806 + name: "FabricIngress.forwarding.punt_to_cpu" + alias: "punt_to_cpu" + } +} +actions { + preamble { + id: 16784835 + name: "FabricIngress.forwarding.clone_to_cpu" + alias: "clone_to_cpu" + } +} +actions { + preamble { + id: 16833260 + name: "FabricIngress.forwarding.drop" + alias: "forwarding.drop" + } +} +actions { + preamble { + id: 16842570 + name: "FabricIngress.forwarding.nop_acl" + alias: "nop_acl" + } +} +actions { + preamble { + id: 16790685 + name: "FabricIngress.next.set_vlan" + alias: "next.set_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16802668 + name: "FabricIngress.next.output_simple" + alias: "output_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } +} +actions { + preamble { + id: 16808391 + name: "FabricIngress.next.set_vlan_output" + alias: "set_vlan_output" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } + params { + id: 2 + name: "port_num" + bitwidth: 9 + } +} +actions { + preamble { + id: 16780007 + name: "FabricIngress.next.l3_routing_simple" + alias: "l3_routing_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 16806134 + name: "FabricIngress.next.mpls_routing_v4_simple" + alias: "mpls_routing_v4_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16795970 + name: "FabricIngress.next.mpls_routing_v6_simple" + alias: "mpls_routing_v6_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16791579 + name: "FabricIngress.next.l3_routing_vlan" + alias: "l3_routing_vlan" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16800211 + name: "FabricIngress.next.l3_routing_hashed" + alias: "l3_routing_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 16779239 + name: "FabricIngress.next.mpls_routing_v4_hashed" + alias: "mpls_routing_v4_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16819349 + name: "FabricIngress.next.mpls_routing_v6_hashed" + alias: "mpls_routing_v6_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16789575 + name: "FabricIngress.next.set_mcast_group" + alias: "set_mcast_group" + } + params { + id: 1 + name: "gid" + bitwidth: 16 + } +} +actions { + preamble { + id: 16829135 + name: "FabricEgress.spgw_egress.gtpu_encap" + alias: "gtpu_encap" + } +} +actions { + preamble { + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" + alias: "int_source_dscp" + } + params { + id: 1 + name: "max_hop" + bitwidth: 8 + } + params { + id: 2 + name: "ins_cnt" + bitwidth: 5 + } + params { + id: 3 + name: "ins_mask0003" + bitwidth: 4 + } + params { + id: 4 + name: "ins_mask0407" + bitwidth: 4 + } +} +actions { + preamble { + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" + } + params { + id: 1 + name: "switch_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" + alias: "int_set_header_0003_i0" + } +} +actions { + preamble { + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" + alias: "int_set_header_0003_i1" + } +} +actions { + preamble { + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" + alias: "int_set_header_0003_i2" + } +} +actions { + preamble { + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" + alias: "int_set_header_0003_i3" + } +} +actions { + preamble { + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" + alias: "int_set_header_0003_i4" + } +} +actions { + preamble { + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" + alias: "int_set_header_0003_i5" + } +} +actions { + preamble { + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" + alias: "int_set_header_0003_i6" + } +} +actions { + preamble { + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" + alias: "int_set_header_0003_i7" + } +} +actions { + preamble { + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" + alias: "int_set_header_0003_i8" + } +} +actions { + preamble { + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" + alias: "int_set_header_0003_i9" + } +} +actions { + preamble { + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" + alias: "int_set_header_0003_i10" + } +} +actions { + preamble { + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" + alias: "int_set_header_0003_i11" + } +} +actions { + preamble { + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" + alias: "int_set_header_0003_i12" + } +} +actions { + preamble { + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" + alias: "int_set_header_0003_i13" + } +} +actions { + preamble { + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" + alias: "int_set_header_0003_i14" + } +} +actions { + preamble { + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" + alias: "int_set_header_0003_i15" + } +} +actions { + preamble { + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" + alias: "int_set_header_0407_i0" + } +} +actions { + preamble { + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" + alias: "int_set_header_0407_i1" + } +} +actions { + preamble { + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" + alias: "int_set_header_0407_i2" + } +} +actions { + preamble { + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" + alias: "int_set_header_0407_i3" + } +} +actions { + preamble { + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" + alias: "int_set_header_0407_i4" + } +} +actions { + preamble { + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" + alias: "int_set_header_0407_i5" + } +} +actions { + preamble { + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" + alias: "int_set_header_0407_i6" + } +} +actions { + preamble { + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" + alias: "int_set_header_0407_i7" + } +} +actions { + preamble { + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" + alias: "int_set_header_0407_i8" + } +} +actions { + preamble { + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" + alias: "int_set_header_0407_i9" + } +} +actions { + preamble { + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" + alias: "int_set_header_0407_i10" + } +} +actions { + preamble { + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" + alias: "int_set_header_0407_i11" + } +} +actions { + preamble { + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" + alias: "int_set_header_0407_i12" + } +} +actions { + preamble { + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" + alias: "int_set_header_0407_i13" + } +} +actions { + preamble { + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" + alias: "int_set_header_0407_i14" + } +} +actions { + preamble { + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" + alias: "int_set_header_0407_i15" + } +} +actions { + preamble { + id: 16801047 + name: "FabricEgress.pkt_io_egress.pop_vlan" + alias: "pkt_io_egress.pop_vlan" + } +} +actions { + preamble { + id: 16790030 + name: "FabricEgress.egress_next.pop_vlan" + alias: "egress_next.pop_vlan" + } +} +action_profiles { + preamble { + id: 285233747 + name: "FabricIngress.next.ecmp_selector" + alias: "ecmp_selector" + } + table_ids: 33608588 + with_selector: true + size: 64 +} +counters { + preamble { + id: 302011205 + name: "FabricIngress.port_counters_control.egress_port_counter" + alias: "egress_port_counter" + } + spec { + unit: BOTH + } + size: 511 +} +counters { + preamble { + id: 302002771 + name: "FabricIngress.port_counters_control.ingress_port_counter" + alias: "ingress_port_counter" + } + spec { + unit: BOTH + } + size: 511 +} +direct_counters { + preamble { + id: 318781522 + name: "FabricIngress.spgw_ingress.ue_counter" + alias: "ue_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33582731 +} +direct_counters { + preamble { + id: 318787614 + name: "FabricIngress.process_set_source_sink.counter_set_source" + alias: "counter_set_source" + } + spec { + unit: BOTH + } + direct_table_id: 33581620 +} +direct_counters { + preamble { + id: 318815501 + name: "FabricIngress.filtering.ingress_port_vlan_counter" + alias: "ingress_port_vlan_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33611649 +} +direct_counters { + preamble { + id: 318827326 + name: "FabricIngress.filtering.fwd_classifier_counter" + alias: "fwd_classifier_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33596298 +} +direct_counters { + preamble { + id: 318770289 + name: "FabricIngress.forwarding.bridging_counter" + alias: "bridging_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33596749 +} +direct_counters { + preamble { + id: 318830507 + name: "FabricIngress.forwarding.mpls_counter" + alias: "mpls_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33574274 +} +direct_counters { + preamble { + id: 318811107 + name: "FabricIngress.forwarding.routing_v4_counter" + alias: "routing_v4_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33562650 +} +direct_counters { + preamble { + id: 318772272 + name: "FabricIngress.forwarding.acl_counter" + alias: "acl_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33574876 +} +direct_counters { + preamble { + id: 318785328 + name: "FabricIngress.next.vlan_meta_counter" + alias: "vlan_meta_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33562709 +} +direct_counters { + preamble { + id: 318769096 + name: "FabricIngress.next.simple_counter" + alias: "simple_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33571723 +} +direct_counters { + preamble { + id: 318800532 + name: "FabricIngress.next.hashed_counter" + alias: "hashed_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33608588 +} +direct_counters { + preamble { + id: 318801752 + name: "FabricIngress.next.multicast_counter" + alias: "multicast_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33606828 +} +direct_counters { + preamble { + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" + alias: "counter_int_source" + } + spec { + unit: BOTH + } + direct_table_id: 33612258 +} +direct_counters { + preamble { + id: 318827144 + name: "FabricEgress.egress_next.egress_vlan_counter" + alias: "egress_vlan_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33599342 +} +controller_packet_metadata { + preamble { + id: 67146229 + name: "packet_in" + annotations: "@controller_header(\"packet_in\")" + } + metadata { + id: 1 + name: "ingress_port" + bitwidth: 9 + } + metadata { + id: 2 + name: "_pad" + bitwidth: 7 + } +} +controller_packet_metadata { + preamble { + id: 67121543 + name: "packet_out" + annotations: "@controller_header(\"packet_out\")" + } + metadata { + id: 1 + name: "egress_port" + bitwidth: 9 + } + metadata { + id: 2 + name: "_pad" + bitwidth: 7 + } +} +type_info { +} From e44592f2464452f7432b12d278fed64bd7ceb52f Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Wed, 12 Sep 2018 02:24:47 -0700 Subject: [PATCH 16/19] More robust P4Runtime group handling This patch solves the PENDING_UPDATE and PENDING_ADD_RETRY issue observed on the ONS EU topology. The P4Runtime action profile group handling has been re-implemented to be robust against inconsistencies of the device mirror, which is now periodically synchronized with the device state. Similarly, we implement a routine in the P4RuntimeClient to cleanup unused action profile members. This patch includes also: - Refactor PI handle classes to allow creating handles without the entity instance - Use list instead of collections in P4RuntimeClient methods, as order of updates sent and/or entities received from the device is important Change-Id: I2e7964ce90f43d66680131b47ab52aca32ab55d2 --- .../net/pi/runtime/PiActionGroupHandle.java | 27 +- .../net/pi/runtime/PiActionGroupMember.java | 38 +- .../pi/runtime/PiActionGroupMemberHandle.java | 126 ++++ .../onosproject/net/pi/runtime/PiHandle.java | 17 +- .../net/pi/runtime/PiMeterHandle.java | 48 +- .../runtime/PiMulticastGroupEntryHandle.java | 35 +- .../net/pi/runtime/PiTableEntry.java | 3 +- .../net/pi/runtime/PiTableEntryHandle.java | 49 +- .../pi/runtime/PiActionGroupMemberTest.java | 13 + .../net/pi/runtime/PiActionGroupTest.java | 1 + .../net/pi/impl/PiGroupTranslatorImpl.java | 1 + .../pi/impl/PiGroupTranslatorImplTest.java | 1 + .../DistributedPiTranslationStoreTest.java | 7 +- .../store/serializers/KryoNamespaces.java | 14 +- .../P4RuntimeActionGroupProgrammable.java | 436 ++++++++++++++ .../P4RuntimeFlowRuleProgrammable.java | 14 +- .../p4runtime/P4RuntimeGroupProgrammable.java | 567 ++---------------- .../P4RuntimeMulticastGroupProgrammable.java | 246 ++++++++ .../AbstractDistributedP4RuntimeMirror.java | 58 +- ...tedP4RuntimeActionProfileMemberMirror.java | 50 ++ .../P4RuntimeActionProfileMemberMirror.java | 27 + .../p4runtime/api/P4RuntimeClient.java | 87 ++- .../ctl/ActionProfileGroupEncoder.java | 39 +- .../ctl/ActionProfileMemberEncoder.java | 22 +- .../p4runtime/ctl/CounterEntryCodec.java | 10 +- .../p4runtime/ctl/MeterEntryCodec.java | 10 +- .../p4runtime/ctl/P4RuntimeClientImpl.java | 283 ++++++--- .../p4runtime/ctl/TableEntryEncoder.java | 8 +- .../p4runtime/ctl/P4RuntimeGroupTest.java | 15 +- 29 files changed, 1500 insertions(+), 752 deletions(-) create mode 100644 core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java create mode 100644 drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java create mode 100644 drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java create mode 100644 drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java create mode 100644 drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java index 4c87f1f7ed..6969714f5e 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java @@ -20,6 +20,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import org.onosproject.net.pi.model.PiActionProfileId; /** * Global identifier of a PI action group applied to a device, uniquely defined @@ -28,8 +29,13 @@ import org.onosproject.net.DeviceId; @Beta public final class PiActionGroupHandle extends PiHandle { + private final PiActionProfileId actionProfileId; + private final PiActionGroupId groupId; + private PiActionGroupHandle(DeviceId deviceId, PiActionGroup group) { - super(deviceId, group); + super(deviceId); + actionProfileId = group.actionProfileId(); + groupId = group.id(); } /** @@ -44,11 +50,16 @@ public final class PiActionGroupHandle extends PiHandle { return new PiActionGroupHandle(deviceId, group); } + @Override + public PiEntityType entityType() { + return PiEntityType.GROUP; + } + @Override public int hashCode() { return Objects.hashCode(deviceId(), - piEntity().actionProfileId(), - piEntity().id()); + actionProfileId, + groupId); } @Override @@ -61,17 +72,17 @@ public final class PiActionGroupHandle extends PiHandle { } PiActionGroupHandle that = (PiActionGroupHandle) o; return Objects.equal(deviceId(), that.deviceId()) && - Objects.equal(piEntity().actionProfileId(), - that.piEntity().actionProfileId()) && - Objects.equal(piEntity().id(), that.piEntity().id()); + Objects.equal(actionProfileId, + that.actionProfileId) && + Objects.equal(groupId, that.groupId); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("actionProfileId", piEntity().actionProfileId()) - .add("groupId", piEntity().id()) + .add("actionProfileId", actionProfileId) + .add("groupId", groupId) .toString(); } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java index 1c5ecb3003..690d1186d2 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java @@ -19,6 +19,7 @@ package org.onosproject.net.pi.runtime; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import org.onosproject.net.pi.model.PiActionProfileId; import static com.google.common.base.Preconditions.checkNotNull; @@ -28,11 +29,18 @@ import static com.google.common.base.Preconditions.checkNotNull; @Beta public final class PiActionGroupMember implements PiEntity { + private final PiActionProfileId actionProfileId; private final PiActionGroupMemberId id; private final PiAction action; + // FIXME: in P4Runtime weight is an attribute of the member reference in a + // group. Either remove it from this class or define the containing group + // ID. private final int weight; - private PiActionGroupMember(PiActionGroupMemberId id, PiAction action, int weight) { + private PiActionGroupMember( + PiActionProfileId actionProfileId, PiActionGroupMemberId id, + PiAction action, int weight) { + this.actionProfileId = actionProfileId; this.id = id; this.action = action; this.weight = weight; @@ -47,6 +55,15 @@ public final class PiActionGroupMember implements PiEntity { return id; } + /** + * Returns the identifier of the action profile. + * + * @return action profile identifier + */ + public PiActionProfileId actionProfile() { + return actionProfileId; + } + /** * Returns the action associated to this member. * @@ -80,18 +97,20 @@ public final class PiActionGroupMember implements PiEntity { } PiActionGroupMember that = (PiActionGroupMember) o; return weight == that.weight && + Objects.equal(actionProfileId, that.actionProfileId) && Objects.equal(id, that.id) && Objects.equal(action, that.action); } @Override public int hashCode() { - return Objects.hashCode(id, action, weight); + return Objects.hashCode(actionProfileId, id, action, weight); } @Override public String toString() { return MoreObjects.toStringHelper(this) + .add("actionProfile", actionProfileId) .add("id", id) .add("action", action) .add("weight", weight) @@ -112,6 +131,7 @@ public final class PiActionGroupMember implements PiEntity { */ public static final class Builder { + private PiActionProfileId actionProfileId; private PiActionGroupMemberId id; private PiAction action; private int weight; @@ -120,6 +140,17 @@ public final class PiActionGroupMember implements PiEntity { // Hides constructor. } + /** + * Sets the action profile identifier of this member. + * + * @param actionProfileId action profile identifier + * @return this + */ + public Builder forActionProfile(PiActionProfileId actionProfileId) { + this.actionProfileId = actionProfileId; + return this; + } + /** * Sets the identifier of this member. * @@ -161,9 +192,10 @@ public final class PiActionGroupMember implements PiEntity { * @return action group member */ public PiActionGroupMember build() { + checkNotNull(actionProfileId); checkNotNull(id); checkNotNull(action); - return new PiActionGroupMember(id, action, weight); + return new PiActionGroupMember(actionProfileId, id, action, weight); } } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java new file mode 100644 index 0000000000..9ef8a319c2 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java @@ -0,0 +1,126 @@ +/* + * Copyright 2018-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.base.MoreObjects; +import com.google.common.base.Objects; +import org.onosproject.net.DeviceId; +import org.onosproject.net.pi.model.PiActionProfileId; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Global identifier of a PI action profile group member, uniquely defined by a + * device ID, action profile ID, and member ID. + */ +public final class PiActionGroupMemberHandle extends PiHandle { + + private final PiActionGroupMemberId memberId; + private final PiActionProfileId actionProfileId; + + private PiActionGroupMemberHandle(DeviceId deviceId, + PiActionProfileId actionProfileId, + PiActionGroupMemberId memberId) { + super(deviceId); + this.actionProfileId = actionProfileId; + this.memberId = memberId; + } + + /** + * Creates a new handle for the given device ID, action profile ID, and + * member ID. + * + * @param deviceId device ID + * @param actionProfileId action profile ID + * @param memberId member ID + * @return action profile group member handle + */ + public static PiActionGroupMemberHandle of( + DeviceId deviceId, + PiActionProfileId actionProfileId, + PiActionGroupMemberId memberId) { + return new PiActionGroupMemberHandle( + deviceId, actionProfileId, memberId); + } + + /** + * Creates a new handle for the given device ID, and action profile group + * member instance. + * + * @param deviceId device ID + * @param member member instance + * @return action profile group member handle + */ + public static PiActionGroupMemberHandle of( + DeviceId deviceId, + PiActionGroupMember member) { + checkNotNull(member); + return new PiActionGroupMemberHandle( + deviceId, member.actionProfile(), member.id()); + } + + /** + * Returns the member ID of this handle. + * + * @return member ID + */ + public PiActionGroupMemberId memberId() { + return memberId; + } + + /** + * Returns the action profile ID of this handle. + * + * @return action profile ID + */ + public PiActionProfileId actionProfileId() { + return actionProfileId; + } + + @Override + public PiEntityType entityType() { + return PiEntityType.GROUP_MEMBER; + } + + @Override + public int hashCode() { + return Objects.hashCode(deviceId(), actionProfileId, memberId); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + final PiActionGroupMemberHandle other = (PiActionGroupMemberHandle) obj; + return Objects.equal(this.deviceId(), other.deviceId()) + && Objects.equal(this.actionProfileId, other.actionProfileId) + && Objects.equal(this.memberId, other.memberId); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("deviceId", deviceId()) + .add("actionProfileId", actionProfileId) + .add("memberId", memberId) + .toString(); + } +} diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java index e8e70d10ae..eb74288243 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java @@ -29,11 +29,9 @@ import static com.google.common.base.Preconditions.checkNotNull; public abstract class PiHandle { private final DeviceId deviceId; - private final E piEntity; - protected PiHandle(DeviceId deviceId, E piEntity) { + protected PiHandle(DeviceId deviceId) { this.deviceId = checkNotNull(deviceId); - this.piEntity = checkNotNull(piEntity); } /** @@ -50,18 +48,7 @@ public abstract class PiHandle { * * @return PI entity type */ - public final PiEntityType entityType() { - return piEntity.piEntityType(); - } - - /** - * The entity to which this handle is associated. - * - * @return PI entity - */ - public final E piEntity() { - return piEntity; - } + public abstract PiEntityType entityType(); @Override public abstract int hashCode(); diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java index ad2af9d478..4baa6fa19d 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java @@ -21,33 +21,56 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import static com.google.common.base.Preconditions.checkNotNull; + /** - * Global identifier of a PI meter cell configuration applied to a device, uniquely defined - * by a device ID and meter cell ID. + * Global identifier of a PI meter cell configuration applied to a device, + * uniquely defined by a device ID and meter cell ID. */ @Beta public final class PiMeterHandle extends PiHandle { - private PiMeterHandle(DeviceId deviceId, PiMeterCellConfig meterCellConfig) { - super(deviceId, meterCellConfig); + private final PiMeterCellId cellId; + + private PiMeterHandle(DeviceId deviceId, PiMeterCellId meterCellId) { + super(deviceId); + this.cellId = meterCellId; } /** - * Creates a new handle for the given device ID and PI meter cell configuration. + * Creates a new handle for the given device ID and PI meter cell ID. * - * @param deviceId device ID + * @param deviceId device ID + * @param meterCellId meter cell ID + * @return PI meter handle + */ + public static PiMeterHandle of(DeviceId deviceId, + PiMeterCellId meterCellId) { + return new PiMeterHandle(deviceId, meterCellId); + } + + /** + * Creates a new handle for the given device ID and PI meter cell + * configuration. + * + * @param deviceId device ID * @param meterCellConfig meter config * @return PI meter handle */ public static PiMeterHandle of(DeviceId deviceId, PiMeterCellConfig meterCellConfig) { - return new PiMeterHandle(deviceId, meterCellConfig); + checkNotNull(meterCellConfig); + return new PiMeterHandle(deviceId, meterCellConfig.cellId()); + } + + @Override + public PiEntityType entityType() { + return PiEntityType.METER_CELL_CONFIG; } @Override public int hashCode() { - return Objects.hashCode(deviceId(), - piEntity().cellId()); + return Objects.hashCode(deviceId(), cellId); } @Override @@ -60,15 +83,14 @@ public final class PiMeterHandle extends PiHandle { } PiMeterHandle that = (PiMeterHandle) o; return Objects.equal(deviceId(), that.deviceId()) && - Objects.equal(piEntity().cellId(), - that.piEntity().cellId()); + Objects.equal(cellId, that.cellId); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("meterCellId", piEntity().cellId()) + .add("meterCellId", cellId) .toString(); } -} \ No newline at end of file +} diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java index f9b117026f..65a3f28c79 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java @@ -21,6 +21,8 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import static com.google.common.base.Preconditions.checkNotNull; + /** * Global identifier of a PI multicast group entry applied to the packet * replication engine of a device, uniquely defined by a device ID, and group @@ -29,8 +31,23 @@ import org.onosproject.net.DeviceId; @Beta public final class PiMulticastGroupEntryHandle extends PiHandle { - private PiMulticastGroupEntryHandle(DeviceId deviceId, PiMulticastGroupEntry entry) { - super(deviceId, entry); + private final long groupId; + + private PiMulticastGroupEntryHandle(DeviceId deviceId, long groupId) { + super(deviceId); + this.groupId = groupId; + } + + /** + * Creates a new handle for the given device ID and PI multicast group ID. + * + * @param deviceId device ID + * @param groupId multicast group ID + * @return PI multicast group entry handle + */ + public static PiMulticastGroupEntryHandle of(DeviceId deviceId, + long groupId) { + return new PiMulticastGroupEntryHandle(deviceId, groupId); } /** @@ -43,12 +60,18 @@ public final class PiMulticastGroupEntryHandle extends PiHandle { - private PiTableEntryHandle(DeviceId deviceId, PiTableEntry entry) { - super(deviceId, entry); + private final PiTableId tableId; + private final PiMatchKey matchKey; + + private PiTableEntryHandle(DeviceId deviceId, PiTableId tableId, PiMatchKey matchKey) { + super(deviceId); + this.tableId = tableId; + this.matchKey = matchKey; + } + + /** + * Creates a new handle for the given device ID, PI table ID, and match + * key. + * + * @param deviceId device ID + * @param tableId table ID + * @param matchKey match key + * @return PI table entry handle + */ + public static PiTableEntryHandle of(DeviceId deviceId, PiTableId tableId, PiMatchKey matchKey) { + checkNotNull(tableId); + checkNotNull(matchKey); + return new PiTableEntryHandle(deviceId, tableId, matchKey); } /** @@ -40,14 +63,18 @@ public final class PiTableEntryHandle extends PiHandle { * @return PI table entry handle */ public static PiTableEntryHandle of(DeviceId deviceId, PiTableEntry entry) { - return new PiTableEntryHandle(deviceId, entry); + checkNotNull(entry); + return PiTableEntryHandle.of(deviceId, entry.table(), entry.matchKey()); + } + + @Override + public PiEntityType entityType() { + return PiEntityType.TABLE_ENTRY; } @Override public int hashCode() { - return Objects.hashCode(deviceId(), - piEntity().table(), - piEntity().matchKey()); + return Objects.hashCode(deviceId(), tableId, matchKey); } @Override @@ -60,18 +87,16 @@ public final class PiTableEntryHandle extends PiHandle { } final PiTableEntryHandle other = (PiTableEntryHandle) obj; return Objects.equal(this.deviceId(), other.deviceId()) - && Objects.equal(this.piEntity().table(), - other.piEntity().table()) - && Objects.equal(this.piEntity().matchKey(), - other.piEntity().matchKey()); + && Objects.equal(this.tableId, other.tableId) + && Objects.equal(this.matchKey, other.matchKey); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("tableId", piEntity().table()) - .add("matchKey", piEntity().matchKey()) + .add("tableId", tableId) + .add("matchKey", matchKey) .toString(); } } diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java index 020d575fac..e84d48f662 100644 --- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java +++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java @@ -20,6 +20,7 @@ import com.google.common.testing.EqualsTester; import org.junit.Test; import org.onosproject.net.pi.model.PiActionId; import org.onosproject.net.pi.model.PiActionParamId; +import org.onosproject.net.pi.model.PiActionProfileId; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -34,26 +35,37 @@ import static org.onosproject.net.pi.runtime.PiConstantsTest.MOD_NW_DST; */ public class PiActionGroupMemberTest { + private final PiActionProfileId actionProfileId1 = PiActionProfileId.of("foo"); + private final PiActionProfileId actionProfileId2 = PiActionProfileId.of("bar"); private final PiActionGroupMemberId piActionGroupMemberId = PiActionGroupMemberId.of(10); private final PiAction piAction = PiAction.builder().withId(PiActionId.of(MOD_NW_DST)) .withParameter(new PiActionParam(PiActionParamId.of(DST_ADDR), copyFrom(0x0a010101))) .build(); private final PiActionGroupMember piActionGroupMember1 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) .build(); private final PiActionGroupMember sameAsPiActionGroupMember1 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) .build(); private final PiActionGroupMember piActionGroupMember2 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(20) .build(); + private final PiActionGroupMember piActionGroupMember1ForOtherProfile = PiActionGroupMember.builder() + .forActionProfile(actionProfileId2) + .withId(piActionGroupMemberId) + .withAction(piAction) + .withWeight(10) + .build(); /** * Checks that the PiActionGroupMember class is immutable. @@ -73,6 +85,7 @@ public class PiActionGroupMemberTest { new EqualsTester() .addEqualityGroup(piActionGroupMember1, sameAsPiActionGroupMember1) .addEqualityGroup(piActionGroupMember2) + .addEqualityGroup(piActionGroupMember1ForOtherProfile) .testEquals(); } diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java index bd4bc2cb8d..c3aca5a135 100644 --- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java +++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java @@ -45,6 +45,7 @@ public class PiActionGroupTest { .build(); private final PiActionGroupMember piActionGroupMember = PiActionGroupMember.builder() + .forActionProfile(ACTION_PROF_ID) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java index 70d2dde989..d989571bd8 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java @@ -116,6 +116,7 @@ final class PiGroupTranslatorImpl { } piActionGroupBuilder.addMember(PiActionGroupMember.builder() + .forActionProfile(groupKey.actionProfileId()) .withId(PiActionGroupMemberId.of(memberId)) .withAction((PiAction) tableAction) .withWeight(bucket.weight()) diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java index aeaa553b9d..6c86604410 100644 --- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java @@ -109,6 +109,7 @@ public class PiGroupTranslatorImplTest { .withId(ACT_SET_EGRESS_PORT_WCMP_ID) .withParameter(param).build(); return PiActionGroupMember.builder() + .forActionProfile(ACT_PRF_WCMP_SELECTOR_ID) .withAction(piAction) .withId(PiActionGroupMemberId.of(BASE_MEM_ID + portNum)) .withWeight(DEFAULT_MEMBER_WEIGHT) diff --git a/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java index 2ba52a26df..acfce12f87 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java @@ -45,7 +45,12 @@ public class DistributedPiTranslationStoreTest { }; private static final PiEntity PI_ENTITY = () -> PiEntityType.TABLE_ENTRY; private static final PiHandle PI_HANDLE = - new PiHandle(DeviceId.NONE, PI_ENTITY) { + new PiHandle(DeviceId.NONE) { + @Override + public PiEntityType entityType() { + return PI_ENTITY.piEntityType(); + } + @Override public int hashCode() { return HANDLE_HASH; 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 f57421fba1..0e684fe049 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 @@ -109,10 +109,6 @@ import org.onosproject.net.flow.StatTriggerFlag; import org.onosproject.net.flow.StoredFlowEntry; import org.onosproject.net.flow.TableId; import org.onosproject.net.flow.TableStatisticsEntry; -import org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry; -import org.onosproject.net.flow.oldbatch.FlowRuleBatchEvent; -import org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation; -import org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest; import org.onosproject.net.flow.criteria.ArpHaCriterion; import org.onosproject.net.flow.criteria.ArpOpCriterion; import org.onosproject.net.flow.criteria.ArpPaCriterion; @@ -157,6 +153,10 @@ import org.onosproject.net.flow.instructions.L2ModificationInstruction; import org.onosproject.net.flow.instructions.L3ModificationInstruction; import org.onosproject.net.flow.instructions.L4ModificationInstruction; import org.onosproject.net.flow.instructions.PiInstruction; +import org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry; +import org.onosproject.net.flow.oldbatch.FlowRuleBatchEvent; +import org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation; +import org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest; import org.onosproject.net.flowobjective.DefaultFilteringObjective; import org.onosproject.net.flowobjective.DefaultForwardingObjective; import org.onosproject.net.flowobjective.DefaultNextObjective; @@ -227,6 +227,7 @@ import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupHandle; import org.onosproject.net.pi.runtime.PiActionGroupId; import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; import org.onosproject.net.pi.runtime.PiActionGroupMemberId; import org.onosproject.net.pi.runtime.PiActionParam; import org.onosproject.net.pi.runtime.PiControlMetadata; @@ -242,12 +243,12 @@ import org.onosproject.net.pi.runtime.PiLpmFieldMatch; import org.onosproject.net.pi.runtime.PiMatchKey; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.runtime.PiPacketOperation; -import org.onosproject.net.pi.service.PiPipeconfConfig; import org.onosproject.net.pi.runtime.PiRangeFieldMatch; import org.onosproject.net.pi.runtime.PiTableAction; import org.onosproject.net.pi.runtime.PiTableEntry; -import org.onosproject.net.pi.runtime.PiTernaryFieldMatch; import org.onosproject.net.pi.runtime.PiTableEntryHandle; +import org.onosproject.net.pi.runtime.PiTernaryFieldMatch; +import org.onosproject.net.pi.service.PiPipeconfConfig; import org.onosproject.net.pi.service.PiTranslatable; import org.onosproject.net.pi.service.PiTranslatedEntity; import org.onosproject.net.provider.ProviderId; @@ -687,6 +688,7 @@ public final class KryoNamespaces { PiActionGroupHandle.class, PiActionGroupId.class, PiActionGroupMember.class, + PiActionGroupMemberHandle.class, PiActionGroupMemberId.class, PiActionParam.class, PiControlMetadata.class, diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java new file mode 100644 index 0000000000..5ee965dc33 --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java @@ -0,0 +1,436 @@ +/* + * 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; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.common.util.concurrent.Striped; +import org.onlab.util.SharedExecutors; +import org.onosproject.drivers.p4runtime.mirror.P4RuntimeActionProfileMemberMirror; +import org.onosproject.drivers.p4runtime.mirror.P4RuntimeGroupMirror; +import org.onosproject.drivers.p4runtime.mirror.TimedEntry; +import org.onosproject.net.DeviceId; +import org.onosproject.net.group.DefaultGroup; +import org.onosproject.net.group.DefaultGroupDescription; +import org.onosproject.net.group.Group; +import org.onosproject.net.group.GroupDescription; +import org.onosproject.net.group.GroupOperation; +import org.onosproject.net.group.GroupOperations; +import org.onosproject.net.group.GroupProgrammable; +import org.onosproject.net.group.GroupStore; +import org.onosproject.net.pi.model.PiActionId; +import org.onosproject.net.pi.model.PiActionProfileId; +import org.onosproject.net.pi.model.PiActionProfileModel; +import org.onosproject.net.pi.runtime.PiAction; +import org.onosproject.net.pi.runtime.PiActionGroup; +import org.onosproject.net.pi.runtime.PiActionGroupHandle; +import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; +import org.onosproject.net.pi.runtime.PiActionGroupMemberId; +import org.onosproject.net.pi.service.PiGroupTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; +import org.onosproject.p4runtime.api.P4RuntimeClient; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.MODIFY; + +/** + * Implementation of GroupProgrammable to handle action profile groups in + * P4Runtime. + */ +public class P4RuntimeActionGroupProgrammable + extends AbstractP4RuntimeHandlerBehaviour + implements GroupProgrammable { + + // If true, we avoid querying the device and return what's already known by + // the ONOS store. + private static final String READ_ACTION_GROUPS_FROM_MIRROR = "actionGroupReadFromMirror"; + private static final boolean DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR = false; + + protected GroupStore groupStore; + private P4RuntimeGroupMirror groupMirror; + private P4RuntimeActionProfileMemberMirror memberMirror; + private PiGroupTranslator groupTranslator; + + // Needed to synchronize operations over the same group. + private static final Striped STRIPED_LOCKS = Striped.lock(30); + + @Override + protected boolean setupBehaviour() { + if (!super.setupBehaviour()) { + return false; + } + groupMirror = this.handler().get(P4RuntimeGroupMirror.class); + memberMirror = this.handler().get(P4RuntimeActionProfileMemberMirror.class); + groupStore = handler().get(GroupStore.class); + groupTranslator = piTranslationService.groupTranslator(); + return true; + } + + @Override + public void performGroupOperation(DeviceId deviceId, + GroupOperations groupOps) { + if (!setupBehaviour()) { + return; + } + + groupOps.operations().stream() + .filter(op -> !op.groupType().equals(GroupDescription.Type.ALL)) + .forEach(op -> { + // ONOS-7785 We need app cookie (action profile id) from the group + Group groupOnStore = groupStore.getGroup(deviceId, op.groupId()); + GroupDescription groupDesc = new DefaultGroupDescription( + deviceId, op.groupType(), op.buckets(), groupOnStore.appCookie(), + op.groupId().id(), groupOnStore.appId()); + DefaultGroup groupToApply = new DefaultGroup(op.groupId(), groupDesc); + processGroupOperation(groupToApply, op.opType()); + }); + } + + @Override + public Collection getGroups() { + if (!setupBehaviour()) { + return Collections.emptyList(); + } + return getActionGroups(); + } + + private Collection getActionGroups() { + + if (driverBoolProperty(READ_ACTION_GROUPS_FROM_MIRROR, + DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR)) { + return getActionGroupsFromMirror(); + } + + final Collection actionProfileIds = pipeconf.pipelineModel() + .actionProfiles() + .stream() + .map(PiActionProfileModel::id) + .collect(Collectors.toList()); + final List groupsOnDevice = actionProfileIds.stream() + .flatMap(this::streamGroupsFromDevice) + .collect(Collectors.toList()); + final Set membersOnDevice = actionProfileIds + .stream() + .flatMap(actProfId -> getMembersFromDevice(actProfId) + .stream() + .map(memberId -> PiActionGroupMemberHandle.of( + deviceId, actProfId, memberId))) + .collect(Collectors.toSet()); + + if (groupsOnDevice.isEmpty()) { + return Collections.emptyList(); + } + + // Sync mirrors. + syncGroupMirror(groupsOnDevice); + syncMemberMirror(membersOnDevice); + + final List result = Lists.newArrayList(); + final List inconsistentGroups = Lists.newArrayList(); + final List validGroups = Lists.newArrayList(); + + for (PiActionGroup piGroup : groupsOnDevice) { + final Group pdGroup = forgeGroupEntry(piGroup); + if (pdGroup == null) { + // Entry is on device but unknown to translation service or + // device mirror. Inconsistent. Mark for removal. + inconsistentGroups.add(piGroup); + } else { + validGroups.add(piGroup); + result.add(pdGroup); + } + } + + // Trigger clean up of inconsistent groups and members. This will also + // remove all members that are not used by any group, and update the + // mirror accordingly. + final Set membersToKeep = validGroups.stream() + .flatMap(g -> g.members().stream()) + .map(m -> PiActionGroupMemberHandle.of(deviceId, m)) + .collect(Collectors.toSet()); + final Set inconsistentMembers = Sets.difference( + membersOnDevice, membersToKeep); + SharedExecutors.getSingleThreadExecutor().execute( + () -> cleanUpInconsistentGroupsAndMembers( + inconsistentGroups, inconsistentMembers)); + + return result; + } + + private void syncGroupMirror(Collection groups) { + Map handleMap = Maps.newHashMap(); + groups.forEach(g -> handleMap.put(PiActionGroupHandle.of(deviceId, g), g)); + groupMirror.sync(deviceId, handleMap); + } + + private void syncMemberMirror(Collection memberHandles) { + Map handleMap = Maps.newHashMap(); + memberHandles.forEach(handle -> handleMap.put( + handle, dummyMember(handle.actionProfileId(), handle.memberId()))); + memberMirror.sync(deviceId, handleMap); + } + + private Collection getActionGroupsFromMirror() { + return groupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void cleanUpInconsistentGroupsAndMembers(Collection groupsToRemove, + Collection membersToRemove) { + if (!groupsToRemove.isEmpty()) { + log.warn("Found {} inconsistent action profile groups on {}, removing them...", + groupsToRemove.size(), deviceId); + groupsToRemove.forEach(piGroup -> { + log.debug(piGroup.toString()); + processGroup(piGroup, null, Operation.REMOVE); + }); + } + if (!membersToRemove.isEmpty()) { + log.warn("Found {} inconsistent action profile members on {}, removing them...", + membersToRemove.size(), deviceId); + // FIXME: implement client call to remove members from multiple + // action profiles in one shot. + final ListMultimap + membersByActProfId = ArrayListMultimap.create(); + membersToRemove.forEach(m -> membersByActProfId.put( + m.actionProfileId(), m.memberId())); + membersByActProfId.keySet().forEach(actProfId -> { + List removedMembers = getFutureWithDeadline( + client.removeActionProfileMembers( + actProfId, membersByActProfId.get(actProfId), pipeconf), + "cleaning up action profile members", Collections.emptyList()); + // Update member mirror. + removedMembers.stream() + .map(id -> PiActionGroupMemberHandle.of(deviceId, actProfId, id)) + .forEach(memberMirror::remove); + }); + } + } + + private Stream streamGroupsFromDevice(PiActionProfileId actProfId) { + // TODO: implement P4Runtime client call to read all groups with one call + // Good if pipeline has multiple action profiles. + final Collection groups = getFutureWithDeadline( + client.dumpGroups(actProfId, pipeconf), + "dumping groups", Collections.emptyList()); + return groups.stream(); + } + + private List getMembersFromDevice(PiActionProfileId actProfId) { + // TODO: implement P4Runtime client call to read all members with one call + // Good if pipeline has multiple action profiles. + return getFutureWithDeadline( + client.dumpActionProfileMemberIds(actProfId, pipeconf), + "dumping action profile ids", Collections.emptyList()); + } + + private Group forgeGroupEntry(PiActionGroup piGroup) { + final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); + final Optional> + translatedEntity = groupTranslator.lookup(handle); + final TimedEntry timedEntry = groupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Group handle not found in translation store: {}", handle); + return null; + } + if (!translatedEntity.get().translated().equals(piGroup)) { + log.warn("Group obtained from device {} is different from the one in" + + "translation store: device={}, store={}", + deviceId, piGroup, translatedEntity.get().translated()); + return null; + } + if (timedEntry == null) { + log.warn("Group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); + } + + private Group addedGroup(Group original, long life) { + final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); + forgedGroup.setState(Group.GroupState.ADDED); + forgedGroup.setLife(life); + return forgedGroup; + } + + private void processGroupOperation(Group pdGroup, GroupOperation.Type opType) { + final PiActionGroup piGroup; + try { + piGroup = groupTranslator.translate(pdGroup, pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable to translate group, aborting {} operation: {} [{}]", + opType, e.getMessage(), pdGroup); + return; + } + final Operation operation = opType.equals(GroupOperation.Type.DELETE) + ? Operation.REMOVE : Operation.APPLY; + processGroup(piGroup, pdGroup, operation); + } + + private void processGroup(PiActionGroup groupToApply, + Group pdGroup, + Operation operation) { + final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, groupToApply); + STRIPED_LOCKS.get(handle).lock(); + try { + switch (operation) { + case APPLY: + if (applyGroupWithMembersOrNothing(groupToApply, handle)) { + groupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, groupToApply, handle)); + } + return; + case REMOVE: + if (deleteGroup(groupToApply, handle)) { + groupTranslator.forget(handle); + } + return; + default: + log.error("Unknwon group operation type {}, cannot process group", operation); + break; + } + } finally { + STRIPED_LOCKS.get(handle).unlock(); + } + } + + private boolean applyGroupWithMembersOrNothing(PiActionGroup group, PiActionGroupHandle handle) { + // First apply members, then group, if fails, delete members. + if (!applyAllMembersOrNothing(group.members())) { + return false; + } + if (!applyGroup(group, handle)) { + deleteMembers(group.members()); + return false; + } + return true; + } + + private boolean applyGroup(PiActionGroup group, PiActionGroupHandle handle) { + final P4RuntimeClient.WriteOperationType opType = + groupMirror.get(handle) == null ? INSERT : MODIFY; + final boolean success = getFutureWithDeadline( + client.writeActionGroup(group, opType, pipeconf), + "performing action profile group " + opType, false); + if (success) { + groupMirror.put(handle, group); + } + return success; + } + + private boolean deleteGroup(PiActionGroup group, PiActionGroupHandle handle) { + final boolean success = getFutureWithDeadline( + client.writeActionGroup(group, DELETE, pipeconf), + "performing action profile group " + DELETE, false); + if (success) { + groupMirror.remove(handle); + } + return success; + } + + private boolean applyAllMembersOrNothing(Collection members) { + Collection appliedMembers = applyMembers(members); + if (appliedMembers.size() == members.size()) { + return true; + } else { + deleteMembers(appliedMembers); + return false; + } + } + + private Collection applyMembers( + Collection members) { + return members.stream() + .filter(this::applyMember) + .collect(Collectors.toList()); + } + + private boolean applyMember(PiActionGroupMember member) { + // If exists, modify, otherwise insert + final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of( + deviceId, member); + final P4RuntimeClient.WriteOperationType opType = + memberMirror.get(handle) == null ? INSERT : MODIFY; + final boolean success = getFutureWithDeadline( + client.writeActionGroupMembers(Collections.singletonList(member), + opType, pipeconf), + "performing action profile member " + opType, false); + if (success) { + memberMirror.put(handle, dummyMember(member.actionProfile(), member.id())); + } + return success; + } + + private void deleteMembers(Collection members) { + members.forEach(this::deleteMember); + } + + private void deleteMember(PiActionGroupMember member) { + final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of( + deviceId, member); + final boolean success = getFutureWithDeadline( + client.writeActionGroupMembers(Collections.singletonList(member), + DELETE, pipeconf), + "performing action profile member " + DELETE, false); + if (success) { + memberMirror.remove(handle); + } + } + + // FIXME: this is nasty, we have to rely on a dummy member of the mirror + // because the PiActionGroupMember abstraction is broken, since it includes + // attributes that are not part of a P4Runtime member, e.g. weight. + // We should remove weight from the class, and have client methods that + // return the full PiActionGroupMember, not just the IDs. Also the naming + // "ActionGroupMember" is wrong since it makes believe that members can + // exists only inside a group, which is not true. + private PiActionGroupMember dummyMember( + PiActionProfileId actionProfileId, PiActionGroupMemberId memberId) { + return PiActionGroupMember.builder() + .forActionProfile(actionProfileId) + .withId(memberId) + .withAction(PiAction.builder() + .withId(PiActionId.of("dummy")) + .build()) + .build(); + } + + enum Operation { + APPLY, REMOVE + } +} 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 85a87fe99a..d0acdee80d 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 @@ -140,6 +140,11 @@ public class P4RuntimeFlowRuleProgrammable streamEntries(), streamDefaultEntries()) // Ignore entries from constant tables. .filter(e -> !tableIsConstant(e.table())) + // Device implementation might return duplicate entries. For + // example if reading only default ones is not supported and + // non-default entries are returned, by using distinct() we are + // robust against that possibility. + .distinct() .collect(Collectors.toList()); if (deviceEntries.isEmpty()) { @@ -148,7 +153,6 @@ public class P4RuntimeFlowRuleProgrammable // Synchronize mirror with the device state. syncMirror(deviceEntries); - // Read table direct counters for non default-entries (if any). // TODO: ONOS-7596 read counters with table entries final Map counterCellMap = readEntryCounters(deviceEntries); @@ -229,7 +233,12 @@ public class P4RuntimeFlowRuleProgrammable log.warn("Table entry handle not found in translation store: {}", handle); return null; } - + if (!translatedEntity.get().translated().equals(entry)) { + log.warn("Table entry obtained from device {} is different from " + + "one in in translation store: device={}, store={}", + deviceId, entry, translatedEntity.get().translated()); + return null; + } if (timedEntry == null) { log.warn("Table entry handle not found in device mirror: {}", handle); return null; @@ -460,6 +469,7 @@ public class P4RuntimeFlowRuleProgrammable cellDatas = Collections.emptyList(); } else { Set cellIds = tableEntries.stream() + // Ignore counter for default entry. .filter(e -> !e.isDefaultAction()) .filter(e -> tableHasCounter(e.table())) .map(PiCounterCellId::ofDirect) diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java index f53dca82ca..84678dccd9 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-present Open Networking Foundation + * Copyright 2018-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. @@ -18,545 +18,92 @@ package org.onosproject.drivers.p4runtime; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import com.google.common.util.concurrent.Striped; -import org.onlab.util.SharedExecutors; -import org.onosproject.drivers.p4runtime.mirror.P4RuntimeGroupMirror; -import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMulticastGroupMirror; -import org.onosproject.drivers.p4runtime.mirror.TimedEntry; import org.onosproject.net.DeviceId; -import org.onosproject.net.group.DefaultGroup; -import org.onosproject.net.group.DefaultGroupDescription; +import org.onosproject.net.driver.AbstractHandlerBehaviour; import org.onosproject.net.group.Group; import org.onosproject.net.group.GroupDescription; import org.onosproject.net.group.GroupOperation; import org.onosproject.net.group.GroupOperations; import org.onosproject.net.group.GroupProgrammable; -import org.onosproject.net.group.GroupStore; -import org.onosproject.net.pi.model.PiActionProfileId; -import org.onosproject.net.pi.model.PiActionProfileModel; -import org.onosproject.net.pi.runtime.PiActionGroup; -import org.onosproject.net.pi.runtime.PiActionGroupHandle; -import org.onosproject.net.pi.runtime.PiActionGroupMember; -import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; -import org.onosproject.net.pi.runtime.PiMulticastGroupEntryHandle; -import org.onosproject.net.pi.service.PiGroupTranslator; -import org.onosproject.net.pi.service.PiMulticastGroupTranslator; -import org.onosproject.net.pi.service.PiTranslatedEntity; -import org.onosproject.net.pi.service.PiTranslationException; -import org.onosproject.p4runtime.api.P4RuntimeClient; import org.slf4j.Logger; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.locks.Lock; -import java.util.stream.Collectors; -import java.util.stream.Stream; import static com.google.common.base.Preconditions.checkArgument; -import static java.lang.String.format; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.MODIFY; import static org.slf4j.LoggerFactory.getLogger; /** - * Implementation of the group programmable behaviour for P4Runtime. - *

- * This implementation distinguishes between ALL groups, and other types. ALL - * groups are handled via PRE multicast group programming, while other types are - * handled via action profile group programming. + * Implementation of GroupProgrammable for P4Runtime devices that uses two + * different implementation of the same behavior to handle both action profile + * groups and multicast groups. */ public class P4RuntimeGroupProgrammable - extends AbstractP4RuntimeHandlerBehaviour - implements GroupProgrammable { + extends AbstractHandlerBehaviour implements GroupProgrammable { - private static final String ACT_GRP_MEMS_STR = "action group members"; - private static final String DELETE_STR = "delete"; - private static final String ACT_GRP_STR = "action group"; - private static final String INSERT_STR = "insert"; - private static final String MODIFY_STR = "modify"; + private final Logger log = getLogger(this.getClass()); - private static final Logger log = getLogger(P4RuntimeGroupProgrammable.class); - - // If true, we ignore re-installing groups that are already known in the - // device mirror. - private static final String CHECK_MIRROR_BEFORE_UPDATE = "checkMirrorBeforeUpdate"; - private static final boolean DEFAULT_CHECK_MIRROR_BEFORE_UPDATE = true; - - // If true, we avoid querying the device and return what's already known by - // the ONOS store. - private static final String READ_ACTION_GROUPS_FROM_MIRROR = "actionGroupReadFromMirror"; - private static final boolean DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR = false; - - protected GroupStore groupStore; - private P4RuntimeGroupMirror groupMirror; - private PiGroupTranslator groupTranslator; - private P4RuntimeMulticastGroupMirror mcGroupMirror; - private PiMulticastGroupTranslator mcGroupTranslator; - - // Needed to synchronize operations over the same group. - private static final Striped STRIPED_LOCKS = Striped.lock(30); - - @Override - protected boolean setupBehaviour() { - if (!super.setupBehaviour()) { - return false; + private void doPerformGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + // TODO: fix GroupProgrammable API, passing the device ID is ambiguous + checkArgument(deviceId.equals(data().deviceId()), + "passed deviceId must be the same assigned to this behavior"); + final List actionGroups = Lists.newArrayList(); + final List multicastGroups = Lists.newArrayList(); + groupOps.operations().forEach(op -> { + if (op.groupType().equals(GroupDescription.Type.ALL)) { + multicastGroups.add(op); + } else { + actionGroups.add(op); + } + }); + if (!actionGroups.isEmpty()) { + actionProgrammable().performGroupOperation( + deviceId, new GroupOperations(actionGroups)); } - groupMirror = this.handler().get(P4RuntimeGroupMirror.class); - mcGroupMirror = this.handler().get(P4RuntimeMulticastGroupMirror.class); - groupStore = handler().get(GroupStore.class); - groupTranslator = piTranslationService.groupTranslator(); - mcGroupTranslator = piTranslationService.multicastGroupTranslator(); - return true; + if (!multicastGroups.isEmpty()) { + multicastProgrammable().performGroupOperation( + deviceId, new GroupOperations(multicastGroups)); + } + } + + private Collection doGetGroups() { + return new ImmutableList.Builder() + .addAll(actionProgrammable().getGroups()) + .addAll(multicastProgrammable().getGroups()) + .build(); + } + + private P4RuntimeActionGroupProgrammable actionProgrammable() { + P4RuntimeActionGroupProgrammable prog = new P4RuntimeActionGroupProgrammable(); + prog.setData(data()); + prog.setHandler(handler()); + return prog; + } + + private P4RuntimeMulticastGroupProgrammable multicastProgrammable() { + P4RuntimeMulticastGroupProgrammable prog = new P4RuntimeMulticastGroupProgrammable(); + prog.setData(data()); + prog.setHandler(handler()); + return prog; } @Override - public void performGroupOperation(DeviceId deviceId, - GroupOperations groupOps) { - if (!setupBehaviour()) { - return; + public void performGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + try { + doPerformGroupOperation(deviceId, groupOps); + } catch (Throwable ex) { + log.error("Unhandled exception on performGroupOperation", ex); } - - // TODO: fix GroupProgrammable API, passing the device ID is ambiguous - checkArgument(deviceId.equals(this.deviceId), - "passed deviceId must be the same assigned to this behavior"); - - groupOps.operations().forEach(op -> { - // ONOS-7785 We need app cookie (action profile id) from the group - Group groupOnStore = groupStore.getGroup(deviceId, op.groupId()); - GroupDescription groupDesc = new DefaultGroupDescription(deviceId, - op.groupType(), - op.buckets(), - groupOnStore.appCookie(), - op.groupId().id(), - groupOnStore.appId()); - DefaultGroup groupToApply = new DefaultGroup(op.groupId(), groupDesc); - if (op.groupType().equals(GroupDescription.Type.ALL)) { - processMcGroupOp(groupToApply, op.opType()); - } else { - - processActionGroupOp(groupToApply, op.opType()); - } - }); } @Override public Collection getGroups() { - if (!setupBehaviour()) { + try { + return doGetGroups(); + } catch (Throwable ex) { + log.error("Unhandled exception on getGroups", ex); return Collections.emptyList(); } - return new ImmutableList.Builder() - .addAll(getActionGroups()) - .addAll(getMcGroups()).build(); - } - - private Collection getActionGroups() { - - if (driverBoolProperty(READ_ACTION_GROUPS_FROM_MIRROR, - DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR)) { - return getActionGroupsFromMirror(); - } - - final Collection piGroups = pipeconf.pipelineModel() - .actionProfiles() - .stream() - .map(PiActionProfileModel::id) - .flatMap(this::streamPiGroupsFromDevice) - .collect(Collectors.toList()); - - if (piGroups.isEmpty()) { - return Collections.emptyList(); - } - - final List result = Lists.newArrayList(); - final List inconsistentGroups = Lists.newArrayList(); - - for (PiActionGroup piGroupOnDevice : piGroups) { - final Group group = forgeGroupEntry(piGroupOnDevice); - if (group == null) { - // Entry is on device but unknown to translation service or - // device mirror. Inconsistent. Mark for removal. - inconsistentGroups.add(piGroupOnDevice); - } else { - result.add(group); - } - } - // Trigger clean up of inconsistent entries (is any). - // TODO: make this behaviour configurable, in some cases it's fine for - // the device to have groups that were not installed by us. - if (!inconsistentGroups.isEmpty()) { - SharedExecutors.getSingleThreadExecutor().execute( - () -> cleanUpInconsistentGroups(inconsistentGroups)); - } - return result; - } - - private Collection getActionGroupsFromMirror() { - return groupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeGroupEntry) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - private void cleanUpInconsistentGroups(Collection piGroups) { - log.warn("Found {} inconsistent groups on {}, removing them...", - piGroups.size(), deviceId); - piGroups.forEach(piGroup -> { - log.debug(piGroup.toString()); - // Per-piGroup lock. - final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - STRIPED_LOCKS.get(handle).lock(); - try { - processActionGroup(handle, piGroup, null, null, - GroupOperation.Type.DELETE); - } finally { - STRIPED_LOCKS.get(handle).unlock(); - } - }); - } - - private Collection getMcGroups() { - // TODO: missing support for reading multicast groups is ready in PI/Stratum. - return getMcGroupsFromMirror(); - } - - private Collection getMcGroupsFromMirror() { - return mcGroupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeMcGroupEntry) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - private void processActionGroupOp(Group pdGroup, GroupOperation.Type opType) { - final PiActionGroup piGroup; - try { - piGroup = groupTranslator.translate(pdGroup, pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable to translate group, aborting {} operation: {} [{}]", - opType, e.getMessage(), pdGroup); - return; - } - final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - final PiActionGroup groupOnDevice = groupMirror.get(handle) == null - ? null : groupMirror.get(handle).entry(); - // Per-piGroup lock. - final Lock lock = STRIPED_LOCKS.get(handle); - lock.lock(); - try { - processActionGroup(handle, piGroup, - groupOnDevice, pdGroup, opType); - } finally { - lock.unlock(); - } - } - - private void processMcGroupOp(Group pdGroup, GroupOperation.Type opType) { - final PiMulticastGroupEntry mcGroup; - try { - mcGroup = mcGroupTranslator.translate(pdGroup, pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable to translate multicast group, aborting {} operation: {} [{}]", - opType, e.getMessage(), pdGroup); - return; - } - final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( - deviceId, mcGroup); - final PiMulticastGroupEntry groupOnDevice = mcGroupMirror.get(handle) == null - ? null - : mcGroupMirror.get(handle).entry(); - final Lock lock = STRIPED_LOCKS.get(handle); - lock.lock(); - try { - processMcGroup(handle, mcGroup, - groupOnDevice, pdGroup, opType); - } finally { - lock.unlock(); - } - } - - private void processActionGroup(PiActionGroupHandle handle, - PiActionGroup groupToApply, - PiActionGroup groupOnDevice, - Group pdGroup, GroupOperation.Type operationType) { - switch (operationType) { - case ADD: - if (groupOnDevice != null) { - log.warn("Requested to ADD group {} on {}, but a group " + - "with the same ID already exists, will " + - "MODIFY instead", - groupToApply.id(), deviceId); - log.debug("To apply: {}", groupToApply); - log.debug("On device: {}", groupOnDevice); - processActionGroup(handle, groupToApply, groupOnDevice, - pdGroup, GroupOperation.Type.MODIFY); - return; - } - if (writeGroupToDevice(groupToApply)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); - } - return; - case MODIFY: - if (groupOnDevice == null) { - log.warn("Requested to MODIFY group {} on {}, but no " + - "such group exists on the device, " + - "will ADD instead", - groupToApply.id(), deviceId); - processActionGroup(handle, groupToApply, null, - pdGroup, GroupOperation.Type.ADD); - return; - } - if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, - DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - && groupOnDevice.equals(groupToApply)) { - // Group on device has the same members, ignore operation. - return; - } - if (modifyGroupFromDevice(groupToApply, groupOnDevice)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); - } - return; - case DELETE: - if (deleteGroupFromDevice(groupToApply)) { - groupMirror.remove(handle); - groupTranslator.forget(handle); - } - break; - default: - log.error("Unknwon group operation type {}, cannot process group", operationType); - break; - } - } - - private void processMcGroup(PiMulticastGroupEntryHandle handle, - PiMulticastGroupEntry groupToApply, - PiMulticastGroupEntry groupOnDevice, - Group pdGroup, GroupOperation.Type opType) { - switch (opType) { - case ADD: - robustMcGroupAdd(handle, groupToApply, pdGroup); - return; - case MODIFY: - // Since reading multicast groups is not supported yet on - // PI/Stratum, we cannot trust groupOnDevic) as we don't have a - // mechanism to enforce consistency of the mirror with the - // device state. - // if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, - // DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - // && p4OpType == MODIFY - // && groupOnDevice != null - // && groupOnDevice.equals(groupToApply)) { - // // Ignore. - // return; - // } - robustMcGroupModify(handle, groupToApply, pdGroup); - return; - case DELETE: - mcGroupApply(handle, groupToApply, pdGroup, DELETE); - return; - default: - log.error("Unknown group operation type {}, " + - "cannot process multicast group", opType); - } - } - - private boolean writeMcGroupOnDevice(PiMulticastGroupEntry group, P4RuntimeClient.WriteOperationType opType) { - return getFutureWithDeadline( - client.writePreMulticastGroupEntries( - Collections.singleton(group), opType), - "performing multicast group " + opType, false); - } - - private boolean mcGroupApply(PiMulticastGroupEntryHandle handle, - PiMulticastGroupEntry piGroup, - Group pdGroup, - P4RuntimeClient.WriteOperationType opType) { - switch (opType) { - case DELETE: - if (writeMcGroupOnDevice(piGroup, DELETE)) { - mcGroupMirror.remove(handle); - mcGroupTranslator.forget(handle); - return true; - } else { - return false; - } - case INSERT: - case MODIFY: - if (writeMcGroupOnDevice(piGroup, opType)) { - mcGroupMirror.put(handle, piGroup); - mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, piGroup, handle)); - return true; - } else { - return false; - } - default: - log.warn("Unknown operation type {}, cannot apply group", opType); - return false; - } - } - - private void robustMcGroupAdd(PiMulticastGroupEntryHandle handle, - PiMulticastGroupEntry piGroup, - Group pdGroup) { - if (mcGroupApply(handle, piGroup, pdGroup, INSERT)) { - return; - } - // Try to delete (perhaps it already exists) and re-add... - mcGroupApply(handle, piGroup, pdGroup, DELETE); - mcGroupApply(handle, piGroup, pdGroup, INSERT); - } - - private void robustMcGroupModify(PiMulticastGroupEntryHandle handle, - PiMulticastGroupEntry piGroup, - Group pdGroup) { - if (mcGroupApply(handle, piGroup, pdGroup, MODIFY)) { - return; - } - // Not sure for which reason it cannot be modified, so try to delete and insert instead... - mcGroupApply(handle, piGroup, pdGroup, DELETE); - mcGroupApply(handle, piGroup, pdGroup, INSERT); - } - - private boolean modifyGroupFromDevice(PiActionGroup groupToApply, PiActionGroup groupOnDevice) { - PiActionProfileId groupProfileId = groupToApply.actionProfileId(); - Collection membersToRemove = Sets.newHashSet(groupOnDevice.members()); - membersToRemove.removeAll(groupToApply.members()); - Collection membersToAdd = Sets.newHashSet(groupToApply.members()); - membersToAdd.removeAll(groupOnDevice.members()); - - if (!membersToAdd.isEmpty() && - !completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, INSERT, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR)) { - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - if (!completeFuture(client.writeActionGroup(groupToApply, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR)) { - // recover group information - completeFuture(client.writeActionGroup(groupOnDevice, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR); - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - if (!membersToRemove.isEmpty() && - !completeFuture(client.writeActionGroupMembers(groupProfileId, membersToRemove, DELETE, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR)) { - // add what we removed - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToRemove, INSERT, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR); - // recover group information - completeFuture(client.writeActionGroup(groupOnDevice, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR); - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - return true; - } - - private boolean writeGroupToDevice(PiActionGroup groupToApply) { - // First insert members, then group. - // The operation is deemed successful if both operations are successful. - // FIXME: add transactional semantics, i.e. remove members if group fails. - final boolean membersSuccess = completeFuture( - client.writeActionGroupMembers(groupToApply.actionProfileId(), - groupToApply.members(), - INSERT, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return membersSuccess && completeFuture( - client.writeActionGroup(groupToApply, INSERT, pipeconf), - ACT_GRP_STR, INSERT_STR); - } - - private boolean deleteGroupFromDevice(PiActionGroup piActionGroup) { - // First delete group, then members. - // The operation is deemed successful if both operations are successful. - final boolean groupSuccess = completeFuture( - client.writeActionGroup(piActionGroup, DELETE, pipeconf), - ACT_GRP_STR, DELETE_STR); - return groupSuccess && completeFuture( - client.writeActionGroupMembers(piActionGroup.actionProfileId(), - piActionGroup.members(), - DELETE, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR); - } - - private boolean completeFuture(CompletableFuture completableFuture, - String topic, String action) { - return getFutureWithDeadline( - completableFuture, format("performing %s %s", action, topic), false); - } - - private Stream streamPiGroupsFromDevice(PiActionProfileId actProfId) { - // Read PI groups and return original PD one. - // TODO: implement P4Runtime client call to read all groups with one call - // Good is pipeline has multiple action profiles. - final Collection groups = getFutureWithDeadline( - client.dumpGroups(actProfId, pipeconf), - "dumping groups", Collections.emptyList()); - return groups.stream(); - } - - private Group forgeGroupEntry(PiActionGroup piGroup) { - final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - final Optional> - translatedEntity = groupTranslator.lookup(handle); - final TimedEntry timedEntry = groupMirror.get(handle); - // Is entry consistent with our state? - if (!translatedEntity.isPresent()) { - log.warn("Group handle not found in translation store: {}", handle); - return null; - } - if (timedEntry == null) { - // Don't bother logging more than debug, most probably it's the EC - // map backing the store that has not received all the updates yet. - log.debug("Group handle not found in device mirror: {}", handle); - return null; - } - return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); - } - - private Group forgeMcGroupEntry(PiMulticastGroupEntry mcGroup) { - final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( - deviceId, mcGroup); - final Optional> - translatedEntity = mcGroupTranslator.lookup(handle); - final TimedEntry timedEntry = mcGroupMirror.get(handle); - // Is entry consistent with our state? - if (!translatedEntity.isPresent()) { - log.warn("Multicast group handle not found in translation store: {}", handle); - return null; - } - if (timedEntry == null) { - log.warn("Multicast group handle not found in device mirror: {}", handle); - return null; - } - return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); - } - - private Group addedGroup(Group original, long life) { - final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); - forgedGroup.setState(Group.GroupState.ADDED); - forgedGroup.setLife(life); - return forgedGroup; } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java new file mode 100644 index 0000000000..a5c353897e --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java @@ -0,0 +1,246 @@ +/* + * Copyright 2018-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; + +import com.google.common.collect.ImmutableList; +import com.google.common.util.concurrent.Striped; +import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMulticastGroupMirror; +import org.onosproject.drivers.p4runtime.mirror.TimedEntry; +import org.onosproject.net.DeviceId; +import org.onosproject.net.group.DefaultGroup; +import org.onosproject.net.group.Group; +import org.onosproject.net.group.GroupDescription; +import org.onosproject.net.group.GroupOperation; +import org.onosproject.net.group.GroupOperations; +import org.onosproject.net.group.GroupProgrammable; +import org.onosproject.net.group.GroupStore; +import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; +import org.onosproject.net.pi.runtime.PiMulticastGroupEntryHandle; +import org.onosproject.net.pi.service.PiMulticastGroupTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; +import org.onosproject.p4runtime.api.P4RuntimeClient; + +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; + +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.MODIFY; + +/** + * Implementation of GroupProgrammable to handle multicast groups in P4Runtime. + */ +public class P4RuntimeMulticastGroupProgrammable + extends AbstractP4RuntimeHandlerBehaviour implements GroupProgrammable { + + // Needed to synchronize operations over the same group. + private static final Striped STRIPED_LOCKS = Striped.lock(30); + + private GroupStore groupStore; + private P4RuntimeMulticastGroupMirror mcGroupMirror; + private PiMulticastGroupTranslator mcGroupTranslator; + + @Override + protected boolean setupBehaviour() { + if (!super.setupBehaviour()) { + return false; + } + mcGroupMirror = this.handler().get(P4RuntimeMulticastGroupMirror.class); + groupStore = handler().get(GroupStore.class); + mcGroupTranslator = piTranslationService.multicastGroupTranslator(); + return true; + } + + @Override + public void performGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + if (!setupBehaviour()) { + return; + } + groupOps.operations().stream() + .filter(op -> op.groupType().equals(GroupDescription.Type.ALL)) + .forEach(op -> { + final Group group = groupStore.getGroup(deviceId, op.groupId()); + processMcGroupOp(group, op.opType()); + }); + } + + @Override + public Collection getGroups() { + if (!setupBehaviour()) { + return Collections.emptyList(); + } + return ImmutableList.copyOf(getMcGroups()); + } + + private Collection getMcGroups() { + // TODO: missing support for reading multicast groups is ready in PI/Stratum. + return getMcGroupsFromMirror(); + } + + private Collection getMcGroupsFromMirror() { + return mcGroupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeMcGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void processMcGroupOp(Group pdGroup, GroupOperation.Type opType) { + final PiMulticastGroupEntry mcGroup; + try { + mcGroup = mcGroupTranslator.translate(pdGroup, pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable to translate multicast group, aborting {} operation: {} [{}]", + opType, e.getMessage(), pdGroup); + return; + } + final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( + deviceId, mcGroup); + final PiMulticastGroupEntry groupOnDevice = mcGroupMirror.get(handle) == null + ? null + : mcGroupMirror.get(handle).entry(); + final Lock lock = STRIPED_LOCKS.get(handle); + lock.lock(); + try { + processMcGroup(handle, mcGroup, + groupOnDevice, pdGroup, opType); + } finally { + lock.unlock(); + } + } + + private void processMcGroup(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry groupToApply, + PiMulticastGroupEntry groupOnDevice, + Group pdGroup, GroupOperation.Type opType) { + switch (opType) { + case ADD: + robustMcGroupAdd(handle, groupToApply, pdGroup); + return; + case MODIFY: + // Since reading multicast groups is not supported yet on + // PI/Stratum, we cannot trust groupOnDevic) as we don't have a + // mechanism to enforce consistency of the mirror with the + // device state. + // if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, + // DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) + // && p4OpType == MODIFY + // && groupOnDevice != null + // && groupOnDevice.equals(groupToApply)) { + // // Ignore. + // return; + // } + robustMcGroupModify(handle, groupToApply, pdGroup); + return; + case DELETE: + mcGroupApply(handle, groupToApply, pdGroup, DELETE); + return; + default: + log.error("Unknown group operation type {}, " + + "cannot process multicast group", opType); + } + } + + private boolean writeMcGroupOnDevice(PiMulticastGroupEntry group, P4RuntimeClient.WriteOperationType opType) { + return getFutureWithDeadline( + client.writePreMulticastGroupEntries( + Collections.singletonList(group), opType), + "performing multicast group " + opType, false); + } + + private boolean mcGroupApply(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup, + P4RuntimeClient.WriteOperationType opType) { + switch (opType) { + case DELETE: + if (writeMcGroupOnDevice(piGroup, DELETE)) { + mcGroupMirror.remove(handle); + mcGroupTranslator.forget(handle); + return true; + } else { + return false; + } + case INSERT: + case MODIFY: + if (writeMcGroupOnDevice(piGroup, opType)) { + mcGroupMirror.put(handle, piGroup); + mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, piGroup, handle)); + return true; + } else { + return false; + } + default: + log.warn("Unknown operation type {}, cannot apply group", opType); + return false; + } + } + + private void robustMcGroupAdd(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, INSERT)) { + return; + } + // Try to delete (perhaps it already exists) and re-add... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + + private void robustMcGroupModify(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, MODIFY)) { + return; + } + // Not sure for which reason it cannot be modified, so try to delete and insert instead... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + + private Group forgeMcGroupEntry(PiMulticastGroupEntry mcGroup) { + final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( + deviceId, mcGroup); + final Optional> + translatedEntity = mcGroupTranslator.lookup(handle); + final TimedEntry timedEntry = mcGroupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Multicast group handle not found in translation store: {}", handle); + return null; + } + if (timedEntry == null) { + log.warn("Multicast group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); + } + + private Group addedGroup(Group original, long life) { + final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); + forgedGroup.setState(Group.GroupState.ADDED); + forgedGroup.setLife(life); + return forgedGroup; + } + +} 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 c5eb4c0d10..9230547508 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 @@ -17,6 +17,7 @@ package org.onosproject.drivers.p4runtime.mirror; import com.google.common.annotations.Beta; +import com.google.common.collect.Maps; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; @@ -136,41 +137,54 @@ public abstract class AbstractDistributedP4RuntimeMirror @Override public void sync(DeviceId deviceId, Map deviceState) { checkNotNull(deviceId); - Set>> localEntries = getEntriesForDevice(deviceId); + final Map localState = getMirrorMapForDevice(deviceId); + final AtomicInteger removeCount = new AtomicInteger(0); final AtomicInteger updateCount = new AtomicInteger(0); - localEntries.forEach(e -> { - final H handle = e.getKey(); - final E storedValue = e.getValue().entry(); - if (!deviceState.containsKey(handle)) { - log.debug("Removing mirror entry for {}: {}", deviceId, storedValue); + final AtomicInteger addCount = new AtomicInteger(0); + // Add missing entries. + deviceState.keySet().stream() + .filter(deviceHandle -> !localState.containsKey(deviceHandle)) + .forEach(deviceHandle -> { + final E entryToAdd = deviceState.get(deviceHandle); + log.debug("Adding mirror entry for {}: {}", + deviceId, entryToAdd); + put(deviceHandle, entryToAdd); + addCount.incrementAndGet(); + }); + // Update or remove local entries. + localState.keySet().forEach(localHandle -> { + final E localEntry = localState.get(localHandle); + final E deviceEntry = deviceState.get(localHandle); + if (deviceEntry == null) { + log.debug("Removing mirror entry for {}: {}", deviceId, localEntry); + remove(localHandle); removeCount.incrementAndGet(); - } else { - final E deviceValue = deviceState.get(handle); - if (!deviceValue.equals(storedValue)) { - log.debug("Updating mirror entry for {}: {}-->{}", - deviceId, storedValue, deviceValue); - put(handle, deviceValue); - updateCount.incrementAndGet(); - } + } else if (!deviceEntry.equals(localEntry)) { + log.debug("Updating mirror entry for {}: {}-->{}", + deviceId, localEntry, deviceEntry); + put(localHandle, deviceEntry); + updateCount.incrementAndGet(); } }); - if (removeCount.get() + updateCount.get() > 0) { - log.info("Synchronized mirror entries for {}: {} removed, {} updated", - deviceId, removeCount, updateCount); + if (removeCount.get() + updateCount.get() + addCount.get() > 0) { + log.info("Synchronized mirror entries for {}: {} removed, {} updated, {} added", + deviceId, removeCount, updateCount, addCount); } } - private Collection getHandlesForDevice(DeviceId deviceId) { + private Set getHandlesForDevice(DeviceId deviceId) { return mirrorMap.keySet().stream() .filter(h -> h.deviceId().equals(deviceId)) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); } - private Set>> getEntriesForDevice(DeviceId deviceId) { - return mirrorMap.entrySet().stream() + private Map getMirrorMapForDevice(DeviceId deviceId) { + final Map deviceMap = Maps.newHashMap(); + mirrorMap.entrySet().stream() .filter(e -> e.getKey().deviceId().equals(deviceId)) - .collect(Collectors.toSet()); + .forEach(e -> deviceMap.put(e.getKey(), e.getValue().entry())); + return deviceMap; } private void removeAll(DeviceId deviceId) { 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 new file mode 100644 index 0000000000..83edba465a --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018-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.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Service; +import org.onlab.util.KryoNamespace; +import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; +import org.onosproject.store.serializers.KryoNamespaces; + +/** + * Distributed implementation of a P4Runtime action profile member mirror. + */ +@Component(immediate = true) +@Service +public class DistributedP4RuntimeActionProfileMemberMirror + extends AbstractDistributedP4RuntimeMirror + + implements P4RuntimeActionProfileMemberMirror { + + private static final String DIST_MAP_NAME = "onos-p4runtime-act-prof-member-mirror"; + + @Override + String mapName() { + return DIST_MAP_NAME; + } + + @Override + KryoNamespace storeSerializer() { + return KryoNamespace.newBuilder() + .register(KryoNamespaces.API) + .register(TimedEntry.class) + .build(); + } +} diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java new file mode 100644 index 0000000000..8ab1fa09bf --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java @@ -0,0 +1,27 @@ +/* + * Copyright 2018-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.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; + +/** + * Mirror of action profile members installed on a P4Runtime device. + */ +public interface P4RuntimeActionProfileMemberMirror + extends P4RuntimeMirror { +} diff --git a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java index 562f0ae335..8c1d7d9af0 100644 --- a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java +++ b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java @@ -24,6 +24,7 @@ import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberId; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; import org.onosproject.net.pi.runtime.PiMeterCellConfig; @@ -33,7 +34,7 @@ import org.onosproject.net.pi.runtime.PiPacketOperation; import org.onosproject.net.pi.runtime.PiTableEntry; import java.nio.ByteBuffer; -import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -132,7 +133,7 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise. */ CompletableFuture writeTableEntries( - Collection entries, WriteOperationType opType, + List entries, WriteOperationType opType, PiPipeconf pipeconf); /** @@ -141,21 +142,22 @@ public interface P4RuntimeClient { * entries will be returned, otherwise non-default entries will be * considered. * - * @param tableIds table identifiers - * @param defaultEntries true to read default entries, false for non-default - * @param pipeconf pipeconf currently deployed on the device - * @return completable future of a collection of table entries + * @param tableIds table identifiers + * @param defaultEntries true to read default entries, false for + * non-default + * @param pipeconf pipeconf currently deployed on the device + * @return completable future of a list of table entries */ - CompletableFuture> dumpTables( + CompletableFuture> dumpTables( Set tableIds, boolean defaultEntries, PiPipeconf pipeconf); /** * Dumps entries from all tables, for the given pipeconf. * * @param pipeconf pipeconf currently deployed on the device - * @return completable future of a collection of table entries + * @return completable future of a list of table entries */ - CompletableFuture> dumpAllTables(PiPipeconf pipeconf); + CompletableFuture> dumpAllTables(PiPipeconf pipeconf); /** * Executes a packet-out operation for the given pipeconf. @@ -174,34 +176,33 @@ public interface P4RuntimeClient { * * @param counterIds counter identifiers * @param pipeconf pipeconf - * @return collection of counter data + * @return list of counter data */ - CompletableFuture> readAllCounterCells( + CompletableFuture> readAllCounterCells( Set counterIds, PiPipeconf pipeconf); /** - * Returns a collection of counter data corresponding to the given set of - * counter cell identifiers, for the given pipeconf. + * Returns a list of counter data corresponding to the given set of counter + * cell identifiers, for the given pipeconf. * * @param cellIds set of counter cell identifiers * @param pipeconf pipeconf - * @return collection of counter data + * @return list of counter data */ - CompletableFuture> readCounterCells( + CompletableFuture> readCounterCells( Set cellIds, PiPipeconf pipeconf); /** * Performs the given write operation for the given action group members and * pipeconf. * - * @param profileId action group profile ID - * @param members action group members - * @param opType write operation type - * @param pipeconf the pipeconf currently deployed on the device + * @param members action group members + * @param opType write operation type + * @param pipeconf the pipeconf currently deployed on the device * @return true if the operation was successful, false otherwise */ CompletableFuture writeActionGroupMembers( - PiActionProfileId profileId, Collection members, + List members, WriteOperationType opType, PiPipeconf pipeconf); /** @@ -221,31 +222,55 @@ public interface P4RuntimeClient { * * @param actionProfileId the action profile id * @param pipeconf the pipeconf currently deployed on the device - * @return completable future of a collection of groups + * @return completable future of a list of groups */ - CompletableFuture> dumpGroups( + CompletableFuture> dumpGroups( PiActionProfileId actionProfileId, PiPipeconf pipeconf); + /** + * Dumps all action profile member IDs for a given action profile. + * + * @param actionProfileId action profile ID + * @param pipeconf pipeconf + * @return future of list of action profile member ID + */ + CompletableFuture> dumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf); + + /** + * Removes the given members from the given action profile. Returns the list + * of successfully removed members. + * + * @param actionProfileId action profile ID + * @param memberIds member IDs + * @param pipeconf pipeconf + * @return list of member IDs that were successfully removed from the device + */ + CompletableFuture> removeActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf); + /** * Returns the configuration of all meter cells for the given set of meter * identifiers and pipeconf. * * @param meterIds meter identifiers * @param pipeconf pipeconf - * @return collection of meter configurations + * @return list of meter configurations */ - CompletableFuture> readAllMeterCells( + CompletableFuture> readAllMeterCells( Set meterIds, PiPipeconf pipeconf); /** - * Returns a collection of meter configurations corresponding to the given - * set of meter cell identifiers, for the given pipeconf. + * Returns a list of meter configurations corresponding to the given set of + * meter cell identifiers, for the given pipeconf. * * @param cellIds set of meter cell identifiers * @param pipeconf pipeconf - * @return collection of meter configrations + * @return list of meter configrations */ - CompletableFuture> readMeterCells( + CompletableFuture> readMeterCells( Set cellIds, PiPipeconf pipeconf); /** @@ -257,7 +282,7 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise. */ CompletableFuture writeMeterCells( - Collection cellConfigs, PiPipeconf pipeconf); + List cellConfigs, PiPipeconf pipeconf); /** * Performs the given write operation for the given PI multicast groups @@ -268,7 +293,7 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise */ CompletableFuture writePreMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType); /** @@ -276,5 +301,5 @@ public interface P4RuntimeClient { * * @return multicast groups */ - CompletableFuture> readAllMulticastGroupEntries(); + CompletableFuture> readAllMulticastGroupEntries(); } diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java index 20f39dfe84..709b92ea53 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java @@ -21,10 +21,10 @@ import org.onosproject.net.pi.model.PiActionProfileId; import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupId; +import p4.config.v1.P4InfoOuterClass; import p4.v1.P4RuntimeOuterClass.ActionProfileGroup; import p4.v1.P4RuntimeOuterClass.ActionProfileGroup.Member; import p4.v1.P4RuntimeOuterClass.ActionProfileMember; -import p4.config.v1.P4InfoOuterClass; import java.util.Collection; import java.util.Map; @@ -36,6 +36,8 @@ import static java.lang.String.format; */ final class ActionProfileGroupEncoder { + private static final int GROUP_SIZE_ADDITIONAL_MEMBERS = 10; + private ActionProfileGroupEncoder() { // hide default constructor } @@ -44,10 +46,12 @@ final class ActionProfileGroupEncoder { * Encode a PI action group to a action profile group. * * @param piActionGroup the action profile group - * @param pipeconf the pipeconf + * @param pipeconf the pipeconf * @return a action profile group encoded from PI action group - * @throws P4InfoBrowser.NotFoundException if can't find action profile from P4Info browser - * @throws EncodeException if can't find P4Info from pipeconf + * @throws P4InfoBrowser.NotFoundException if can't find action profile from + * P4Info browser + * @throws EncodeException if can't find P4Info from + * pipeconf */ static ActionProfileGroup encode(PiActionGroup piActionGroup, PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { @@ -62,8 +66,8 @@ final class ActionProfileGroupEncoder { .getByName(piActionProfileId.id()); int actionProfileId = actionProfile.getPreamble().getId(); ActionProfileGroup.Builder actionProfileGroupBuilder = ActionProfileGroup.newBuilder() - .setGroupId(piActionGroup.id().id()) - .setActionProfileId(actionProfileId); + .setGroupId(piActionGroup.id().id()) + .setActionProfileId(actionProfileId); piActionGroup.members().forEach(m -> { // TODO: currently we don't set "watch" field of member @@ -74,20 +78,31 @@ final class ActionProfileGroupEncoder { actionProfileGroupBuilder.addMembers(member); }); - actionProfileGroupBuilder.setMaxSize(piActionGroup.members().size()); + // FIXME: ONOS-7797 Make this configurable, or find a different way of + // supporting group modify. In P4Runtime, group size cannot be modified + // once the group is created. To allow adding members to an existing + // group we set max_size to support an additional number of members + // other than the one already defined in the PI group. Clearly, this + // will break if we try to add more than GROUP_SIZE_ADDITIONAL_MEMBERS + // to the same group. + actionProfileGroupBuilder.setMaxSize( + piActionGroup.members().size() + GROUP_SIZE_ADDITIONAL_MEMBERS); return actionProfileGroupBuilder.build(); } /** - * Decode an action profile group with members information to a PI action group. + * Decode an action profile group with members information to a PI action + * group. * * @param actionProfileGroup the action profile group - * @param members members of the action profile group - * @param pipeconf the pipeconf + * @param members members of the action profile group + * @param pipeconf the pipeconf * @return decoded PI action group - * @throws P4InfoBrowser.NotFoundException if can't find action profile from P4Info browser - * @throws EncodeException if can't find P4Info from pipeconf + * @throws P4InfoBrowser.NotFoundException if can't find action profile from + * P4Info browser + * @throws EncodeException if can't find P4Info from + * pipeconf */ static PiActionGroup decode(ActionProfileGroup actionProfileGroup, Collection members, diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java index 4dbcac38ed..e78aa97ca2 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java @@ -39,16 +39,14 @@ final class ActionProfileMemberEncoder { /** * Encode a PiActionGroupMember to a ActionProfileMember. * - * @param profileId the PI action group profile ID of members - * @param member the member to encode - * @param pipeconf the pipeconf, as encode spec + * @param member the member to encode + * @param pipeconf the pipeconf, as encode spec * @return encoded member * @throws P4InfoBrowser.NotFoundException can't find action profile from * P4Info browser * @throws EncodeException can't find P4Info from pipeconf */ - static ActionProfileMember encode(PiActionProfileId profileId, - PiActionGroupMember member, + static ActionProfileMember encode(PiActionGroupMember member, PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { @@ -66,7 +64,7 @@ final class ActionProfileMemberEncoder { // action profile id P4InfoOuterClass.ActionProfile actionProfile = - browser.actionProfiles().getByName(profileId.id()); + browser.actionProfiles().getByName(member.actionProfile().id()); int actionProfileId = actionProfile.getPreamble().getId(); actionProfileMemberBuilder.setActionProfileId(actionProfileId); @@ -95,11 +93,19 @@ final class ActionProfileMemberEncoder { PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); - if (browser == null) { throw new EncodeException(format("Can't get P4 info browser from pipeconf %s", pipeconf)); } - return PiActionGroupMember.builder().withId(PiActionGroupMemberId.of(member.getMemberId())) + + final PiActionProfileId actionProfileId = PiActionProfileId.of( + browser.actionProfiles() + .getById(member.getActionProfileId()) + .getPreamble() + .getName()); + + return PiActionGroupMember.builder() + .forActionProfile(actionProfileId) + .withId(PiActionGroupMemberId.of(member.getMemberId())) .withWeight(weight) .withAction(decodeActionMsg(member.getAction(), browser)) .build(); diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java index ec50c682c7..e88382183d 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java @@ -30,8 +30,8 @@ import p4.v1.P4RuntimeOuterClass.CounterEntry; import p4.v1.P4RuntimeOuterClass.DirectCounterEntry; import p4.v1.P4RuntimeOuterClass.Entity; -import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -65,7 +65,7 @@ final class CounterEntryCodec { * @return collection of entity messages describing both counter or direct * counter entries */ - static Collection encodePiCounterCellIds(Collection cellIds, + static List encodePiCounterCellIds(List cellIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -100,7 +100,7 @@ final class CounterEntryCodec { * @param pipeconf pipeconf * @return collection of entity messages */ - static Collection readAllCellsEntities(Collection counterIds, + static List readAllCellsEntities(List counterIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -135,8 +135,8 @@ final class CounterEntryCodec { * @param pipeconf pipeconf * @return collection of PI counter cell data */ - static Collection decodeCounterEntities(Collection entities, - PiPipeconf pipeconf) { + static List decodeCounterEntities(List entities, + PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java index 12379fdf5a..a8254889db 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java @@ -31,8 +31,8 @@ import p4.v1.P4RuntimeOuterClass.Entity; import p4.v1.P4RuntimeOuterClass.MeterConfig; import p4.v1.P4RuntimeOuterClass.MeterEntry; -import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -66,7 +66,7 @@ final class MeterEntryCodec { * @return collection of entity messages describing both meter or direct * meter entries */ - static Collection encodePiMeterCellConfigs(Collection cellConfigs, + static List encodePiMeterCellConfigs(List cellConfigs, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -101,7 +101,7 @@ final class MeterEntryCodec { * @param pipeconf pipeconf * @return collection of entity messages */ - static Collection readAllCellsEntities(Collection meterIds, + static List readAllCellsEntities(List meterIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -136,8 +136,8 @@ final class MeterEntryCodec { * @param pipeconf pipeconf * @return collection of PI meter cell data */ - static Collection decodeMeterEntities(Collection entities, - PiPipeconf pipeconf) { + static List decodeMeterEntities(List entities, + PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java index e020ed5245..54d284dbc5 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java @@ -31,7 +31,6 @@ import io.grpc.StatusRuntimeException; import io.grpc.protobuf.lite.ProtoLiteUtils; import io.grpc.stub.ClientCallStreamObserver; import io.grpc.stub.StreamObserver; -import org.apache.commons.lang3.tuple.ImmutablePair; import org.onlab.osgi.DefaultServiceDirectory; import org.onlab.util.SharedExecutors; import org.onlab.util.Tools; @@ -43,9 +42,9 @@ import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberId; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; -import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiMeterCellConfig; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; @@ -81,7 +80,6 @@ import p4.v1.P4RuntimeOuterClass.WriteRequest; import java.math.BigInteger; import java.net.ConnectException; import java.nio.ByteBuffer; -import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -102,6 +100,7 @@ import java.util.stream.StreamSupport; import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.String.format; +import static java.util.Collections.singletonList; import static org.onlab.util.Tools.groupedThreads; import static org.slf4j.LoggerFactory.getLogger; import static p4.v1.P4RuntimeOuterClass.Entity.EntityCase.ACTION_PROFILE_GROUP; @@ -258,21 +257,21 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture writeTableEntries(Collection piTableEntries, + public CompletableFuture writeTableEntries(List piTableEntries, WriteOperationType opType, PiPipeconf pipeconf) { return supplyInContext(() -> doWriteTableEntries(piTableEntries, opType, pipeconf), "writeTableEntries-" + opType.name()); } @Override - public CompletableFuture> dumpTables( + public CompletableFuture> dumpTables( Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { return supplyInContext(() -> doDumpTables(piTableIds, defaultEntries, pipeconf), "dumpTables-" + piTableIds.hashCode()); } @Override - public CompletableFuture> dumpAllTables(PiPipeconf pipeconf) { + public CompletableFuture> dumpAllTables(PiPipeconf pipeconf) { return supplyInContext(() -> doDumpTables(null, false, pipeconf), "dumpAllTables"); } @@ -282,25 +281,24 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture> readCounterCells(Set cellIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadCounterCells(cellIds, pipeconf), + public CompletableFuture> readCounterCells(Set cellIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadCounterCells(Lists.newArrayList(cellIds), pipeconf), "readCounterCells-" + cellIds.hashCode()); } @Override - public CompletableFuture> readAllCounterCells(Set counterIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadAllCounterCells(counterIds, pipeconf), + public CompletableFuture> readAllCounterCells(Set counterIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadAllCounterCells(Lists.newArrayList(counterIds), pipeconf), "readAllCounterCells-" + counterIds.hashCode()); } @Override - public CompletableFuture writeActionGroupMembers(PiActionProfileId profileId, - Collection members, + public CompletableFuture writeActionGroupMembers(List members, WriteOperationType opType, PiPipeconf pipeconf) { - return supplyInContext(() -> doWriteActionGroupMembers(profileId, members, opType, pipeconf), + return supplyInContext(() -> doWriteActionGroupMembers(members, opType, pipeconf), "writeActionGroupMembers-" + opType.name()); } @@ -314,14 +312,31 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture> dumpGroups(PiActionProfileId actionProfileId, - PiPipeconf pipeconf) { + public CompletableFuture> dumpGroups(PiActionProfileId actionProfileId, + PiPipeconf pipeconf) { return supplyInContext(() -> doDumpGroups(actionProfileId, pipeconf), "dumpGroups-" + actionProfileId.id()); } @Override - public CompletableFuture writeMeterCells(Collection cellIds, PiPipeconf pipeconf) { + public CompletableFuture> dumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf) { + return supplyInContext(() -> doDumpActionProfileMemberIds(actionProfileId, pipeconf), + "dumpActionProfileMemberIds-" + actionProfileId.id()); + } + + @Override + public CompletableFuture> removeActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf) { + return supplyInContext( + () -> doRemoveActionProfileMembers(actionProfileId, memberIds, pipeconf), + "cleanupActionProfileMembers-" + actionProfileId.id()); + } + + @Override + public CompletableFuture writeMeterCells(List cellIds, PiPipeconf pipeconf) { return supplyInContext(() -> doWriteMeterCells(cellIds, pipeconf), "writeMeterCells"); @@ -329,29 +344,29 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { @Override public CompletableFuture writePreMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType) { return supplyInContext(() -> doWriteMulticastGroupEntries(entries, opType), "writePreMulticastGroupEntries"); } @Override - public CompletableFuture> readAllMulticastGroupEntries() { + public CompletableFuture> readAllMulticastGroupEntries() { return supplyInContext(this::doReadAllMulticastGroupEntries, "readAllMulticastGroupEntries"); } @Override - public CompletableFuture> readMeterCells(Set cellIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadMeterCells(cellIds, pipeconf), + public CompletableFuture> readMeterCells(Set cellIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadMeterCells(Lists.newArrayList(cellIds), pipeconf), "readMeterCells-" + cellIds.hashCode()); } @Override - public CompletableFuture> readAllMeterCells(Set meterIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadAllMeterCells(meterIds, pipeconf), + public CompletableFuture> readAllMeterCells(Set meterIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadAllMeterCells(Lists.newArrayList(meterIds), pipeconf), "readAllMeterCells-" + meterIds.hashCode()); } @@ -491,13 +506,13 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } } - private boolean doWriteTableEntries(Collection piTableEntries, WriteOperationType opType, + private boolean doWriteTableEntries(List piTableEntries, WriteOperationType opType, PiPipeconf pipeconf) { if (piTableEntries.size() == 0) { return true; } - Collection updateMsgs; + List updateMsgs; try { updateMsgs = TableEntryEncoder.encode(piTableEntries, pipeconf) .stream() @@ -518,7 +533,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, piTableEntries, opType, "table entry"); } - private Collection doDumpTables( + private List doDumpTables( Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { log.debug("Dumping tables {} from {} (pipeconf {})...", @@ -647,22 +662,22 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { isClientMaster.set(isMaster); } - private Collection doReadAllCounterCells( - Collection counterIds, PiPipeconf pipeconf) { + private List doReadAllCounterCells( + List counterIds, PiPipeconf pipeconf) { return doReadCounterEntities( CounterEntryCodec.readAllCellsEntities(counterIds, pipeconf), pipeconf); } - private Collection doReadCounterCells( - Collection cellIds, PiPipeconf pipeconf) { + private List doReadCounterCells( + List cellIds, PiPipeconf pipeconf) { return doReadCounterEntities( CounterEntryCodec.encodePiCounterCellIds(cellIds, pipeconf), pipeconf); } - private Collection doReadCounterEntities( - Collection counterEntities, PiPipeconf pipeconf) { + private List doReadCounterEntities( + List counterEntities, PiPipeconf pipeconf) { if (counterEntities.size() == 0) { return Collections.emptyList(); @@ -690,13 +705,13 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return CounterEntryCodec.decodeCounterEntities(entities, pipeconf); } - private boolean doWriteActionGroupMembers(PiActionProfileId profileId, Collection members, + private boolean doWriteActionGroupMembers(List members, WriteOperationType opType, PiPipeconf pipeconf) { - final Collection actionProfileMembers = Lists.newArrayList(); + final List actionProfileMembers = Lists.newArrayList(); for (PiActionGroupMember member : members) { try { - actionProfileMembers.add(ActionProfileMemberEncoder.encode(profileId, member, pipeconf)); + actionProfileMembers.add(ActionProfileMemberEncoder.encode(member, pipeconf)); } catch (EncodeException | P4InfoBrowser.NotFoundException e) { log.warn("Unable to encode group member, aborting {} operation: {} [{}]", opType.name(), e.getMessage(), member.toString()); @@ -704,7 +719,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } } - final Collection updateMsgs = actionProfileMembers.stream() + final List updateMsgs = actionProfileMembers.stream() .map(actionProfileMember -> Update.newBuilder() .setEntity(Entity.newBuilder() @@ -722,14 +737,14 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, members, opType, "group member"); } - private Collection doDumpGroups(PiActionProfileId piActionProfileId, PiPipeconf pipeconf) { + private List doDumpGroups(PiActionProfileId piActionProfileId, PiPipeconf pipeconf) { log.debug("Dumping groups from action profile {} from {} (pipeconf {})...", piActionProfileId.id(), deviceId, pipeconf.id()); final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { log.warn("Unable to get a P4Info browser for pipeconf {}, aborting dump action profile", pipeconf); - return Collections.emptySet(); + return Collections.emptyList(); } final int actionProfileId; @@ -741,7 +756,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .getId(); } catch (P4InfoBrowser.NotFoundException e) { log.warn("Unable to dump groups: {}", e.getMessage()); - return Collections.emptySet(); + return Collections.emptyList(); } // Prepare read request to read all groups from the given action profile. @@ -762,7 +777,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } catch (StatusRuntimeException e) { checkGrpcException(e); log.warn("Unable to dump action profile {} from {}: {}", piActionProfileId, deviceId, e.getMessage()); - return Collections.emptySet(); + return Collections.emptyList(); } final List groupMsgs = Tools.stream(() -> groupResponses) @@ -847,6 +862,104 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .collect(Collectors.toList()); } + private List doDumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf) { + + final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); + if (browser == null) { + log.warn("Unable to get a P4Info browser for pipeconf {}, " + + "aborting cleanup of action profile members", + pipeconf); + return Collections.emptyList(); + } + + final int p4ActProfId; + try { + p4ActProfId = browser + .actionProfiles() + .getByName(actionProfileId.id()) + .getPreamble() + .getId(); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to cleanup action profile members: {}", e.getMessage()); + return Collections.emptyList(); + } + + final ReadRequest memberRequestMsg = ReadRequest.newBuilder() + .setDeviceId(p4DeviceId) + .addEntities(Entity.newBuilder().setActionProfileMember( + ActionProfileMember.newBuilder() + .setActionProfileId(p4ActProfId) + .build()).build()) + .build(); + + // Read members. + final Iterator memberResponses; + try { + memberResponses = blockingStub.read(memberRequestMsg); + } catch (StatusRuntimeException e) { + checkGrpcException(e); + log.warn("Unable to read members of action profile {} from {}: {}", + actionProfileId, deviceId, e.getMessage()); + return Collections.emptyList(); + } + + return Tools.stream(() -> memberResponses) + .map(ReadResponse::getEntitiesList) + .flatMap(List::stream) + .filter(e -> e.getEntityCase() == ACTION_PROFILE_MEMBER) + .map(Entity::getActionProfileMember) + // Perhaps not needed, but better to double check to avoid + // removing members of other groups. + .filter(m -> m.getActionProfileId() == p4ActProfId) + .map(ActionProfileMember::getMemberId) + .map(PiActionGroupMemberId::of) + .collect(Collectors.toList()); + } + + private List doRemoveActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf) { + + if (memberIds.isEmpty()) { + return Collections.emptyList(); + } + + final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); + if (browser == null) { + log.warn("Unable to get a P4Info browser for pipeconf {}, " + + "aborting cleanup of action profile members", + pipeconf); + return Collections.emptyList(); + } + + final int p4ActProfId; + try { + p4ActProfId = browser.actionProfiles() + .getByName(actionProfileId.id()).getPreamble().getId(); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to cleanup action profile members: {}", e.getMessage()); + return Collections.emptyList(); + } + + final List updateMsgs = memberIds.stream() + .map(m -> ActionProfileMember.newBuilder() + .setActionProfileId(p4ActProfId) + .setMemberId(m.id()).build()) + .map(m -> Entity.newBuilder().setActionProfileMember(m).build()) + .map(e -> Update.newBuilder().setEntity(e) + .setType(Update.Type.DELETE).build()) + .collect(Collectors.toList()); + + log.debug("Removing {} members of action profile '{}'...", + memberIds.size(), actionProfileId); + + return writeAndReturnSuccessEntities( + updateMsgs, memberIds, WriteOperationType.DELETE, + "action profile members"); + } + private boolean doWriteActionGroup(PiActionGroup group, WriteOperationType opType, PiPipeconf pipeconf) { final ActionProfileGroup actionProfileGroup; try { @@ -863,20 +976,20 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .setType(UPDATE_TYPES.get(opType)) .build(); - return write(Collections.singleton(updateMsg), Collections.singleton(group), + return write(singletonList(updateMsg), singletonList(group), opType, "group"); } - private Collection doReadAllMeterCells( - Collection meterIds, PiPipeconf pipeconf) { + private List doReadAllMeterCells( + List meterIds, PiPipeconf pipeconf) { return doReadMeterEntities(MeterEntryCodec.readAllCellsEntities( meterIds, pipeconf), pipeconf); } - private Collection doReadMeterCells( - Collection cellIds, PiPipeconf pipeconf) { + private List doReadMeterCells( + List cellIds, PiPipeconf pipeconf) { - final Collection piMeterCellConfigs = cellIds.stream() + final List piMeterCellConfigs = cellIds.stream() .map(cellId -> PiMeterCellConfig.builder() .withMeterCellId(cellId) .build()) @@ -886,8 +999,8 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { piMeterCellConfigs, pipeconf), pipeconf); } - private Collection doReadMeterEntities( - Collection entitiesToRead, PiPipeconf pipeconf) { + private List doReadMeterEntities( + List entitiesToRead, PiPipeconf pipeconf) { if (entitiesToRead.size() == 0) { return Collections.emptyList(); @@ -917,9 +1030,9 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return MeterEntryCodec.decodeMeterEntities(responseEntities, pipeconf); } - private boolean doWriteMeterCells(Collection cellConfigs, PiPipeconf pipeconf) { + private boolean doWriteMeterCells(List cellConfigs, PiPipeconf pipeconf) { - Collection updateMsgs = MeterEntryCodec.encodePiMeterCellConfigs(cellConfigs, pipeconf) + List updateMsgs = MeterEntryCodec.encodePiMeterCellConfigs(cellConfigs, pipeconf) .stream() .map(meterEntryMsg -> Update.newBuilder() @@ -936,7 +1049,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } private boolean doWriteMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType) { final List updateMsgs = entries.stream() @@ -955,7 +1068,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, entries, opType, "multicast group entry"); } - private Collection doReadAllMulticastGroupEntries() { + private List doReadAllMulticastGroupEntries() { final Entity entity = Entity.newBuilder() .setPacketReplicationEngineEntry( @@ -999,18 +1112,24 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return mcEntries; } - private boolean write(Collection updates, - Collection writeEntities, - WriteOperationType opType, - String entryType) { - try { + private boolean write(List updates, + List writeEntities, + WriteOperationType opType, + String entryType) { + // True if all entities were successfully written. + return writeAndReturnSuccessEntities(updates, writeEntities, opType, + entryType).size() == writeEntities.size(); + } + private List writeAndReturnSuccessEntities( + List updates, List writeEntities, + WriteOperationType opType, String entryType) { + try { //noinspection ResultOfMethodCallIgnored blockingStub.write(writeRequest(updates)); - return true; + return writeEntities; } catch (StatusRuntimeException e) { - checkAndLogWriteErrors(writeEntities, e, opType, entryType); - return false; + return checkAndLogWriteErrors(writeEntities, e, opType, entryType); } } @@ -1037,8 +1156,9 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return null; } - private void checkAndLogWriteErrors( - Collection writeEntities, StatusRuntimeException ex, + // Returns the collection of succesfully write entities. + private List checkAndLogWriteErrors( + List writeEntities, StatusRuntimeException ex, WriteOperationType opType, String entryType) { checkGrpcException(ex); @@ -1051,30 +1171,32 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { opType.name(), writeEntities.size(), entryType, deviceId, ex.getStatus().getCode().name(), description == null ? "" : " - " + description); - return; + return Collections.emptyList(); } - // FIXME: we are assuming entities is an ordered collection, e.g. a list, - // and that errors are reported in the same order as the corresponding - // written entity. Write RPC methods should be refactored to accept an - // ordered list of entities, instead of a collection. if (errors.size() == writeEntities.size()) { - Iterator entityIterator = writeEntities.iterator(); - errors.stream() - .map(e -> ImmutablePair.of(e, entityIterator.next())) - .filter(p -> p.left.getCanonicalCode() != Status.OK.getCode().value()) - .forEach(p -> log.warn("Unable to {} {} on {}: {} [{}]", - opType.name(), entryType, deviceId, - parseP4Error(p.getLeft()), - p.getRight().toString())); + List okEntities = Lists.newArrayList(); + Iterator entityIterator = writeEntities.iterator(); + for (P4RuntimeOuterClass.Error error : errors) { + T entity = entityIterator.next(); + if (error.getCanonicalCode() != Status.OK.getCode().value()) { + log.warn("Unable to {} {} on {}: {} [{}]", + opType.name(), entryType, deviceId, + parseP4Error(error), entity.toString()); + } else { + okEntities.add(entity); + } + } + return okEntities; } else { log.warn("Unable to reconcile error details to updates " + - "(sent {} updates, but device returned {} errors)", - entryType, writeEntities.size(), errors.size()); + "(sent {} updates, but device returned {} errors)", + entryType, writeEntities.size(), errors.size()); errors.stream() .filter(err -> err.getCanonicalCode() != Status.OK.getCode().value()) .forEach(err -> log.warn("Unable to {} {} (unknown): {}", opType.name(), entryType, parseP4Error(err))); + return Collections.emptyList(); } } @@ -1099,7 +1221,6 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { }) .filter(Objects::nonNull) .collect(Collectors.toList()); - } private String parseP4Error(P4RuntimeOuterClass.Error err) { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java index 53fcf2aba8..d5d909f1c9 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java @@ -38,11 +38,11 @@ import org.onosproject.net.pi.runtime.PiTableAction; import org.onosproject.net.pi.runtime.PiTableEntry; import org.onosproject.net.pi.runtime.PiTernaryFieldMatch; import org.slf4j.Logger; +import p4.config.v1.P4InfoOuterClass; import p4.v1.P4RuntimeOuterClass.Action; import p4.v1.P4RuntimeOuterClass.FieldMatch; import p4.v1.P4RuntimeOuterClass.TableAction; import p4.v1.P4RuntimeOuterClass.TableEntry; -import p4.config.v1.P4InfoOuterClass; import java.util.Collection; import java.util.Collections; @@ -82,7 +82,7 @@ final class TableEntryEncoder { * @return collection of P4Runtime table entry protobuf messages * @throws EncodeException if a PI table entry cannot be encoded */ - static Collection encode(Collection piTableEntries, + static List encode(List piTableEntries, PiPipeconf pipeconf) throws EncodeException { @@ -137,7 +137,7 @@ final class TableEntryEncoder { * @param pipeconf PI pipeconf * @return collection of PI table entry objects */ - static Collection decode(Collection tableEntryMsgs, PiPipeconf pipeconf) { + static List decode(List tableEntryMsgs, PiPipeconf pipeconf) { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -375,7 +375,7 @@ final class TableEntryEncoder { } } - private static PiMatchKey decodeFieldMatchMsgs(Collection fieldMatchs, P4InfoOuterClass.Table tableInfo, + private static PiMatchKey decodeFieldMatchMsgs(List fieldMatchs, P4InfoOuterClass.Table tableInfo, P4InfoBrowser browser) throws P4InfoBrowser.NotFoundException, EncodeException { // Match key for field matches. 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 893049feec..60913eddd5 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 @@ -17,7 +17,6 @@ package org.onosproject.p4runtime.ctl; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.protobuf.ByteString; import io.grpc.ManagedChannel; @@ -84,8 +83,8 @@ public class P4RuntimeGroupTest { private static final PiActionParamId PORT_PARAM_ID = PiActionParamId.of("port"); private static final int BASE_MEM_ID = 65535; private static final List MEMBER_IDS = ImmutableList.of(65536, 65537, 65538); - private static final Collection GROUP_MEMBERS = - ImmutableSet.of( + private static final List GROUP_MEMBERS = + Lists.newArrayList( outputMember((short) 1), outputMember((short) 2), outputMember((short) 3) @@ -116,6 +115,7 @@ public class P4RuntimeGroupTest { .withParameter(param).build(); return PiActionGroupMember.builder() + .forActionProfile(ACT_PROF_ID) .withAction(piAction) .withId(PiActionGroupMemberId.of(BASE_MEM_ID + portNum)) .withWeight(DEFAULT_MEMBER_WEIGHT) @@ -139,7 +139,6 @@ public class P4RuntimeGroupTest { grpcServer = builder.build().start(); grpcChannel = InProcessChannelBuilder.forName(GRPC_SERVER_NAME) .directExecutor() - .usePlaintext(true) .build(); } @@ -191,7 +190,7 @@ public class P4RuntimeGroupTest { @Test public void testInsertPiActionMembers() throws Exception { CompletableFuture complete = p4RuntimeServerImpl.expectRequests(1); - client.writeActionGroupMembers(ACT_PROF_ID, GROUP_MEMBERS, INSERT, PIPECONF); + client.writeActionGroupMembers(GROUP_MEMBERS, INSERT, PIPECONF); complete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); WriteRequest result = p4RuntimeServerImpl.getWriteReqs().get(0); assertEquals(1, result.getDeviceId()); @@ -246,6 +245,7 @@ public class P4RuntimeGroupTest { ActionProfileMember actProfMember = ActionProfileMember.newBuilder() + .setActionProfileId(P4_INFO_ACT_PROF_ID) .setMemberId(id) .setAction(action) .build(); @@ -260,13 +260,14 @@ public class P4RuntimeGroupTest { responses.add(ReadResponse.newBuilder() .addAllEntities(members.stream() - .map(m -> Entity.newBuilder().setActionProfileMember(m).build()) + .map(m -> Entity.newBuilder() + .setActionProfileMember(m).build()) .collect(Collectors.toList())) .build()); p4RuntimeServerImpl.willReturnReadResult(responses); CompletableFuture complete = p4RuntimeServerImpl.expectRequests(2); - CompletableFuture> groupsComplete = client.dumpGroups(ACT_PROF_ID, PIPECONF); + CompletableFuture> groupsComplete = client.dumpGroups(ACT_PROF_ID, PIPECONF); complete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); Collection groups = groupsComplete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); From fa42158937ba1c1b6afe8f34fa8f5bf1d2268f30 Mon Sep 17 00:00:00 2001 From: Carmelo Cascone Date: Thu, 13 Sep 2018 10:05:57 -0700 Subject: [PATCH 17/19] Refactored INT service impl to support multi-instance ONOS and fabric.p4 Change-Id: Ic82a3ab72d71a774606b25997e283b93aedc6ec9 --- apps/inbandtelemetry/BUILD | 15 + .../inbandtelemetry/api/IntConfig.java | 2 +- .../inbandtelemetry/api/IntProgrammable.java | 75 ++- .../inbandtelemetry/api/IntService.java | 6 +- apps/inbandtelemetry/app/BUILD | 11 + .../inbandtelemetry/app/IntControl.java | 55 -- .../inbandtelemetry/app/package-info.java | 20 - .../main/resources/app/view/intApp/intApp.css | 21 + .../resources/app/view/intApp/intApp.html | 170 ++++-- apps/inbandtelemetry/impl/BUILD | 12 + .../inbandtelemetry/impl/IntManager.java | 264 --------- .../impl/SimpleIntManager.java | 527 ++++++++++++++++++ modules.bzl | 1 + .../pipelines/basic/IntProgrammableImpl.java | 197 +++---- pipelines/fabric/BUCK | 1 + pipelines/fabric/BUILD | 1 + .../pipelines/fabric/FabricConstants.java | 2 + .../pipelines/fabric/IntProgrammableImpl.java | 418 +++++++------- .../pipelines/fabric/PipeconfLoader.java | 5 +- pipelines/fabric/src/main/resources/fabric.p4 | 2 + .../src/main/resources/include/define.p4 | 8 + .../main/resources/include/int/int_header.p4 | 2 + .../main/resources/include/int/int_transit.p4 | 10 +- .../fabric-full/bmv2/default/bmv2.json | 59 +- .../fabric-full/bmv2/default/p4info.txt | 11 +- .../p4c-out/fabric-int/bmv2/default/bmv2.json | 55 +- .../fabric-int/bmv2/default/p4info.txt | 11 +- .../fabric-spgw-int/bmv2/default/bmv2.json | 55 +- .../fabric-spgw-int/bmv2/default/p4info.txt | 11 +- 29 files changed, 1225 insertions(+), 802 deletions(-) create mode 100644 apps/inbandtelemetry/BUILD create mode 100644 apps/inbandtelemetry/app/BUILD delete mode 100644 apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java delete mode 100644 apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java create mode 100644 apps/inbandtelemetry/impl/BUILD delete mode 100644 apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/IntManager.java create mode 100644 apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java diff --git a/apps/inbandtelemetry/BUILD b/apps/inbandtelemetry/BUILD new file mode 100644 index 0000000000..3a6d7eba62 --- /dev/null +++ b/apps/inbandtelemetry/BUILD @@ -0,0 +1,15 @@ +BUNDLES = [ + "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", + "//apps/inbandtelemetry/impl:onos-apps-inbandtelemetry-impl", + "//apps/inbandtelemetry/app:onos-apps-inbandtelemetry-app", +] + +onos_app( + app_name = "org.onosproject.inbandtelemetry", + category = "Monitoring", + description = "Provides managements of INT-capable devices. Specifies flows to enable INT and" + + "types of metadata to collect. Sets up INT-related information.", + included_bundles = BUNDLES, + title = "P4 In-band Network Telemetry Service", + url = "http://onosproject.org", +) diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java index a3e614808f..c5af580107 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java @@ -30,7 +30,7 @@ public final class IntConfig { /** * Represents a type of telemetry spec to collect in the dataplane. */ - enum TelemetrySpec { + public enum TelemetrySpec { /** * Embeds telemetry metadata according to the INT specification. * diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java index 452b787af2..507f8702a6 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java @@ -16,18 +16,64 @@ package org.onosproject.inbandtelemetry.api; import com.google.common.annotations.Beta; +import org.onosproject.net.PortNumber; import org.onosproject.net.driver.HandlerBehaviour; -import java.util.concurrent.CompletableFuture; - +/** + * Abstraction of a device implementing In-band Network Telemetry (INT) + * capabilities. + */ @Beta public interface IntProgrammable extends HandlerBehaviour { /** - * Initializes the pipeline, by installing required flow rules - * not relevant to specific watchlist, report and event. + * INT functionalities that a device can implement. */ - void init(); + enum IntFunctionality { + /** + * Source functionality. + */ + SOURCE, + /** + * Sink functionality. + */ + SINK, + /** + * Transit functionality. + */ + TRANSIT + } + + /** + * Initializes the pipeline, by installing required flow rules not relevant + * to specific watchlist, report and event. Returns true if the operation + * was successful, false otherwise. + * + * @return true if successful, false otherwise + */ + boolean init(); + + /** + * Configures the given port as an INT source port. Packets received via + * this port can be modified to add the INT header, if a corresponding INT + * objective is matched. Returns true if the operation was successful, false + * otherwise. + * + * @param port port + * @return true if successful, false otherwise + */ + boolean setSourcePort(PortNumber port); + + /** + * Configures the given port as an INT sink port. Packets forwarded via this + * port will be stripped of the INT header and a corresponding INT report + * will be generated. Returns true if the operation was successful, false + * otherwise. + * + * @param port port + * @return true if successful, false otherwise + */ + boolean setSinkPort(PortNumber port); /** * Adds a given IntObjective to the device. @@ -35,7 +81,7 @@ public interface IntProgrammable extends HandlerBehaviour { * @param obj an IntObjective * @return true if the objective is successfully added; false otherwise. */ - CompletableFuture addIntObjective(IntObjective obj); + boolean addIntObjective(IntObjective obj); /** * Removes a given IntObjective entry from the device. @@ -43,7 +89,7 @@ public interface IntProgrammable extends HandlerBehaviour { * @param obj an IntObjective * @return true if the objective is successfully removed; false otherwise. */ - CompletableFuture removeIntObjective(IntObjective obj); + boolean removeIntObjective(IntObjective obj); /** * Set up report-related configuration. @@ -51,7 +97,20 @@ public interface IntProgrammable extends HandlerBehaviour { * @param config a configuration regarding to the collector * @return true if the objective is successfully added; false otherwise. */ - CompletableFuture setupIntConfig(IntConfig config); + boolean setupIntConfig(IntConfig config); + + /** + * Clean up any INT-related configuration from the device. + */ + void cleanup(); + + /** + * Returns true if this device supports the given INT functionality. + * + * @param functionality INt functionality + * @return true if functionality is supported, false otherwise + */ + boolean supportsFunctionality(IntFunctionality functionality); //TODO: [ONOS-7616] Design IntEvent and related APIs } diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java index ef2e1adb3e..59e65c3024 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java @@ -43,13 +43,13 @@ public interface IntService { } /** - * Starts the INT functionalities in all INT-capable devices. + * Starts the INT functionality in all INT-capable devices. * This will include populating tables to process INT packets. */ void startInt(); /** - * Starts the INT functionalities in specified set of INT transit devices. + * Starts the INT functionality in specified set of INT transit devices. *

* Note: this is an experimental API, which can be either changed or removed. * @@ -116,4 +116,4 @@ public interface IntService { Map getIntIntents(); //TODO: [ONOS-7616] Design IntEvent and related APIs -} \ No newline at end of file +} diff --git a/apps/inbandtelemetry/app/BUILD b/apps/inbandtelemetry/app/BUILD new file mode 100644 index 0000000000..3391ffae61 --- /dev/null +++ b/apps/inbandtelemetry/app/BUILD @@ -0,0 +1,11 @@ +COMPILE_DEPS = CORE_DEPS + KRYO + JACKSON + [ + "//core/store/serializers:onos-core-serializers", + "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", +] + +TEST_DEPS = TEST_REST + +osgi_jar_with_tests( + test_deps = TEST_DEPS, + deps = COMPILE_DEPS, +) diff --git a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java b/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java deleted file mode 100644 index efd3590db8..0000000000 --- a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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. - */ -package org.onosproject.inbandtelemetry.app; - -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.onosproject.core.CoreService; -import org.onosproject.inbandtelemetry.api.IntService; -import org.onosproject.net.host.HostService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Component(immediate = true) -public class IntControl { - private final Logger log = LoggerFactory.getLogger(getClass()); -// private ApplicationId appId; -// private static final int collectorPort = 1234; -// private static final IpAddress collectorIp = IpAddress.valueOf("10.0.0.3"); - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected CoreService coreService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected IntService intService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected HostService hostService; - - @Activate - protected void activate() { - coreService.registerApplication("org.onosproject.inbandtelemetry.app"); - log.info("Started"); - } - - @Deactivate - protected void deactivate() { - log.info("Stopped"); - } -} diff --git a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java b/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java deleted file mode 100644 index 859bdf7af5..0000000000 --- a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * IntService sample application. - */ -package org.onosproject.inbandtelemetry.app; diff --git a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css index 1cfd4474b2..7c2bbe2542 100644 --- a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css +++ b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css @@ -58,6 +58,10 @@ text-align: center; } +#ov-int-app-main input { + padding: 4px; + font-size: inherit; +} .light #ov-int-app-main .int-app-config-button { color: white; @@ -68,8 +72,25 @@ background-color: #aaa; } /*---------------------------------------------------------------------------*/ +#ov-int-app-main hr { + border: 0; + height: 1px; + background: #333; +} + #ov-int-app-main h2 { display: inline-block; + margin: 15px 0px 15px; +} + +#ov-int-app-main h3 { + display: inline-block; + margin-bottom: 10px; +} + +#ov-int-app-main h4 { + display: inline-block; + margin-bottom: 10px; } /* #ov-int-app-main .table-body{ display: inline-block; diff --git a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html index 42717e0ca9..8c39cdc6fe 100644 --- a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html +++ b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html @@ -1,62 +1,128 @@

-
-
- Collector IP - +
+

In-band Network Telemetry (INT) Control + Application

+
- Collector Port - -
-
-
-
- Deploy -
-

-
-
- Src Address - - Dst Address - - - Src Port - - - Dst Port - - - Protocol - +
+

+ INT Collector Configuration +

+
+

+ Collector IPv4 address and UDP port +

+
+ + : + +
-
- Switch Id - Port Id - Hop Latency - Queue Occupancy - Ingress Timestamp - Egress Timestamp - - Egress Port Tx Utilization +
+
+ Apply Configuration +
-
-
- Deploy +
+ +
+

+ INT Watchlist Rules +

+ +
+
+

+ Create New Watchlist Rule +

+
+ + + + + +
+
+ + + + + + + + +
+
+
+ +
+
+ Apply Watchlist Rule +
-

Installed INT Intents ({{tableData.length}} total)

+

Installed Watchlist Rules ({{tableData.length}} total)

- - - - - - - + + + + + + +
ID Src Address Dst Address Src Port Dst Port Protocol Metadata IDSrc AddressDst AddressSrc PortDst PortProtocolMetadata
diff --git a/apps/inbandtelemetry/impl/BUILD b/apps/inbandtelemetry/impl/BUILD new file mode 100644 index 0000000000..b3a1d46f34 --- /dev/null +++ b/apps/inbandtelemetry/impl/BUILD @@ -0,0 +1,12 @@ +COMPILE_DEPS = CORE_DEPS + KRYO + [ + "//core/store/serializers:onos-core-serializers", + "//pipelines/basic:onos-pipelines-basic", + "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", +] + +TEST_DEPS = TEST_ADAPTERS + +osgi_jar_with_tests( + test_deps = TEST_DEPS, + deps = COMPILE_DEPS, +) diff --git a/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/IntManager.java b/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/IntManager.java deleted file mode 100644 index 5cf32dad6a..0000000000 --- a/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/IntManager.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * 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. - */ -package org.onosproject.inbandtelemetry.impl; - -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.apache.felix.scr.annotations.Service; -import org.onlab.util.KryoNamespace; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.inbandtelemetry.api.IntConfig; -import org.onosproject.inbandtelemetry.api.IntIntent; -import org.onosproject.inbandtelemetry.api.IntIntentId; -import org.onosproject.inbandtelemetry.api.IntObjective; -import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.inbandtelemetry.api.IntService; -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.device.DeviceService; -import org.onosproject.net.flow.FlowRuleService; -import org.onosproject.net.host.HostEvent; -import org.onosproject.net.host.HostListener; -import org.onosproject.net.host.HostService; -import org.onosproject.store.serializers.KryoNamespaces; -import org.onosproject.store.service.AtomicIdGenerator; -import org.onosproject.store.service.ConsistentMap; -import org.onosproject.store.service.Serializer; -import org.onosproject.store.service.StorageService; -import org.slf4j.Logger; - -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Implementation of IntService, for controlling INT-capable pipelines. - */ -@Component(immediate = true) -@Service -public class IntManager implements IntService { - private final String appName = "org.onosproject.inbandtelemetry"; - private ApplicationId appId; - private final Logger log = getLogger(getClass()); - private ConsistentMap intentConsistentMap; - private ConsistentMap deviceRoleConsistentMap; - private IntConfig cfg; - private AtomicIdGenerator intentIds; - - private InternalHostListener hostListener = new InternalHostListener(); - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private CoreService coreService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private DeviceService deviceService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private StorageService storageService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private HostService hostService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private FlowRuleService flowRuleService; - - @Activate - public void activate() { - appId = coreService.registerApplication(appName); - - KryoNamespace.Builder serializer = KryoNamespace.newBuilder() - .register(KryoNamespaces.API) - .register(IntIntent.class) - .register(IntIntentId.class) - .register(IntDeviceRole.class) - .register(IntIntent.IntHeaderType.class) - .register(IntIntent.IntMetadataType.class) - .register(IntIntent.IntReportType.class) - .register(IntIntent.TelemetryMode.class); - - intentConsistentMap = storageService.consistentMapBuilder() - .withSerializer(Serializer.using(serializer.build())) - .withName("int-intents") - .withApplicationId(appId) - .withPurgeOnUninstall() - .build(); - - deviceRoleConsistentMap = storageService.consistentMapBuilder() - .withSerializer(Serializer.using(serializer.build())) - .withName("int-device-roles") - .withApplicationId(appId) - .withPurgeOnUninstall() - .build(); - - // Assign IntDeviceRole to each device - deviceService.getAvailableDevices().forEach(device -> - deviceRoleConsistentMap.put(device.id(), - hostService.getConnectedHosts(device.id()).isEmpty() ? - IntDeviceRole.TRANSIT : - IntDeviceRole.SOURCE_SINK) - ); - hostService.addListener(hostListener); - intentIds = storageService.getAtomicIdGenerator("int-intent-id-generator"); - startInt(); - log.info("Started", appId.id()); - } - - @Deactivate - public void deactivate() { - hostService.removeListener(hostListener); - log.info("Deactivated"); - } - - @Override - public void startInt() { - deviceService.getAvailableDevices().forEach(device -> { - if (device.is(IntProgrammable.class)) { - IntProgrammable intDevice = device.as(IntProgrammable.class); - intDevice.init(); - } - }); - } - - @Override - public void startInt(Set deviceIds) { - deviceIds.forEach(deviceId -> { - Device device = deviceService.getDevice(deviceId); - if (device.is(IntProgrammable.class) && - getIntRole(deviceId) == IntDeviceRole.TRANSIT) { - IntProgrammable intDevice = device.as(IntProgrammable.class); - intDevice.init(); - } - }); - } - - @Override - public void stopInt() { - flowRuleService.removeFlowRulesById(appId); - } - - @Override - public void stopInt(Set deviceIds) { - - } - - @Override - public void setConfig(IntConfig cfg) { - this.cfg = cfg; - deviceService.getAvailableDevices().forEach(device -> { - if (device.is(IntProgrammable.class)) { - IntProgrammable intDevice = device.as(IntProgrammable.class); - intDevice.setupIntConfig(cfg); - } - }); - } - - @Override - public IntConfig getConfig() { - return cfg; - } - - @Override - public IntIntentId installIntIntent(IntIntent intent) { - Integer intentId = (int) intentIds.nextId(); - IntIntentId intIntentId = IntIntentId.valueOf(intentId); - intentConsistentMap.put(intIntentId, intent); - - // Convert IntIntent into an IntObjective - IntObjective obj = new IntObjective.Builder() - .withSelector(intent.selector()) - .withMetadataTypes(intent.metadataTypes()) - .withHeaderType(intent.headerType()) - .build(); - - // Install IntObjective on each INT source device - deviceService.getAvailableDevices().forEach(device -> { - if (device.is(IntProgrammable.class) - && deviceRoleConsistentMap.get(device.id()).value() == IntDeviceRole.SOURCE_SINK) { - IntProgrammable intDevice = device.as(IntProgrammable.class); - intDevice.addIntObjective(obj); - } - }); - return intIntentId; - } - - @Override - public void removeIntIntent(IntIntentId intentId) { - IntIntent intent = intentConsistentMap.remove(intentId).value(); - - // Convert IntIntent into an IntObjective - IntObjective obj = new IntObjective.Builder() - .withSelector(intent.selector()) - .withMetadataTypes(intent.metadataTypes()) - .withHeaderType(intent.headerType()) - .build(); - - // Remove IntObjective on each INT source device - deviceService.getAvailableDevices().forEach(device -> { - if (device.is(IntProgrammable.class) - && deviceRoleConsistentMap.get(device.id()).value() == IntDeviceRole.SOURCE_SINK) { - IntProgrammable intDevice = device.as(IntProgrammable.class); - intDevice.removeIntObjective(obj); - } - }); - } - - @Override - public IntIntent getIntIntent(IntIntentId intentId) { - return Optional.ofNullable(intentConsistentMap.get(intentId).value()).orElse(null); - } - - @Override - public Map getIntIntents() { - return intentConsistentMap.asJavaMap(); - } - - private IntDeviceRole getIntRole(DeviceId deviceId) { - return deviceRoleConsistentMap.get(deviceId).value(); - } - - private void setIntRole(DeviceId deviceId, IntDeviceRole role) { - deviceRoleConsistentMap.put(deviceId, role); - } - - private class InternalHostListener implements HostListener { - @Override - public void event(HostEvent event) { - DeviceId deviceId = event.subject().location().deviceId(); - if (!deviceService.getDevice(deviceId).is(IntProgrammable.class)) { - return; - } - switch (event.type()) { - case HOST_ADDED: - // When a host is attached to the switch, we can configure it - // to work as SOURCE_SINK switch. - if (deviceRoleConsistentMap.getOrDefault(deviceId, IntDeviceRole.TRANSIT).value() - != IntDeviceRole.SOURCE_SINK) { - setIntRole(deviceId, IntDeviceRole.SOURCE_SINK); - } - break; - default: - break; - } - } - } - -} diff --git a/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java b/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java new file mode 100644 index 0000000000..56ee52ba45 --- /dev/null +++ b/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java @@ -0,0 +1,527 @@ +/* + * 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. + */ +package org.onosproject.inbandtelemetry.impl; + +import com.google.common.collect.Maps; +import com.google.common.util.concurrent.Striped; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.apache.felix.scr.annotations.Service; +import org.onlab.util.KryoNamespace; +import org.onlab.util.SharedScheduledExecutors; +import org.onosproject.core.ApplicationId; +import org.onosproject.core.CoreService; +import org.onosproject.inbandtelemetry.api.IntConfig; +import org.onosproject.inbandtelemetry.api.IntIntent; +import org.onosproject.inbandtelemetry.api.IntIntentId; +import org.onosproject.inbandtelemetry.api.IntObjective; +import org.onosproject.inbandtelemetry.api.IntProgrammable; +import org.onosproject.inbandtelemetry.api.IntService; +import org.onosproject.mastership.MastershipService; +import org.onosproject.net.ConnectPoint; +import org.onosproject.net.Device; +import org.onosproject.net.DeviceId; +import org.onosproject.net.MastershipRole; +import org.onosproject.net.PortNumber; +import org.onosproject.net.device.DeviceEvent; +import org.onosproject.net.device.DeviceListener; +import org.onosproject.net.device.DeviceService; +import org.onosproject.net.host.HostEvent; +import org.onosproject.net.host.HostListener; +import org.onosproject.net.host.HostService; +import org.onosproject.store.serializers.KryoNamespaces; +import org.onosproject.store.service.AtomicIdGenerator; +import org.onosproject.store.service.AtomicValue; +import org.onosproject.store.service.AtomicValueEvent; +import org.onosproject.store.service.AtomicValueEventListener; +import org.onosproject.store.service.ConsistentMap; +import org.onosproject.store.service.MapEvent; +import org.onosproject.store.service.MapEventListener; +import org.onosproject.store.service.Serializer; +import org.onosproject.store.service.StorageService; +import org.onosproject.store.service.Versioned; +import org.slf4j.Logger; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Simple implementation of IntService, for controlling INT-capable pipelines. + *

+ * All INT intents are converted to an equivalent INT objective and applied to + * all SOURCE_SINK devices. A device is deemed SOURCE_SINK if it has at least + * one host attached. + *

+ * The implementation listens for different types of events and when required it + * configures a device by cleaning-up any previous state and applying the new + * one. + */ +@Component(immediate = true) +@Service +public class SimpleIntManager implements IntService { + + private final Logger log = getLogger(getClass()); + + private static final int CONFIG_EVENT_DELAY = 5; // Seconds. + + private static final String APP_NAME = "org.onosproject.inbandtelemetry"; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private CoreService coreService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private DeviceService deviceService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private StorageService storageService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private MastershipService mastershipService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private HostService hostService; + + private final Striped deviceLocks = Striped.lock(10); + + private final ConcurrentMap> scheduledDeviceTasks = Maps.newConcurrentMap(); + + // Distributed state. + private ConsistentMap intentMap; + private ConsistentMap devicesToConfigure; + private AtomicValue intConfig; + private AtomicValue intStarted; + private AtomicIdGenerator intentIds; + + // Event listeners. + private final InternalHostListener hostListener = new InternalHostListener(); + private final InternalDeviceListener deviceListener = new InternalDeviceListener(); + private final InternalIntentMapListener intentMapListener = new InternalIntentMapListener(); + private final InternalIntConfigListener intConfigListener = new InternalIntConfigListener(); + private final InternalIntStartedListener intStartedListener = new InternalIntStartedListener(); + private final InternalDeviceToConfigureListener devicesToConfigureListener = + new InternalDeviceToConfigureListener(); + + @Activate + public void activate() { + + final ApplicationId appId = coreService.registerApplication(APP_NAME); + + KryoNamespace.Builder serializer = KryoNamespace.newBuilder() + .register(KryoNamespaces.API) + .register(IntIntent.class) + .register(IntIntentId.class) + .register(IntDeviceRole.class) + .register(IntIntent.IntHeaderType.class) + .register(IntIntent.IntMetadataType.class) + .register(IntIntent.IntReportType.class) + .register(IntIntent.TelemetryMode.class) + .register(IntConfig.class) + .register(IntConfig.TelemetrySpec.class); + + devicesToConfigure = storageService.consistentMapBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-devices-to-configure") + .withApplicationId(appId) + .withPurgeOnUninstall() + .build(); + devicesToConfigure.addListener(devicesToConfigureListener); + + intentMap = storageService.consistentMapBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-intents") + .withApplicationId(appId) + .withPurgeOnUninstall() + .build(); + intentMap.addListener(intentMapListener); + + intStarted = storageService.atomicValueBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-started") + .withApplicationId(appId) + .build() + .asAtomicValue(); + intStarted.addListener(intStartedListener); + + intConfig = storageService.atomicValueBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-config") + .withApplicationId(appId) + .build() + .asAtomicValue(); + intConfig.addListener(intConfigListener); + + intentIds = storageService.getAtomicIdGenerator("int-intent-id-generator"); + + // Bootstrap config for already existing devices. + triggerAllDeviceConfigure(); + + hostService.addListener(hostListener); + deviceService.addListener(deviceListener); + + startInt(); + log.info("Started", appId.id()); + } + + @Deactivate + public void deactivate() { + deviceService.removeListener(deviceListener); + hostService.removeListener(hostListener); + intentIds = null; + intConfig.removeListener(intConfigListener); + intConfig = null; + intStarted.removeListener(intStartedListener); + intStarted = null; + intentMap.removeListener(intentMapListener); + intentMap = null; + devicesToConfigure.removeListener(devicesToConfigureListener); + devicesToConfigure.destroy(); + devicesToConfigure = null; + // Cancel tasks (if any). + scheduledDeviceTasks.values().forEach(f -> { + f.cancel(true); + if (!f.isDone()) { + try { + f.get(1, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + // Don't care, we are terminating the service anyways. + } + } + }); + // Clean up INT rules from existing devices. + deviceService.getDevices().forEach(d -> cleanupDevice(d.id())); + log.info("Deactivated"); + } + + @Override + public void startInt() { + // Atomic value event will trigger device configure. + intStarted.set(true); + } + + @Override + public void startInt(Set deviceIds) { + log.warn("Starting INT for a subset of devices is not supported"); + } + + @Override + public void stopInt() { + // Atomic value event will trigger device configure. + intStarted.set(false); + } + + @Override + public void stopInt(Set deviceIds) { + log.warn("Stopping INT for a subset of devices is not supported"); + } + + @Override + public void setConfig(IntConfig cfg) { + checkNotNull(cfg); + // Atomic value event will trigger device configure. + intConfig.set(cfg); + } + + @Override + public IntConfig getConfig() { + return intConfig.get(); + } + + @Override + public IntIntentId installIntIntent(IntIntent intent) { + checkNotNull(intent); + final Integer intentId = (int) intentIds.nextId(); + final IntIntentId intIntentId = IntIntentId.valueOf(intentId); + // Intent map event will trigger device configure. + intentMap.put(intIntentId, intent); + return intIntentId; + } + + @Override + public void removeIntIntent(IntIntentId intentId) { + checkNotNull(intentId); + // Intent map event will trigger device configure. + intentMap.remove(intentId).value(); + } + + @Override + public IntIntent getIntIntent(IntIntentId intentId) { + return Optional.ofNullable(intentMap.get(intentId).value()).orElse(null); + } + + @Override + public Map getIntIntents() { + return intentMap.asJavaMap(); + } + + private boolean isConfigTaskValid(DeviceId deviceId, long creationTime) { + Versioned versioned = devicesToConfigure.get(deviceId); + return versioned != null && versioned.creationTime() == creationTime; + } + + private boolean isIntStarted() { + return intStarted.get(); + } + + private boolean isNotIntConfigured() { + return intConfig.get() == null; + } + + private boolean isIntProgrammable(DeviceId deviceId) { + final Device device = deviceService.getDevice(deviceId); + return device != null && device.is(IntProgrammable.class); + } + + private void triggerDeviceConfigure(DeviceId deviceId) { + if (isIntProgrammable(deviceId)) { + devicesToConfigure.put(deviceId, System.nanoTime()); + } + } + + private void triggerAllDeviceConfigure() { + deviceService.getDevices().forEach(d -> triggerDeviceConfigure(d.id())); + } + + private void configDeviceTask(DeviceId deviceId, long creationTime) { + if (isConfigTaskValid(deviceId, creationTime)) { + // Task outdated. + return; + } + if (!deviceService.isAvailable(deviceId)) { + return; + } + final MastershipRole role = mastershipService.requestRoleForSync(deviceId); + if (!role.equals(MastershipRole.MASTER)) { + return; + } + deviceLocks.get(deviceId).lock(); + try { + // Clean up first. + cleanupDevice(deviceId); + if (!configDevice(deviceId)) { + // Clean up if fails. + cleanupDevice(deviceId); + return; + } + devicesToConfigure.remove(deviceId); + } finally { + deviceLocks.get(deviceId).unlock(); + } + } + + private void cleanupDevice(DeviceId deviceId) { + final Device device = deviceService.getDevice(deviceId); + if (device == null || !device.is(IntProgrammable.class)) { + return; + } + device.as(IntProgrammable.class).cleanup(); + } + + private boolean configDevice(DeviceId deviceId) { + // Returns true if config was successful, false if not and a clean up is + // needed. + final Device device = deviceService.getDevice(deviceId); + if (device == null || !device.is(IntProgrammable.class)) { + return true; + } + + if (isNotIntConfigured()) { + log.warn("Missing INT config, aborting programming of INT device {}", deviceId); + return true; + } + + final boolean isEdge = !hostService.getConnectedHosts(deviceId).isEmpty(); + final IntDeviceRole intDeviceRole = isEdge + ? IntDeviceRole.SOURCE_SINK + : IntDeviceRole.TRANSIT; + + log.info("Started programming of INT device {} with role {}...", + deviceId, intDeviceRole); + + final IntProgrammable intProg = device.as(IntProgrammable.class); + + if (!isIntStarted()) { + // Leave device with no INT configuration. + return true; + } + + if (!intProg.init()) { + log.warn("Unable to init INT pipeline on {}", deviceId); + return false; + } + + if (intDeviceRole != IntDeviceRole.SOURCE_SINK) { + // Stop here, no more configuration needed for transit devices. + return true; + } + + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SINK)) { + if (!intProg.setupIntConfig(intConfig.get())) { + log.warn("Unable to apply INT report config on {}", deviceId); + return false; + } + } + + // Port configuration. + final Set hostPorts = deviceService.getPorts(deviceId) + .stream() + .map(port -> new ConnectPoint(deviceId, port.number())) + .filter(cp -> !hostService.getConnectedHosts(cp).isEmpty()) + .map(ConnectPoint::port) + .collect(Collectors.toSet()); + + for (PortNumber port : hostPorts) { + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SOURCE)) { + log.info("Setting port {}/{} as INT source port...", deviceId, port); + if (!intProg.setSourcePort(port)) { + log.warn("Unable to set INT source port {} on {}", port, deviceId); + return false; + } + } + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SINK)) { + log.info("Setting port {}/{} as INT sink port...", deviceId, port); + if (!intProg.setSinkPort(port)) { + log.warn("Unable to set INT sink port {} on {}", port, deviceId); + return false; + } + } + } + + if (!intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SOURCE)) { + // Stop here, no more configuration needed for sink devices. + return true; + } + + // Apply intents. + // This is a trivial implementation where we simply get the + // corresponding INT objective from an intent and we apply to all source + // device. + final Collection objectives = intentMap.values().stream() + .map(v -> getIntObjective(v.value())) + .collect(Collectors.toList()); + int appliedCount = 0; + for (IntObjective objective : objectives) { + if (intProg.addIntObjective(objective)) { + appliedCount = appliedCount + 1; + } + } + + log.info("Completed programming of {}, applied {} INT objectives of {} total", + deviceId, appliedCount, objectives.size()); + + return true; + } + + private IntObjective getIntObjective(IntIntent intent) { + return new IntObjective.Builder() + .withSelector(intent.selector()) + .withMetadataTypes(intent.metadataTypes()) + .withHeaderType(intent.headerType()) + .build(); + } + + /* Event listeners which trigger device configuration. */ + + private class InternalHostListener implements HostListener { + @Override + public void event(HostEvent event) { + final DeviceId deviceId = event.subject().location().deviceId(); + triggerDeviceConfigure(deviceId); + } + } + + private class InternalDeviceListener implements DeviceListener { + @Override + public void event(DeviceEvent event) { + switch (event.type()) { + case DEVICE_ADDED: + case DEVICE_UPDATED: + case DEVICE_REMOVED: + case DEVICE_SUSPENDED: + case DEVICE_AVAILABILITY_CHANGED: + case PORT_ADDED: + case PORT_UPDATED: + case PORT_REMOVED: + triggerDeviceConfigure(event.subject().id()); + return; + case PORT_STATS_UPDATED: + return; + default: + log.warn("Unknown device event type {}", event.type()); + } + } + } + + private class InternalIntentMapListener + implements MapEventListener { + @Override + public void event(MapEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalIntConfigListener + implements AtomicValueEventListener { + @Override + public void event(AtomicValueEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalIntStartedListener + implements AtomicValueEventListener { + @Override + public void event(AtomicValueEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalDeviceToConfigureListener + implements MapEventListener { + @Override + public void event(MapEvent event) { + if (event.type().equals(MapEvent.Type.REMOVE) || + event.newValue() == null) { + return; + } + // Schedule task in the future. Wait for events for this device to + // stabilize. + final DeviceId deviceId = event.key(); + final long creationTime = event.newValue().creationTime(); + ScheduledFuture newTask = SharedScheduledExecutors.newTimeout( + () -> configDeviceTask(deviceId, creationTime), + CONFIG_EVENT_DELAY, TimeUnit.SECONDS); + ScheduledFuture oldTask = scheduledDeviceTasks.put(deviceId, newTask); + if (oldTask != null) { + oldTask.cancel(false); + } + } + } +} diff --git a/modules.bzl b/modules.bzl index 37229ee90e..8c9110ef93 100644 --- a/modules.bzl +++ b/modules.bzl @@ -249,6 +249,7 @@ ONOS_APPS = [ "//apps/layout:onos-apps-layout-oar", "//apps/imr:onos-apps-imr-oar", "//apps/nodemetrics:onos-apps-nodemetrics-oar", + "//apps/inbandtelemetry:onos-apps-inbandtelemetry-oar", # "//web/gui2:onos-web-gui2-oar", "//apps/workflow:onos-apps-workflow-oar", ] diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java index 417043de1d..5ed475a269 100644 --- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java +++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java @@ -20,24 +20,21 @@ import com.google.common.collect.Sets; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onlab.util.ImmutableByteSequence; -import org.onlab.util.SharedExecutors; import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntConfig; import org.onosproject.inbandtelemetry.api.IntIntent; import org.onosproject.inbandtelemetry.api.IntObjective; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.ConnectPoint; import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; import org.onosproject.net.PortNumber; -import org.onosproject.net.device.DeviceService; 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.FlowRuleService; +import org.onosproject.net.flow.TableId; import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; @@ -45,7 +42,6 @@ import org.onosproject.net.flow.criteria.IPCriterion; import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.TcpPortCriterion; import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.host.HostService; import org.onosproject.net.pi.model.PiActionId; import org.onosproject.net.pi.model.PiMatchFieldId; import org.onosproject.net.pi.model.PiTableId; @@ -53,11 +49,9 @@ import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; import org.slf4j.Logger; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import static org.slf4j.LoggerFactory.getLogger; @@ -79,15 +73,18 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST, Criterion.Type.IP_PROTO); + private static final Set TABLES_TO_CLEANUP = Sets.newHashSet( + IntConstants.TBL_INT_INSERT_ID, + IntConstants.TBL_INT_INST_0003_ID, + IntConstants.TBL_INT_INST_0407_ID, + IntConstants.TBL_SET_SOURCE_ID, + IntConstants.TBL_SET_SINK_ID, + IntConstants.TBL_INT_SOURCE_ID, + IntConstants.TBL_GENERATE_REPORT_ID); + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private FlowRuleService flowRuleService; - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private DeviceService deviceService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - private HostService hostService; - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) private CoreService coreService; @@ -134,23 +131,16 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .build(); @Override - public void init() { + public boolean init() { deviceId = this.data().deviceId(); flowRuleService = handler().get(FlowRuleService.class); - deviceService = handler().get(DeviceService.class); - hostService = handler().get(HostService.class); coreService = handler().get(CoreService.class); appId = coreService.getAppId(PIPELINE_APP_NAME); if (appId == null) { log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return; + return false; } - Set hostPorts = deviceService.getPorts(deviceId).stream().filter(port -> - hostService.getConnectedHosts(new ConnectPoint(deviceId, port.number())).size() > 0 - ).map(Port::number).collect(Collectors.toSet()); - List flowRules = new ArrayList<>(); - // process_int_transit.tb_int_insert PiActionParam transitIdParam = new PiActionParam( IntConstants.ACT_PRM_SWITCH_ID, @@ -173,58 +163,8 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .forDevice(deviceId) .forTable(IntConstants.TBL_INT_INSERT_ID) .build(); - flowRules.add(transitFlowRule); - for (PortNumber portNumber: hostPorts) { - // process_set_source_sink.tb_set_source for each host-facing port - PiCriterion ingressCriterion = PiCriterion.builder() - .matchExact(BasicConstants.HDR_IN_PORT_ID, portNumber.toLong()) - .build(); - TrafficSelector srcSelector = DefaultTrafficSelector.builder() - .matchPi(ingressCriterion) - .build(); - PiAction setSourceAct = PiAction.builder() - .withId(IntConstants.ACT_INT_SET_SOURCE_ID) - .build(); - TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSourceAct) - .build(); - FlowRule srcFlowRule = DefaultFlowRule.builder() - .withSelector(srcSelector) - .withTreatment(srcTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(IntConstants.TBL_SET_SOURCE_ID) - .build(); - flowRules.add(srcFlowRule); - - // process_set_source_sink.tb_set_sink - PiCriterion egressCriterion = PiCriterion.builder() - .matchExact(IntConstants.HDR_OUT_PORT_ID, portNumber.toLong()) - .build(); - TrafficSelector sinkSelector = DefaultTrafficSelector.builder() - .matchPi(egressCriterion) - .build(); - PiAction setSinkAct = PiAction.builder() - .withId(IntConstants.ACT_INT_SET_SINK_ID) - .build(); - TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSinkAct) - .build(); - FlowRule sinkFlowRule = DefaultFlowRule.builder() - .withSelector(sinkSelector) - .withTreatment(sinkTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(IntConstants.TBL_SET_SINK_ID) - .build(); - flowRules.add(sinkFlowRule); - } - flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule)); + flowRuleService.applyFlowRules(transitFlowRule); // Populate tb_int_inst_0003 table INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> @@ -240,32 +180,103 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int matchValue, actionId, appId)); + + return true; } @Override - public CompletableFuture addIntObjective(IntObjective obj) { + public boolean setSourcePort(PortNumber port) { + // process_set_source_sink.tb_set_source for each host-facing port + PiCriterion ingressCriterion = PiCriterion.builder() + .matchExact(BasicConstants.HDR_IN_PORT_ID, port.toLong()) + .build(); + TrafficSelector srcSelector = DefaultTrafficSelector.builder() + .matchPi(ingressCriterion) + .build(); + PiAction setSourceAct = PiAction.builder() + .withId(IntConstants.ACT_INT_SET_SOURCE_ID) + .build(); + TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSourceAct) + .build(); + FlowRule srcFlowRule = DefaultFlowRule.builder() + .withSelector(srcSelector) + .withTreatment(srcTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(IntConstants.TBL_SET_SOURCE_ID) + .build(); + flowRuleService.applyFlowRules(srcFlowRule); + return true; + } + + @Override + public boolean setSinkPort(PortNumber port) { + // process_set_source_sink.tb_set_sink + PiCriterion egressCriterion = PiCriterion.builder() + .matchExact(IntConstants.HDR_OUT_PORT_ID, port.toLong()) + .build(); + TrafficSelector sinkSelector = DefaultTrafficSelector.builder() + .matchPi(egressCriterion) + .build(); + PiAction setSinkAct = PiAction.builder() + .withId(IntConstants.ACT_INT_SET_SINK_ID) + .build(); + TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSinkAct) + .build(); + FlowRule sinkFlowRule = DefaultFlowRule.builder() + .withSelector(sinkSelector) + .withTreatment(sinkTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(IntConstants.TBL_SET_SINK_ID) + .build(); + flowRuleService.applyFlowRules(sinkFlowRule); + return true; + } + + @Override + public boolean addIntObjective(IntObjective obj) { // TODO: support different types of watchlist other than flow watchlist - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, true), - SharedExecutors.getPoolThreadExecutor() - ); + return processIntObjective(obj, true); } @Override - public CompletableFuture removeIntObjective(IntObjective obj) { - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, false), - SharedExecutors.getPoolThreadExecutor() - ); + public boolean removeIntObjective(IntObjective obj) { + return processIntObjective(obj, false); } @Override - public CompletableFuture setupIntConfig(IntConfig config) { - return CompletableFuture.supplyAsync( - () -> setupIntReportInternal(config), - SharedExecutors.getPoolThreadExecutor() - ); + public boolean setupIntConfig(IntConfig config) { + return setupIntReportInternal(config); + } + + @Override + public void cleanup() { + StreamSupport.stream(flowRuleService.getFlowEntries( + data().deviceId()).spliterator(), false) + .filter(f -> f.table().type() == TableId.Type.PIPELINE_INDEPENDENT) + .filter(f -> TABLES_TO_CLEANUP.contains((PiTableId) f.table())) + .forEach(flowRuleService::removeFlowRules); + } + + @Override + public boolean supportsFunctionality(IntFunctionality functionality) { + switch (functionality) { + case SOURCE: + case SINK: + case TRANSIT: + return true; + default: + log.warn("Unknown functionality {}", functionality); + return false; + } } private void populateInstTableEntry(PiTableId tableId, PiMatchFieldId matchFieldId, @@ -419,12 +430,12 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } /** - * Returns a subset of Criterion from given selector, - * which is unsupported by this INT pipeline. + * Returns a subset of Criterion from given selector, which is unsupported + * by this INT pipeline. * * @param selector a traffic selector - * @return a subset of Criterion from given selector, unsupported by this INT pipeline, - * empty if all criteria are supported. + * @return a subset of Criterion from given selector, unsupported by this + * INT pipeline, empty if all criteria are supported. */ private Set unsupportedSelectors(TrafficSelector selector) { return selector.criteria().stream() diff --git a/pipelines/fabric/BUCK b/pipelines/fabric/BUCK index 168e9d81d0..549128988d 100644 --- a/pipelines/fabric/BUCK +++ b/pipelines/fabric/BUCK @@ -6,6 +6,7 @@ COMPILE_DEPS = [ '//pipelines/basic:onos-pipelines-basic', '//core/store/serializers:onos-core-serializers', '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api', + '//providers/general/device:onos-providers-general-device', ] TEST_DEPS = [ diff --git a/pipelines/fabric/BUILD b/pipelines/fabric/BUILD index c356aae99b..11dad5684f 100644 --- a/pipelines/fabric/BUILD +++ b/pipelines/fabric/BUILD @@ -1,6 +1,7 @@ COMPILE_DEPS = CORE_DEPS + KRYO + [ "//protocols/p4runtime/model:onos-protocols-p4runtime-model", "//protocols/p4runtime/api:onos-protocols-p4runtime-api", + "//providers/general/device:onos-providers-general-device", "//pipelines/basic:onos-pipelines-basic", "//core/store/serializers:onos-core-serializers", "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index 7c7f3fb7a3..07bb8627d8 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -45,6 +45,8 @@ public final class FabricConstants { PiMatchFieldId.of("hdr.vlan_tag.is_valid"); public static final PiMatchFieldId HDR_ICMP_ICMP_CODE = PiMatchFieldId.of("hdr.icmp.icmp_code"); + public static final PiMatchFieldId HDR_INT_HEADER_IS_VALID = + PiMatchFieldId.of("hdr.int_header.is_valid"); public static final PiMatchFieldId HDR_ETHERNET_SRC_ADDR = PiMatchFieldId.of("hdr.ethernet.src_addr"); public static final PiMatchFieldId HDR_ICMP_ICMP_TYPE = diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java index 5d95abdbad..15e3f01412 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java @@ -15,27 +15,23 @@ */ package org.onosproject.pipelines.fabric; -import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Sets; -import org.onlab.util.ImmutableByteSequence; -import org.onlab.util.SharedExecutors; import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntConfig; import org.onosproject.inbandtelemetry.api.IntIntent; import org.onosproject.inbandtelemetry.api.IntObjective; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.ConnectPoint; import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; import org.onosproject.net.PortNumber; -import org.onosproject.net.device.DeviceService; +import org.onosproject.net.config.NetworkConfigService; 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.FlowRuleService; +import org.onosproject.net.flow.TableId; import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; @@ -43,32 +39,32 @@ import org.onosproject.net.flow.criteria.IPCriterion; import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.TcpPortCriterion; import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.host.HostService; -import org.onosproject.net.pi.model.PiActionId; -import org.onosproject.net.pi.model.PiMatchFieldId; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; +import org.onosproject.provider.general.device.api.GeneralProviderDeviceConfig; import org.slf4j.Logger; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; +import static org.onlab.util.ImmutableByteSequence.copyFrom; import static org.slf4j.LoggerFactory.getLogger; +/** + * Implementation of INT programmable behavior for fabric.p4. Currently supports + * only SOURCE and TRANSIT functionalities. + */ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements IntProgrammable { + + private final Logger log = getLogger(getClass()); + // TODO: change this value to the value of diameter of a network. + private static final int DEFAULT_PRIORITY = 10000; private static final int MAXHOP = 64; private static final int PORTMASK = 0xffff; - private static final int IDLE_TIMEOUT = 100; private static final int PKT_INSTANCE_TYPE_INGRESS_CLONE = 1; - // Application name of the pipeline which adds this implementation to the pipeconf - private static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; - private final Logger log = getLogger(getClass()); - private ApplicationId appId; private static final Set SUPPORTED_CRITERION = Sets.newHashSet( Criterion.Type.IPV4_DST, Criterion.Type.IPV4_SRC, @@ -76,77 +72,65 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST, Criterion.Type.IP_PROTO); + private static final Set TABLES_TO_CLEANUP = Sets.newHashSet( + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT, + FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE, + FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK, + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE, + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT + ); + private FlowRuleService flowRuleService; - private HostService hostService; private CoreService coreService; - + private NetworkConfigService cfgService; private DeviceId deviceId; - private static final int DEFAULT_PRIORITY = 10000; - private static final ImmutableBiMap INST_0003_ACTION_MAP = - ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15) - .build(); + private ApplicationId appId; - private static final ImmutableBiMap INST_0407_ACTION_MAP = - ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15) - .build(); - - @Override - public void init() { + private boolean setupBehaviour() { deviceId = this.data().deviceId(); flowRuleService = handler().get(FlowRuleService.class); - DeviceService deviceService = handler().get(DeviceService.class); - hostService = handler().get(HostService.class); coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); + cfgService = handler().get(NetworkConfigService.class); + appId = coreService.getAppId(PipeconfLoader.PIPELINE_APP_NAME); if (appId == null) { - log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return; + log.warn("Application ID is null. Cannot initialize behaviour."); + return false; + } + return true; + } + + @Override + public boolean init() { + + if (!setupBehaviour()) { + return false; } - Set hostPorts = deviceService.getPorts(deviceId).stream() - .filter(port -> hostService.getConnectedHosts( - new ConnectPoint(deviceId, port.number())).size() > 0 - ).map(Port::number).collect(Collectors.toSet()); - List flowRules = new ArrayList<>(); + final GeneralProviderDeviceConfig cfg = cfgService.getConfig( + deviceId, GeneralProviderDeviceConfig.class); + if (cfg == null) { + log.warn("Missing GeneralProviderDevice config for {}", deviceId); + return false; + } + final String switchId = cfg.protocolsInfo().containsKey("int") ? + cfg.protocolsInfo().get("int").configValues().get("switchId") + : null; + if (switchId == null || switchId.isEmpty()) { + log.warn("Missing INT device config for {}", deviceId); + return false; + } + + PiActionParam transitIdParam; + try { + transitIdParam = new PiActionParam( + FabricConstants.SWITCH_ID, + // FIXME set switch ID from netcfg + copyFrom(Integer.parseInt(switchId))); + } catch (NumberFormatException e) { + log.warn("Invalid INT switch ID for {}: {}", deviceId, switchId); + return false; + } - // process_int_transit.tb_int_insert - PiActionParam transitIdParam = new PiActionParam( - FabricConstants.SWITCH_ID, - ImmutableByteSequence.copyFrom( - Integer.parseInt(deviceId.toString().substring( - deviceId.toString().length() - 2)))); PiAction transitAction = PiAction.builder() .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA) .withParameter(transitIdParam) @@ -154,8 +138,14 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int TrafficTreatment treatment = DefaultTrafficTreatment.builder() .piTableAction(transitAction) .build(); + TrafficSelector selector = DefaultTrafficSelector.builder() + .matchPi(PiCriterion.builder().matchExact( + FabricConstants.HDR_INT_HEADER_IS_VALID, (byte) 0x01) + .build()) + .build(); FlowRule transitFlowRule = DefaultFlowRule.builder() + .withSelector(selector) .withTreatment(treatment) .fromApp(appId) .withPriority(DEFAULT_PRIORITY) @@ -163,149 +153,139 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .forDevice(deviceId) .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT) .build(); - flowRules.add(transitFlowRule); - for (PortNumber portNumber : hostPorts) { - // process_set_source_sink.tb_set_source for each host-facing port - PiCriterion ingressCriterion = PiCriterion.builder() - .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, portNumber.toLong()) - .build(); - TrafficSelector srcSelector = DefaultTrafficSelector.builder() - .matchPi(ingressCriterion) - .build(); - PiAction setSourceAct = PiAction.builder() - .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE) - .build(); - TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSourceAct) - .build(); - FlowRule srcFlowRule = DefaultFlowRule.builder() - .withSelector(srcSelector) - .withTreatment(srcTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE) - .build(); - flowRules.add(srcFlowRule); + flowRuleService.applyFlowRules(transitFlowRule); + return true; + } - // process_set_source_sink.tb_set_sink - PiCriterion egressCriterion = PiCriterion.builder() - .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, portNumber.toLong()) - .build(); - TrafficSelector sinkSelector = DefaultTrafficSelector.builder() - .matchPi(egressCriterion) - .build(); - PiAction setSinkAct = PiAction.builder() - .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK) - .build(); - TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSinkAct) - .build(); - FlowRule sinkFlowRule = DefaultFlowRule.builder() - .withSelector(sinkSelector) - .withTreatment(sinkTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK) - .build(); - flowRules.add(sinkFlowRule); + @Override + public boolean setSourcePort(PortNumber port) { + + if (!setupBehaviour()) { + return false; } - flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule)); - // Populate tb_int_inst_0003 table - INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> populateInstTableEntry( - FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0003, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0003, - matchValue, - actionId, - appId)); - // Populate tb_int_inst_0407 table - INST_0407_ACTION_MAP.forEach((matchValue, actionId) -> populateInstTableEntry( - FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0407, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0407, - matchValue, - actionId, - appId)); - } - - @Override - public CompletableFuture addIntObjective(IntObjective obj) { - // TODO: support different types of watchlist other than flow watchlist - - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, true), - SharedExecutors.getPoolThreadExecutor() - ); - } - - @Override - public CompletableFuture removeIntObjective(IntObjective obj) { - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, false), - SharedExecutors.getPoolThreadExecutor() - ); - } - - @Override - public CompletableFuture setupIntConfig(IntConfig config) { - return CompletableFuture.supplyAsync( - () -> setupIntReportInternal(config), - SharedExecutors.getPoolThreadExecutor() - ); - } - - private void populateInstTableEntry(PiTableId tableId, PiMatchFieldId matchFieldId, - int matchValue, PiActionId actionId, ApplicationId appId) { - PiCriterion instCriterion = PiCriterion.builder() - .matchExact(matchFieldId, matchValue) + PiCriterion ingressCriterion = PiCriterion.builder() + .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, port.toLong()) .build(); - TrafficSelector instSelector = DefaultTrafficSelector.builder() - .matchPi(instCriterion) + TrafficSelector srcSelector = DefaultTrafficSelector.builder() + .matchPi(ingressCriterion) .build(); - PiAction instAction = PiAction.builder() - .withId(actionId) + PiAction setSourceAct = PiAction.builder() + .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE) .build(); - TrafficTreatment instTreatment = DefaultTrafficTreatment.builder() - .piTableAction(instAction) + TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSourceAct) .build(); - - FlowRule instFlowRule = DefaultFlowRule.builder() - .withSelector(instSelector) - .withTreatment(instTreatment) + FlowRule srcFlowRule = DefaultFlowRule.builder() + .withSelector(srcSelector) + .withTreatment(srcTreatment) + .fromApp(appId) .withPriority(DEFAULT_PRIORITY) .makePermanent() .forDevice(deviceId) - .forTable(tableId) - .fromApp(appId) + .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE) .build(); + flowRuleService.applyFlowRules(srcFlowRule); + return true; + } - flowRuleService.applyFlowRules(instFlowRule); + @Override + public boolean setSinkPort(PortNumber port) { + + if (!setupBehaviour()) { + return false; + } + + PiCriterion egressCriterion = PiCriterion.builder() + .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, port.toLong()) + .build(); + TrafficSelector sinkSelector = DefaultTrafficSelector.builder() + .matchPi(egressCriterion) + .build(); + PiAction setSinkAct = PiAction.builder() + .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK) + .build(); + TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSinkAct) + .build(); + FlowRule sinkFlowRule = DefaultFlowRule.builder() + .withSelector(sinkSelector) + .withTreatment(sinkTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK) + .build(); + flowRuleService.applyFlowRules(sinkFlowRule); + return true; + } + + @Override + public boolean addIntObjective(IntObjective obj) { + + if (!setupBehaviour()) { + return false; + } + + return processIntObjective(obj, true); + } + + @Override + public boolean removeIntObjective(IntObjective obj) { + + if (!setupBehaviour()) { + return false; + } + + return processIntObjective(obj, false); + } + + @Override + public boolean setupIntConfig(IntConfig config) { + + if (!setupBehaviour()) { + return false; + } + + return setupIntReportInternal(config); + } + + @Override + public void cleanup() { + + if (!setupBehaviour()) { + return; + } + + StreamSupport.stream(flowRuleService.getFlowEntries( + data().deviceId()).spliterator(), false) + .filter(f -> f.table().type() == TableId.Type.PIPELINE_INDEPENDENT) + .filter(f -> TABLES_TO_CLEANUP.contains((PiTableId) f.table())) + .forEach(flowRuleService::removeFlowRules); + } + + @Override + public boolean supportsFunctionality(IntFunctionality functionality) { + // Sink not fully supported yet. + return functionality == IntFunctionality.SOURCE || functionality == IntFunctionality.TRANSIT; } private FlowRule buildWatchlistEntry(IntObjective obj) { - coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); - if (appId == null) { - log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return null; - } int instructionBitmap = buildInstructionBitmap(obj.metadataTypes()); PiActionParam maxHopParam = new PiActionParam( FabricConstants.MAX_HOP, - ImmutableByteSequence.copyFrom(MAXHOP)); + copyFrom(MAXHOP)); PiActionParam instCntParam = new PiActionParam( FabricConstants.INS_CNT, - ImmutableByteSequence.copyFrom(Integer.bitCount(instructionBitmap))); + copyFrom(Integer.bitCount(instructionBitmap))); PiActionParam inst0003Param = new PiActionParam( FabricConstants.INS_MASK0003, - ImmutableByteSequence.copyFrom((instructionBitmap >> 12) & 0xF)); + copyFrom((instructionBitmap >> 12) & 0xF)); PiActionParam inst0407Param = new PiActionParam( FabricConstants.INS_MASK0407, - ImmutableByteSequence.copyFrom((instructionBitmap >> 8) & 0xF)); + copyFrom((instructionBitmap >> 8) & 0xF)); PiAction intSourceAction = PiAction.builder() .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP) @@ -362,13 +342,13 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } return DefaultFlowRule.builder() - .forDevice(this.data().deviceId()) + .forDevice(deviceId) .withSelector(sBuilder.build()) .withTreatment(instTreatment) .withPriority(DEFAULT_PRIORITY) .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE) .fromApp(appId) - .withIdleTimeout(IDLE_TIMEOUT) + .makePermanent() .build(); } @@ -423,11 +403,9 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } private boolean processIntObjective(IntObjective obj, boolean install) { - flowRuleService = handler().get(FlowRuleService.class); - deviceId = this.data().deviceId(); if (install && !unsupportedSelectors(obj.selector()).isEmpty()) { - log.warn("Device {} does not support criteria {} for INT.", - deviceId, unsupportedSelectors(obj.selector())); + log.warn("Criteria {} not supported by {} for INT watchlist", + unsupportedSelectors(obj.selector()), deviceId); return false; } @@ -449,42 +427,40 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } private boolean setupIntReportInternal(IntConfig cfg) { - flowRuleService = handler().get(FlowRuleService.class); - - FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE); - if (reportRule != null) { - flowRuleService.applyFlowRules(reportRule); - log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId()); - return true; - } else { - log.warn("Failed to add report entry on {}", this.data().deviceId()); - return false; - } + // Report not fully supported yet. + return true; + // FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE); + // if (reportRule != null) { + // flowRuleService.applyFlowRules(reportRule); + // log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId()); + // return true; + // } else { + // log.warn("Failed to add report entry on {}", this.data().deviceId()); + // return false; + // } } private FlowRule buildReportEntry(IntConfig cfg, int type) { - coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); - if (appId == null) { - log.warn("Application ID is null. Cannot build report entry."); + + if (!setupBehaviour()) { return null; } PiActionParam srcMacParam = new PiActionParam( FabricConstants.SRC_MAC, - ImmutableByteSequence.copyFrom(cfg.sinkMac().toBytes())); + copyFrom(cfg.sinkMac().toBytes())); PiActionParam nextHopMacParam = new PiActionParam( FabricConstants.MON_MAC, - ImmutableByteSequence.copyFrom(cfg.collectorNextHopMac().toBytes())); + copyFrom(cfg.collectorNextHopMac().toBytes())); PiActionParam srcIpParam = new PiActionParam( FabricConstants.SRC_IP, - ImmutableByteSequence.copyFrom(cfg.sinkIp().toOctets())); + copyFrom(cfg.sinkIp().toOctets())); PiActionParam monIpParam = new PiActionParam( FabricConstants.MON_IP, - ImmutableByteSequence.copyFrom(cfg.collectorIp().toOctets())); + copyFrom(cfg.collectorIp().toOctets())); PiActionParam monPortParam = new PiActionParam( FabricConstants.MON_PORT, - ImmutableByteSequence.copyFrom(cfg.collectorPort().toInt())); + copyFrom(cfg.collectorPort().toInt())); PiAction reportAction = PiAction.builder() .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION) .withParameter(srcMacParam) diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java index 9b54dfcbad..1609794fef 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java @@ -62,12 +62,11 @@ public class PipeconfLoader { private static Logger log = getLogger(PipeconfLoader.class); + static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; + private static final String BASE_PIPECONF_ID = "org.onosproject.pipelines"; - private static final String P4C_OUT_PATH = "/p4c-out"; - private static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; - // profile/target/platform private static final String P4C_RES_BASE_PATH = P4C_OUT_PATH + "/%s/%s/%s/"; diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4 index 0aee32b0fb..95b9bc826c 100644 --- a/pipelines/fabric/src/main/resources/fabric.p4 +++ b/pipelines/fabric/src/main/resources/fabric.p4 @@ -50,6 +50,7 @@ inout standard_metadata_t standard_metadata) { #endif // WITH_PORT_COUNTER apply { + _PRE_INGRESS #ifdef WITH_SPGW spgw_normalizer.apply(hdr.gtpu.isValid(), hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.ipv4, hdr.udp, hdr.inner_ipv4, hdr.inner_udp); @@ -83,6 +84,7 @@ control FabricEgress (inout parsed_headers_t hdr, EgressNextControl() egress_next; apply { + _PRE_EGRESS pkt_io_egress.apply(hdr, fabric_metadata, standard_metadata); egress_next.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_SPGW diff --git a/pipelines/fabric/src/main/resources/include/define.p4 b/pipelines/fabric/src/main/resources/include/define.p4 index 26d3167534..dfde32349e 100644 --- a/pipelines/fabric/src/main/resources/include/define.p4 +++ b/pipelines/fabric/src/main/resources/include/define.p4 @@ -37,6 +37,14 @@ #define _PKT_OUT_HDR_ANNOT #endif +#ifndef _PRE_INGRESS +#define _PRE_INGRESS +#endif + +#ifndef _PRE_EGRESS +#define _PRE_EGRESS +#endif + #ifndef IP_VER_LENGTH #define IP_VER_LENGTH 4 #endif diff --git a/pipelines/fabric/src/main/resources/include/int/int_header.p4 b/pipelines/fabric/src/main/resources/include/int/int_header.p4 index f3399952e6..4e352ee343 100644 --- a/pipelines/fabric/src/main/resources/include/int/int_header.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_header.p4 @@ -26,6 +26,8 @@ struct int_metadata_t { bit<32> switch_id; bit<8> new_words; bit<16> new_bytes; + bit<32> ig_tstamp; + bit<32> eg_tstamp; } // INT headers - 8 bytes diff --git a/pipelines/fabric/src/main/resources/include/int/int_transit.p4 b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 index 4d4568b3ca..579fa07d5c 100644 --- a/pipelines/fabric/src/main/resources/include/int/int_transit.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 @@ -269,11 +269,17 @@ control process_int_transit ( // Default action used to set switch ID. table tb_int_insert { - key = {} + // We don't really need a key here, however we add a dummy one as a + // workaround to ONOS inability to properly support default actions. + key = { + hdr.int_header.isValid(): exact @name("hdr.int_header.is_valid"); + } actions = { init_metadata; + @defaultonly nop; } - size = 0; + const default_action = nop; + size = 1; } // Table to process instruction bits 0-3. diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 246401b230..c7d78e805d 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -5013,7 +5013,7 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 79, "runtime_data" : [], "primitives" : [] @@ -13300,7 +13300,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 370, + "line" : 374, "column" : 12, "source_fragment" : "return" } @@ -13349,7 +13349,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 378, + "line" : 382, "column" : 12, "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" } @@ -13398,7 +13398,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 375, + "line" : 379, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" } @@ -13447,7 +13447,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 381, + "line" : 385, "column" : 12, "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" } @@ -13496,7 +13496,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 384, + "line" : 388, "column" : 12, "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" } @@ -15829,25 +15829,32 @@ "column" : 10, "source_fragment" : "tb_int_insert" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.is_valid", + "target" : ["int_header", "$valid$"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 1, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [85, 76], - "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "action_ids" : [85, 79], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], "base_default_next" : "node_94", "next_tables" : { "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_94", - "NoAction" : "node_94" + "nop" : "node_94" }, "default_entry" : { - "action_id" : 76, - "action_const" : false, + "action_id" : 79, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { @@ -15878,7 +15885,7 @@ "id" : 59, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 280, + "line" : 284, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -15896,7 +15903,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 77], + "action_ids" : [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 76], "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" : { @@ -15919,7 +15926,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 77, + "action_id" : 76, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -16140,7 +16147,7 @@ "id" : 60, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 324, + "line" : 328, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -16158,7 +16165,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 78], + "action_ids" : [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 77], "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_34", "next_tables" : { @@ -16181,7 +16188,7 @@ "NoAction" : "tbl_act_34" }, "default_entry" : { - "action_id" : 78, + "action_id" : 77, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -16505,7 +16512,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [118, 79], + "action_ids" : [118, 78], "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "NoAction"], "base_default_next" : "node_108", "next_tables" : { @@ -16513,7 +16520,7 @@ "NoAction" : "node_108" }, "default_entry" : { - "action_id" : 79, + "action_id" : 78, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -16957,7 +16964,7 @@ "id" : 32, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 369, + "line" : 373, "column" : 12, "source_fragment" : "fmeta.int_meta.transit == false" }, @@ -17014,7 +17021,7 @@ "id" : 34, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 377, + "line" : 381, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -17037,7 +17044,7 @@ "id" : 35, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 380, + "line" : 384, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -17060,7 +17067,7 @@ "id" : 36, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 383, + "line" : 387, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index 5fcf0f6658..943fb1c173 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -518,14 +518,21 @@ tables { name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT + } action_refs { id: 16780783 } action_refs { - id: 16800567 + id: 16819938 annotations: "@defaultonly()" } - size: 1024 + const_default_action_id: 16819938 + size: 1 idle_timeout_behavior: NO_TIMEOUT } tables { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index a179079ec7..293212f5ae 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -3608,7 +3608,7 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 53, "runtime_data" : [], "primitives" : [] @@ -10280,7 +10280,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 370, + "line" : 374, "column" : 12, "source_fragment" : "return" } @@ -10329,7 +10329,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 378, + "line" : 382, "column" : 12, "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" } @@ -10378,7 +10378,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 375, + "line" : 379, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" } @@ -10427,7 +10427,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 381, + "line" : 385, "column" : 12, "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" } @@ -10476,7 +10476,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 384, + "line" : 388, "column" : 12, "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" } @@ -11971,25 +11971,32 @@ "column" : 10, "source_fragment" : "tb_int_insert" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.is_valid", + "target" : ["int_header", "$valid$"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 1, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [58, 51], - "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "action_ids" : [58, 53], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], "base_default_next" : "node_60", "next_tables" : { "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_60", - "NoAction" : "node_60" + "nop" : "node_60" }, "default_entry" : { - "action_id" : 51, - "action_const" : false, + "action_id" : 53, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { @@ -12020,7 +12027,7 @@ "id" : 36, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 280, + "line" : 284, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -12038,7 +12045,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 52], + "action_ids" : [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 51], "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" : { @@ -12061,7 +12068,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 52, + "action_id" : 51, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -12282,7 +12289,7 @@ "id" : 37, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 324, + "line" : 328, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -12300,7 +12307,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 53], + "action_ids" : [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 52], "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_18", "next_tables" : { @@ -12323,7 +12330,7 @@ "NoAction" : "tbl_act_18" }, "default_entry" : { - "action_id" : 53, + "action_id" : 52, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -12997,7 +13004,7 @@ "id" : 21, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 369, + "line" : 373, "column" : 12, "source_fragment" : "fmeta.int_meta.transit == false" }, @@ -13054,7 +13061,7 @@ "id" : 23, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 377, + "line" : 381, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -13077,7 +13084,7 @@ "id" : 24, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 380, + "line" : 384, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -13100,7 +13107,7 @@ "id" : 25, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 383, + "line" : 387, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt index cc19487c95..62132343f2 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt @@ -431,14 +431,21 @@ tables { name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT + } action_refs { id: 16780783 } action_refs { - id: 16800567 + id: 16819938 annotations: "@defaultonly()" } - size: 1024 + const_default_action_id: 16819938 + size: 1 idle_timeout_behavior: NO_TIMEOUT } tables { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json index c4f0634c7b..97da4ebb78 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -4602,7 +4602,7 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 72, "runtime_data" : [], "primitives" : [] @@ -11866,7 +11866,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 370, + "line" : 374, "column" : 12, "source_fragment" : "return" } @@ -11915,7 +11915,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 378, + "line" : 382, "column" : 12, "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" } @@ -11964,7 +11964,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 375, + "line" : 379, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" } @@ -12013,7 +12013,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 381, + "line" : 385, "column" : 12, "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" } @@ -12062,7 +12062,7 @@ ], "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 384, + "line" : 388, "column" : 12, "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" } @@ -14193,25 +14193,32 @@ "column" : 10, "source_fragment" : "tb_int_insert" }, - "key" : [], + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.is_valid", + "target" : ["int_header", "$valid$"], + "mask" : null + } + ], "match_type" : "exact", "type" : "simple", - "max_size" : 1024, + "max_size" : 1, "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [78, 70], - "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "NoAction"], + "action_ids" : [78, 72], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], "base_default_next" : "node_87", "next_tables" : { "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_87", - "NoAction" : "node_87" + "nop" : "node_87" }, "default_entry" : { - "action_id" : 70, - "action_const" : false, + "action_id" : 72, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { @@ -14242,7 +14249,7 @@ "id" : 55, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 280, + "line" : 284, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -14260,7 +14267,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 71], + "action_ids" : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 70], "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" : { @@ -14283,7 +14290,7 @@ "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 71, + "action_id" : 70, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -14504,7 +14511,7 @@ "id" : 56, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 324, + "line" : 328, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -14522,7 +14529,7 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 72], + "action_ids" : [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 71], "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_32", "next_tables" : { @@ -14545,7 +14552,7 @@ "NoAction" : "tbl_act_32" }, "default_entry" : { - "action_id" : 72, + "action_id" : 71, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -15245,7 +15252,7 @@ "id" : 29, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 369, + "line" : 373, "column" : 12, "source_fragment" : "fmeta.int_meta.transit == false" }, @@ -15302,7 +15309,7 @@ "id" : 31, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 377, + "line" : 381, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -15325,7 +15332,7 @@ "id" : 32, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 380, + "line" : 384, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -15348,7 +15355,7 @@ "id" : 33, "source_info" : { "filename" : "include/int/int_transit.p4", - "line" : 383, + "line" : 387, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt index f9bc88d2b4..be3e607438 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -472,14 +472,21 @@ tables { name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT + } action_refs { id: 16780783 } action_refs { - id: 16800567 + id: 16819938 annotations: "@defaultonly()" } - size: 1024 + const_default_action_id: 16819938 + size: 1 idle_timeout_behavior: NO_TIMEOUT } tables { From d15c5f63f779ce070e0c4e25020059aef7ff18fe Mon Sep 17 00:00:00 2001 From: Jordan Halterman Date: Wed, 3 Oct 2018 16:09:24 -0700 Subject: [PATCH 18/19] [ONOS-7801] Avoid converting local node on every lookup in ClusterStore Change-Id: I60cdfba80796fc7210ab96798086e42e1d3d2e94 --- .../store/atomix/cluster/impl/AtomixClusterStore.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a1b7f16a6a..618c631689 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 @@ -159,13 +159,13 @@ public class AtomixClusterStore extends AbstractStore Date: Wed, 3 Oct 2018 10:24:51 -0700 Subject: [PATCH 19/19] Fix NPE when trying to reference delta port statistics via REST API Change-Id: Ic195d06e55bd4d8379ac28938e93105d6d181bf6 --- .../src/main/java/org/onosproject/net/AbstractAnnotated.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java b/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java index 9e71fbd1bf..07bc6a7716 100644 --- a/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java +++ b/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java @@ -37,7 +37,7 @@ public abstract class AbstractAnnotated implements Annotated { */ protected AbstractAnnotated(Annotations... annotations) { checkArgument(annotations.length <= 1, "Only one set of annotations is expected"); - this.annotations = annotations.length == 1 ? annotations[0] : EMPTY; + this.annotations = annotations.length == 0 || annotations[0] == null ? EMPTY : annotations[0]; } @Override